PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : R5G6B5 Daten als Texturen an OpenGL senden?


Chris Lux
2005-01-20, 13:42:16
hi,
nur interesse halber. ist es möglich 16bit rgb daten im 5 6 5 format an OpenGL zu geben. in der 2.0 spec steht dazu nichts, nur formate mit der selben bittiefe für alle rgb kanäle. in den extension headern habe ich folgendes gefunden GL_UNSIGNED_SHORT_5_6_5 unter GL_VERSION_1_2. in diesem nvidia paper (http://download.nvidia.com/developer/OpenGL_Texture_Formats/nv_ogl_texture_formats.pdf) steht aufgelistet wie die daten intern gehandhabt werden, unter andem auch als 565. nur gibt es scheinbar keinen weg 565 daten per glTexImage an den server zu schicken.

sehe ich das richtig?

zeckensack
2005-01-20, 13:58:38
internal_format=GL_RGB5

Ob dabei auch tatsächlich "RGB565" herauskommt (was als internal_format tatsächlich nicht akzeptiert wird), kannst du mit glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_RED_SIZE,&irgendein_int) etc nachprüfen.

Chris Lux
2005-01-20, 14:40:46
internal_format=GL_RGB5

Ob dabei auch tatsächlich "RGB565" herauskommt (was als internal_format tatsächlich nicht akzeptiert wird), kannst du mit glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_RED_SIZE,&irgendein_int) etc nachprüfen.
aha.
was muss ich dann bei type angeben, weiterhin GL_UNSIGNED_BYTE? weil was kleineres gibt es ja nicht...

zeckensack
2005-01-20, 18:00:41
aha.
was muss ich dann bei type angeben, weiterhin GL_UNSIGNED_BYTE? weil was kleineres gibt es ja nicht... glTexImage2D(GL_TEXTURE_2D,0,
GL_RGB5,
64,64,0,
GL_RGB,
GL_UNSIGNED_SHORT_5_6_5,base_level);
Um's mal vorwegzunehmen, auf allen bisher von mir untersuchten Karten kriegt man eine RGB565-Textur.
(diverse Radeons, diverse Geförce, Wildcat VP, Kyro)

Chris Lux
2005-01-20, 20:47:57
glTexImage2D(GL_TEXTURE_2D,0,
GL_RGB5,
64,64,0,
GL_RGB,
GL_UNSIGNED_SHORT_5_6_5,base_level);
Um's mal vorwegzunehmen, auf allen bisher von mir untersuchten Karten kriegt man eine RGB565-Textur.
(diverse Radeons, diverse Geförce, Wildcat VP, Kyro)
danke erstmal.

und jez ist alles klar, es geht dabei um eine mobile anwendung eines kollegen von mir, der mit den texturen auf dem 'gerät' so seine probleme hat, da die opengl implemantierung dafür recht bescheiden ist.

wo ist dies denn dokumentiert? da, wie gesagt, ich die GL_UNSIGNED_SHORT_5_6_5 konstante in den headern gefunden habe, aber leider in keiner spec was dazu steht (die 2.0 spec sollte dies ja auf jeden fall enthalten).

seltsam finde ich auch, dass man bei normaler rgb8 anwendung mittels GL_UNSIGNED_BYTE angibt, welchen type die werte der einzelnen kanäle besitzen und hier die angabe für den gesammten pixel/texel macht.

zeckensack
2005-01-20, 20:59:44
danke erstmal.

und jez ist alles klar, es geht dabei um eine mobile anwendung eines kollegen von mir, der mit den texturen auf dem 'gerät' so seine probleme hat, da die opengl implemantierung dafür recht bescheiden ist.

wo ist dies denn dokumentiert? da, wie gesagt, ich die GL_UNSIGNED_SHORT_5_6_5 konstante in den headern gefunden habe, aber leider in keiner spec was dazu steht (die 2.0 spec sollte dies ja auf jeden fall enthalten).EXT_packed_pixels (http://oss.sgi.com/projects/ogl-sample/registry/EXT/packed_pixels.txt). Ist mit GL1.2 in die Kernspezifikation aufgenommen worden.
Steht auch in meiner glspec20.pdf einwandfrei drin. Sektion 3.6.4 beschreibt den kompletten "unpack"-Mechanismus :|
Es kann höchstens sein, dass du an der ziemlich behinderten Suchfunktion von Acrobat Reader gescheitert bist. Underscores kann das Ding nicht ...

seltsam finde ich auch, dass man bei normaler rgb8 anwendung mittels GL_UNSIGNED_BYTE angibt, welchen type die werte der einzelnen kanäle besitzen und hier die angabe für den gesammten pixel/texel macht.Das muss in dem Fall so sein, weil die Farbkanäle unterschiedliche Größen haben können.
GL_RGB,GL_UNSIGNED_SIX_BITS oä würde nicht funktionieren.