我正在尝试将纹理呈现在另一个纹理之上,如下图所示:
但是,只有该图像才能正确渲染。我的其他图像出现乱码和“扭曲”。如果你仔细看,就好像行被移动了:
在上面的示例中,我在背景中使用了相同的猫图片。这张猫图片和我生成的所有其他图片最终都会出现乱码,除了一张特殊图片,出于某种原因。我查看了 EXIF 数据,除了它不使用 sRGB 之外,它的格式与其他数据完全相同。它有一个阿尔法通道和一切。
考虑到行的移动方式,我相信它与像素对齐有关,但我已经尝试了所有可能的对齐组合,但到目前为止没有任何效果。这是我的代码:
int height, width = 512;
m_pSubImage = SOIL_load_image("sample.png", &width, &height, 0, SOIL_LOAD_RGBA);
glGenTextures(1, &m_textureObj);
glBindTexture(m_textureTarget, m_textureObj);
...
glActiveTexture(TextureUnit);
glBindTexture(m_textureTarget, m_textureObj);
glTexSubImage2D(GL_TEXTURE_2D, 0, 20, 10, 100, 100, GL_RGBA, GL_UNSIGNED_BYTE, m_pSubImage);
加载背景图像的代码类似,只是它使用此调用而不是 glTexSubImage2D:
glTexImage2D(m_textureTarget, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_pImage);