Android 白色的 opengl 纹理三星银河变异

标签: Android Galaxy
发布时间: 2017/3/13 22:17:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

三星银河变异得到白色的纹理,但我测试的纹理在其他手机上是很好的工作。所以我探索是什么是通常会怀疑那导致这种行为?是有任何特殊硬件的银河变种和失去了一些东西吗?

这是我的纹理加载代码

  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

解决方法 1:

因为它是 OpenGL ES 1.0,你还需要调用

glEnable(GL_TEXTURE_2D);

否则是无 op 的 OpenGL ES 2.0 在哪里 shader 说哪个纹理 type 正在读取 (这是实际的错误)。

调用 glTexParameterf() 和 glTexEnvf() 似乎对我有点奇怪,将使用 glTexParameteri() 和 glTexEnvi() 相反 (传递的值是枚举,都是整数,不浮在水面上)。但这不应该导致错误。

另一件事是最大的纹理大小 (你已经说过它是锅)。万一是纹理大吗?一些设备可能会具有最大纹理大小限制为 512 的 512 像素一样低。

解包对齐不应该有大 effect 一般。如果你将你 RGB 数据存储为 3 个字节或 4 如果您存储 RGB 和 RGBA 作为一个双字 (= 4 个字节),它应该是 1。如果您指定坏的对齐方式,我可以想象,纹理是乱码 (RGB 或扫描线斜交),但它应该不一般,到头来白。另一方面,如果拒绝这驱动程序解压对齐方式,它可能将纹理留空,并生成 GL 错误。看是否真的。

另一个因素是纹理坐标。某些设备中 texcoord 抽取有小数量的位和指定大纹理坐标 (例如如-10000,+10000 对地形四) 可能会导致图形故障。这很大一部分都是无证和许多设备有它的问题。

它总是乐于对我做出 8 x 8 明亮绿色纹理 (不例如,0x00ff00,例如 0x8AC43C 是发现在情况下它会转换成灰度或以某种方式使用只有单个组件的要容易得多)。这种纹理然后应该应用于"小"的四 (完全是在屏幕上和足够大的可见的一个) 与 texcoords 在 [0 1] 范围。

赞助商