Ste*_*veL 5 android opengl-es galaxy opengl-es-1.1
我在三星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);
Run Code Online (Sandbox Code Playgroud)
GL_TRIANGLES正如往常一样进行绘图
*我没有在我面前的实际设备所以我不能做glGetError
由于是OpenGL ES 1.0,还需要调用
glEnable(GL_TEXTURE_2D);
Run Code Online (Sandbox Code Playgroud)
否则,这在 OpenGL ES 2.0 上是无操作的,其中着色器表示正在读取哪种纹理类型(好吧,这实际上是一个错误)。
调用 glTexParameterf() 和 glTexEnvf() 对我来说有点奇怪,我会使用 glTexParameteri() 和 glTexEnvi() (传递的值是枚举,它们是整数,而不是浮点数)。但这不应该导致错误。
另一件事是最大纹理尺寸(你已经说过它是 POT)。纹理是否很大?某些设备的最大纹理大小限制可能低至 512 x 512 像素。
一般来说,解包对齐不会产生太大影响。如果将 RGB 数据存储为 3 个字节,则该值应为 1;如果将 RGB 和 RGBA 都存储为一个双字(= 4 个字节),则该值应为 4。如果您指定了错误的对齐方式,我可以想象纹理会出现乱码(RGB 或扫描线倾斜),但它通常不应该最终变成白色。另一方面,如果驱动程序拒绝此解包对齐,则可能会将纹理留空并生成 GL 错误。看看是否如此。
另一个因素是纹理坐标。某些设备的纹理坐标插值器位数较少,指定较大的纹理坐标(例如地形四边形上的 -10000、+10000)可能会导致图形故障。这实际上大多没有记录,并且许多设备都存在问题。
制作 8x8 亮绿色纹理(不是 0x00ff00,例如 0x8AC43C 在转换为灰度或仅使用单个组件的情况下更容易发现)对我总是有帮助的。然后,应将此纹理应用到纹理坐标在 [0-1] 范围内的“小”四边形(完全在屏幕上且大到足以可见的四边形)上。
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |