5
Ecco una primitiva trama 5x2, definita nei formati RGB e RGBA.Straordinario spostamento di colore dopo aver caricato una trama GL_RGB
// 1 2 3 4 5
unsigned char rgb[] = { 0, 0, 0, 0, 0, 0, 200, 200, 200, 0, 0, 0, 200, 200, 200,
0, 0, 0, 0, 0, 0, 200, 200, 200, 0, 0, 0, 200, 200, 200, };
unsigned char rgba[] = { 0, 0, 0, 255, 0, 0, 0, 255, 200, 200, 200, 255, 0, 0, 0, 255, 200, 200, 200, 255,
0, 0, 0, 255, 0, 0, 0, 255, 200, 200, 200, 255, 0, 0, 0, 255, 200, 200, 200, 255, };
Caricamento la versione RGBA funziona come previsto:
glTexImage2D(GL_TEXTURE_2D,
0, // mipmap level
GL_RGB, // dest format
5, // width
2, // height
0, // deprecated
GL_RGBA, // source format
GL_UNSIGNED_BYTE,
rgba);
Caricamento dei risultati di texture RGB in un cambiamento di colore strano:
glTexImage2D(GL_TEXTURE_2D,
0, // mipmap level
GL_RGB, // dest format
5, // width
2, // height
0, // deprecated
GL_RGB, // source format
GL_UNSIGNED_BYTE,
rgb);
La differenza nel codice tra il primo e il secondo screenshot sono solo questi due argomenti per glTexImage2D.
Cosa sto sbagliando?
Ambiente
- ATI Radeon HD5450, OpenGL 4.2
- Windows 7, 64 bit
- Visual Studio 2010
Hai impostato l'allineamento del pacchetto? L'impostazione predefinita è 4 byte, quindi l'array rgba sarà OK, ma non funzionerà con l'array rgb. –
No. Quali argomenti a glPixelStorei risolverebbero questo problema? –
[Vedi qui] (http://www.opengl.org/wiki/Common_Mistakes#Texture_upload_and_pixel_reads) - 'glPixelStorei (GL_UNPACK_ALIGNMENT, 1)' dovrebbe risolverlo. –