2011-10-16 10 views
8

Sto chiamando glTexSubImage2D. Se il mio formato pixel è GL_RGBA, allora i tipi di pixel GL_UNSIGNED_BYTE e sono completamente equivalenti?Caricamento trama OpenGL: UNSIGNED_BYTE vs UNSIGNED_INT_8_8_8_8

Inoltre, queste due coppie equivalgono?

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

Ho provato a leggere le specifiche OpenGL e le specifiche GL_EXT_packed_pixels, ma onestamente non riesco a fare capo né coda di loro.

risposta

16

Le risposte sono No e No. È necessario pensare all'ordine dei byte nel computer. Se si dispone di GL_RGBA e GL_UNSIGNED_INT_8_8_8_8, ciò significa che i pixel vengono archiviati in numeri interi a 32 bit e che i colori sono nell'ordine logico RGBA in tale numero intero, ad es. il rosso è nel byte di ordine superiore e l'alfa è nel byte di ordine inferiore. Ma se la macchina è little-endian (come con le CPU Intel), ne consegue che l'ordine reale in memoria è ABGR. Considerando che, GL_RGBA con GL_UNSIGNED_BYTE memorizzerà i byte nell'ordine RGBA indipendentemente dal fatto che il computer sia little-endian o big-endian.

GL_BGRA con GL_UNSIGNED_INT_8_8_8_8_REV memorizzare i colori in un numero intero nell'ordine logico ARGB, ma su una macchina little-endian, si ottiene l'ordine BGRA in memoria.

+3

Vale la pena sottolineare che 'GL_UNSIGNED_BYTE' e' GL_UNSIGNED_INT _... 'in questo esempio sono i tipi di trasferimento di pixel. Non dicono nulla su come GL memorizza il colore, ma solo su come i colori "impacchettati" vengono interpretati da GL quando vengono inviati i dati del colore. Una sorta di distinzione importante perché di solito l'obiettivo con questi formati più esotici è quello di abbinare i formati client (CPU) e server (GPU) in modo che GL non debba eseguire la conversione dei dati e possa eseguire un semplice trasferimento a blocchi. –

Problemi correlati