gpt4 book ai didi

三星 Galaxy 变体上的 Android opengl 白色纹理

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:22 26 4
gpt4 key购买 nike

我在 samsung 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

最佳答案

既然是OpenGL ES 1.0,还需要调用

glEnable(GL_TEXTURE_2D);

这在 OpenGL ES 2.0 上是一个空操作,其中着色器说明正在读取哪种纹理类型(好吧,这实际上是一个错误)。

调用 glTexParameterf() 和 glTexEnvf() 对我来说似乎有点奇怪,我会改用 glTexParameteri() 和 glTexEnvi() (传递的值是枚举,它们是整数,而不是 float )。但这不应导致错误。

另一件事是最大纹理大小(你已经说过它是 POT)。纹理有没有大的机会?某些设备的最大纹理大小限制可能低至 512 x 512 像素。

解包对齐通常不会有太大影响。如果您将 RGB 数据存储为 3 个字节,则它应该为 1,如果您将 RGB 和 RGBA 都存储为一个双字(= 4 字节),则它应该为 4。如果你指定了一个错误的对齐方式,我可以想象纹理是乱码(RGB 或扫描线倾斜),但它通常不应该最终变成白色。另一方面,如果驱动程序拒绝此解包对齐,它可能会留下纹理空白并生成 GL 错误。看看是不是。

另一个因素是纹理坐标。某些设备在 texcoord 插值器中的位数较少,并且指定较大的纹理坐标(例如地形四边形上的 -10000、+10000)可能会导致图形故障。这实际上大部分没有记录,许多设备都有问题。

制作 8x8 明亮的绿色纹理(不是 0x00ff00,例如 0x8AC43C 在转换为灰度或以某种方式仅使用单个组件的情况下更容易发现)对我来说总是很有帮助。然后应将此纹理应用于纹理坐标在 [0-1] 范围内的“小”四边形(完全在屏幕上且大到足以可见的四边形)。

关于三星 Galaxy 变体上的 Android opengl 白色纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com