我有一个使用C ++编写的本机代码的Android应用程序。 我使用OpenGL进行显示,但纹理由Java代码生成为位图。我将位图的原始内存内容传递给函数glTexImage2D(),并发现以下行为:
在这些情况下,相同的内存内容传递给函数glTexImage2D()。 现在看来我必须使用GL_RGB进行立方体映射,但GL_BGR_EXT用于2d映射以获得正确的颜色。
在Linux上运行完全相同的代码(由PangoCairo生成纹理位图),2d和立方体映射之间没有区别,正如预期的那样(我使用GL_RGB并且我有正确的颜色)。
我不了解映射模式之间的这种差异。我尝试了不同的像素格式(RGBA8888和RGB565),结果是一样的。
相应的代码在这里:
用于多维数据集映射:
static const GLuint GLTargets[] = {
GL_TEXTURE_CUBE_MAP_POSITIVE_X,
GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
};
for (unsigned i = 0; i < 6; ++i) {
glTexImage2D(
GLTargets[i], // target
0, // level
myFormat, // internal format
myTarget[i]->GetWidth(), // width
myTarget[i]->GetHeight(), // height
0, myFormat, myPixelFormat, // border, external format, type
myTarget[i]->GetPixelData() // pixels
);
}
用于2d映射:
glTexImage2D(
GL_TEXTURE_2D, 0, // target, level
myFormat, // internal format
myWidth, myHeight, 0, // width, height, border
myFormat, myPixelFormat, // external format, type
myTarget.GetPixelData() // pixels
);
这是特定于Android的行为,还是错误,还是我做错了什么?
我在Android 4.2.2的一些不同的三星设备上尝试过它。
提前完成
Gyorgy Kovesdi