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)