加载GL_RGB纹理后出现奇怪的色移

时间:2012-06-06 16:56:54

标签: opengl texture2d

这是一个原始的5x2纹理,以RGB和RGBA格式定义。

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

加载RGBA版本按预期工作:

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

加载RGB纹理会导致奇怪的色移:

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

第一个和第二个屏幕截图之间的代码差异只是glTexImage2D的两个参数。

我做错了什么?

环境

  • ATI Radeon HD5450,OpenGL 4.2
  • Windows 7,64位
  • Visual Studio 2010

1 个答案:

答案 0 :(得分:10)

See here - glPixelStorei(GL_UNPACK_ALIGNMENT, 1)应该修复它。