OpenGL - Texture-Größe ändern

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

OpenGL - Texture-Größe ändern

Beitrag von Raven280438 »

Hi,

ist es irgendwie möglich, die Höhe und Breite einer Texture zu ändern, aber dabei die alten Bild-Daten zu behalten?

Wenn ich die Größe mit

Code: Alles auswählen

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 0);
ändere, ist das Bild anschließend leer.
Der letzte Parameter ist ja "data". Wie kann ich da die Bilddaten der alten Texture übergeben?



Gruß
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: OpenGL - Texture-Größe ändern

Beitrag von Schrompf »

Neu hochladen mit glTexSubImage2D() oder wie das hieß. Anders geht's nicht. Der vergrößert die Textur ja nicht auf magische Weise, sondern macht eine neue Textur unter der alten ID auf.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: OpenGL - Texture-Größe ändern

Beitrag von xq »

glTexSubImage wird auch nicht helfen. Afaik ist das auch gar nicht so trivial, wie soll die textur denn skaliert werden?
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2353
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: OpenGL - Texture-Größe ändern

Beitrag von Jonathan »

Wieso will man das denn überhaupt machen? Und was für ein Ergebnis erwartest du genau? Dass du anschließen das Bild mit schwarzen Streifen unten und rechts hast (wo halt vorher kein Bild war), oder soll das Bild skaliert werden? Beides hört sich irgendwie wenig nützlich an.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: OpenGL - Texture-Größe ändern

Beitrag von Schrompf »

Doch, glTexSubImage wird helfen :-) Da muss er sich nämlich bei den Parametern klar werden, was er eigentlich will, wenn er ein kleineres Bild in eine größere Textur reinkopiert.

Die Grundaussage jedenfalls sollte klar sein: es geht nicht, eine bestehende Textur umzugrößern. Stattdessen erzeugst Du eine neue Textur und kopierst den alten Inhalt in einen Bereich davon. Den alten Inhalt, falls Du ihn nicht mehr hast, kannst Du evtl. mit glReadPixels() bekommen. Die Angabe ohne Gewähr, weil ich nicht nachgelesen habe, unter welchen Umständen diese Funktion arbeitet.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

Re: OpenGL - Texture-Größe ändern

Beitrag von Raven280438 »

Hi,

ich habe vor, mehrere Font-Atlase in eine Texture zu rendern.
Immer wenn ich eine Font-Datei hinzufüge, muss ich ja erstmal Platz im aktuellen Font-Atlas machen.
Jede TTF-Datei hat bei mir eine Zeile. Das heist, ich muss immer die Höhe und ggf. auch die Breite des Font-Atlases erhöhen.

Ich habe mittlerweile die Funktion glGetTexImage() gefunden, hab sie aber noch nicht richtig einsetzen können...

Kann mir da jemand weiterhelfen?


Gruß
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: OpenGL - Texture-Größe ändern

Beitrag von Spiele Programmierer »

Aha. Ich würde dir als Alternative lieber empfehlen, einfach alle Zeichen neu zu zeichnen und hochzuladen.
Das zurückholen von Daten von OpenGL gilt als extrem langsam und in einigen Implementierungen besonders buggy.

Nebenbei halte ich die Idee, die Zeichen so zu organisieren für ziemlich schlecht.
Jedes Zeichen hat eine unterschiedliche Größe ("W"ist zb. größer als "i"), so ist es viel effizienter die Zeichen direkt zu packen.
Außerdem gibt es ein Texturgrößenlimit, also gäbe es ein unnötig geringes Limit an Zeichen von einer Schriftart.
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

Re: OpenGL - Texture-Größe ändern

Beitrag von Raven280438 »

Hi,
Aha. Ich würde dir als Alternative lieber empfehlen, einfach alle Zeichen neu zu zeichnen und hochzuladen.
Das zurückholen von Daten von OpenGL gilt als extrem langsam und in einigen Implementierungen besonders buggy.
Hm, ok. Dann werde ich erstmal alle Font die geladen werden sollen in eine Liste einlesen, und dann alle hintereinander auf einmal rendern.
Nebenbei halte ich die Idee, die Zeichen so zu organisieren für ziemlich schlecht.
Wie kann man die denn besser anortnen?


Gruß
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: OpenGL - Texture-Größe ändern

Beitrag von Artificial Mind »

Raven280438 hat geschrieben:Wie kann man die denn besser anortnen?
Ich kann hier https://github.com/juj/RectangleBinPack empfehlen. (Nutzen wir auch selber)
Antworten