OpenGL-Textur-Upload: UNSIGNED_BYTE vs UNSIGNED_INT_8_8_8_8

8

Ich rufe glTexSubImage2D an. Wenn mein Pixelformat GL_RGBA ist, dann sind die Pixeltypen GL_UNSIGNED_BYTE und GL_UNSIGNED_INT_8_8_8_8 gleichwertig?

Sind diese beiden Paare auch gleichwertig?

  • Format = GL_RGBA, Type = GL_UNSIGNED_INT_8_8_8_8
  • Format = GL_BGRA, Type = GL_UNSIGNED_INT_8_8_8_8_REV

Ich habe versucht, die OpenGL-Spezifikation und die GL_EXT_packed_pixels-Spezifikation zu lesen, aber ehrlich gesagt, kann ich nicht von ihnen unterscheiden.

    
Stefan Monov 16.10.2011, 17:58
quelle

1 Antwort

16

Die Antworten sind Nein und Nein. Sie müssen über die Byte-Reihenfolge in Ihrem Computer nachdenken. Wenn Sie GL_RGBA und GL_UNSIGNED_INT_8_8_8_8 haben, bedeutet dies, dass Pixel in 32-Bit-Ganzzahlen gespeichert sind und die Farben in der logischen Reihenfolge RGBA in einer solchen Ganzzahl vorliegen, z. das rote ist in dem höherwertigen Byte und das Alpha ist in dem niederwertigen Byte. Aber wenn die Maschine Little-Endian ist (wie bei Intel-CPUs), folgt daraus, dass die tatsächliche Reihenfolge im Speicher ABGR ist. Während GL_RGBA mit GL_UNSIGNED_BYTE die Bytes in RGBA-Reihenfolge speichert, unabhängig davon, ob der Computer Little-Endian oder Big-Endian ist.

GL_BGRA mit GL_UNSIGNED_INT_8_8_8_8_REV würde Farben in einer Ganzzahl in der logischen Reihenfolge ARGB speichern, aber dann auf einer Little-Endian-Maschine, erhalten Sie die BGRA-Reihenfolge im Speicher.

    
JWWalker 16.10.2011 18:33
quelle

Tags und Links