# OpenGL beliebige Texturgröße



## Kr0e (19. Jun 2010)

Hallo Java-Gemeinde,

hab damals gelernt, dass OpenGL Texturlängen/breiten unbedingt aus 2er Potenzen bestehen müssen.
Habe nun mal probiert, beliege Texturgrößen zu wählen, was auch prima funktioniert.

Woran liegt es, dass das funktioniert ? Ist das eine Besonderheit meines Grafiktreibers (NVidia) und kein Standard ?
SOllte man trotzdem diese 2er Potenzregel benutzen ?

Ich habe nämlich folgenden Grund, warum ich unbedingt beliege Größen wählen kann:
Ich habe einen sehr schnellen OpenVL Video Renderer geschrieben, der GStreamer-Java für die Dekodierung benutzt.
Dieser Renderer ist nur deshalb so schnell, weil ich keine Puffer in der JVM umkopieren muss, was bei HD Videos
sehr viel Overhead verursacht. Ich benutze direkte, native Buffer und gebe sie einfach an OpenGL weiter. Dadurch
entsteht praktisch null Overhead.

Die Größe des Videos ist ja nur selten eine 2er potenz. Wenn ich nun eine Textur updaten will, dann müsste ich Texturen erstellen,
die etwas größer sind, als das Video und dann als Länge und Breite eine 2er Potenz haben.

Allerdings wird es dann sehr kompliziert, ein Videobild auf diese etwas zu große Textur zu kopieren.
GStreamer arbeitet aus Performancegründen natürlich mit direkten ByteBuffern. So wie ich es zur Zeit mache, würde es mit unterschiedlichen Größen nicht gehen:

texturePuffer.put(videoFramePuffer);

Wenn nun der texturePuffer größer ist, leigt es auf der Hand, dass die GRößenverhältnisse nicht mehr stimmen...
Also alles ziemlich unpraktisch...

Zurück zur Frage:

Kann ich davon ausgehen, dass neue und mittelneue Grafikkarten(treiber) in der LAge sind größendynamische Texturen zuerstellen?


Gruß,
Chris


----------



## Guest2 (19. Jun 2010)

Ja, seit OpenGL 2.0 existiert diese Einschränkung nicht mehr. Und auch (fast) alle die kein GL2.0 können, unterstützen das trotzdem (das ist bei < 2.0 ne Extension).

Gruß,
Fancy


----------



## Kr0e (19. Jun 2010)

Perfekt, danke!


----------

