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.
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.
Tags und Links opengl pixelformat