2011-10-16 22 views
8

Llamo a glTexSubImage2D. Si mi formato de píxel es GL_RGBA, ¿son los tipos de píxeles GL_UNSIGNED_BYTE y GL_UNSIGNED_INT_8_8_8_8 totalmente equivalentes?Carga de texturas OpenGL: UNSIGNED_BYTE vs UNSIGNED_INT_8_8_8_8

Además, ¿estos dos pares son equivalentes?

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

He intentado leer la especificación OpenGL y la especificación GL_EXT_packed_pixels, pero la verdad es que no se puede ni pies ni cabeza de ellos.

Respuesta

16

Las respuestas son No y No. Debe pensar en el orden de bytes en su computadora. Si tiene GL_RGBA y GL_UNSIGNED_INT_8_8_8_8, eso significa que los píxeles se almacenan en enteros de 32 bits, y los colores están en el orden lógico RGBA en dicho número entero, p. el rojo está en el byte de orden superior y el alfa en el byte de orden inferior. Pero si la máquina es little-endian (como con las CPU Intel), se deduce que el orden real en la memoria es ABGR. Mientras que, GL_RGBA con GL_UNSIGNED_BYTE almacenará los bytes en orden RGBA sin importar si la computadora es little-endian o big-endian.

GL_BGRA con GL_UNSIGNED_INT_8_8_8_8_REV almacenaría los colores en un entero en el orden lógico ARGB, pero luego en una máquina little-endian, obtendrá el orden BGRA en la memoria.

+3

Vale la pena señalar que 'GL_UNSIGNED_BYTE' y' GL_UNSIGNED_INT _... 'en este ejemplo son los tipos de transferencia de píxeles. No dicen nada sobre cómo GL almacena el color, solo cómo los colores "empaquetados" son interpretados por GL cuando se le envían los datos de color. Una especie de distinción importante porque generalmente el objetivo con estos formatos más exóticos es hacer coincidir los formatos de cliente (CPU) y servidor (GPU) para que GL no necesite realizar conversión de datos y pueda hacer una simple transferencia en bloque. –

Cuestiones relacionadas