Strange color shift after loading GL_RGB texture

Here's a primitive 5x2 texture defined in RGB and RGBA formats.

//                       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,  };

Downloading the RGBA version works as expected:

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);

enter image description here

Loading an RGB texture results in a strange color shift:

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);

enter image description here

The difference in code between the first and second screenshots are just two arguments to glTexImage2D.

What am I doing wrong?

Environment

  • ATI Radeon HD5450, OpenGL 4.2
  • Windows 7 64-bit
  • Visual studio 2010
+5
source share
1 answer

See here - glPixelStorei(GL_UNPACK_ALIGNMENT, 1)should fix it.

+10
source

All Articles