Seite 1 von 1

OpenGL - Texture-Größe ändern

Verfasst: 30.10.2014, 22:56
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ß

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

Verfasst: 30.10.2014, 23:10
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.

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

Verfasst: 30.10.2014, 23:52
von xq
glTexSubImage wird auch nicht helfen. Afaik ist das auch gar nicht so trivial, wie soll die textur denn skaliert werden?

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

Verfasst: 31.10.2014, 12:19
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.

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

Verfasst: 31.10.2014, 14:02
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.

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

Verfasst: 31.10.2014, 14:41
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ß

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

Verfasst: 31.10.2014, 15:02
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.

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

Verfasst: 31.10.2014, 15:16
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ß

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

Verfasst: 31.10.2014, 16:18
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)