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

Kay*_*ute 5 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,  };
Run Code Online (Sandbox Code Playgroud)

加载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);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

加载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);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

我究竟做错了什么?

环境

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

Ste*_*nke 10

看到这里 - glPixelStorei(GL_UNPACK_ALIGNMENT, 1)应该修复它.