【发布时间】:2012-10-02 15:13:50
【问题描述】:
我在三星 Galaxy 变体上得到白色纹理,但在我测试的其他手机上,纹理工作得很好。所以我的问题是导致这种行为的通常怀疑是什么?星系变体是否有任何特殊硬件并且缺少某些东西?
我的纹理加载代码是这样的
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE);
if(alpha)glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) image_data);
else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*) image_data);
并且绘图照常使用 GL_TRIANGLES 进行
*我面前没有实际的设备,所以我不能执行 glGetError
【问题讨论】:
-
你能保证纹理是2的幂吗?如果您从位图工厂获取数据,则可以根据屏幕密度进行缩放,从而使 PO2 源图像变为 NPO2。
-
是的纹理是罐子,不,我没有从位图工厂得到它们。我实际上是从 c++ 加载它们(通过访问 apk)但我不认为有问题,因为它只是 c++ 的东西不是 opengl ,如果问题在那里,我会在所有设备上都有它。
-
每个纹理都是白色的,还是只是其中的一部分?它们都是 RGBA、RGB 还是混合的?为什么要使用 2 的解包对齐方式?
-
如果我没记错的话 Galaxy Variant 有 Mali400 GPU。我在 Mali400 上遇到了一些着色器问题(与颜色精度有关),所以这也可能与着色器有关。你怎么画这个纹理?您是否尝试在不同的 GPU 上重现错误?
-
@SteveL - 这取决于你的
image_data的样子。行是否在任何边界上对齐?如果你的纹理是 RGBA,它们应该总是双字对齐,所以 1 或 4 就可以了。如果它们是 RGB,并且您没有任何行填充,则需要值为 1。
标签: android opengl-es galaxy opengl-es-1.1