Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三星Galaxy variant上的Android opengl白色纹理_Android_Opengl Es_Galaxy_Opengl Es 1.1 - Fatal编程技术网

三星Galaxy variant上的Android opengl白色纹理

三星Galaxy variant上的Android opengl白色纹理,android,opengl-es,galaxy,opengl-es-1.1,Android,Opengl Es,Galaxy,Opengl Es 1.1,我在三星galaxy变型手机上得到了白色纹理,但在我测试过的其他手机上,这些纹理工作得很好。所以我的问题是,通常怀疑是什么导致了这种行为?galaxy变体是否有任何特殊的硬件,并且缺少什么 我的纹理加载代码如下 GLuint texture; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glPixelStorei(GL_UNPACK_ALIGNMENT, 2); glTexP

我在三星galaxy变型手机上得到了白色纹理,但在我测试过的其他手机上,这些纹理工作得很好。所以我的问题是,通常怀疑是什么导致了这种行为?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_三角形的过程和往常一样


*我面前没有实际的设备,因此我无法执行glGetError,因为它是OpenGL ES 1.0,您还需要调用

glEnable(GL_TEXTURE_2D);
这在OpenGL ES 2.0上是不可操作的,着色器会显示正在读取的纹理类型(事实上,这是一个错误)

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

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

一般来说,拆包对齐不会产生很大影响。如果将RGB数据存储为3个字节,则应为1;如果将RGB和RGBA存储为一个双字(=4个字节),则应为4。如果指定了错误的对齐方式,我可以想象纹理是混乱的(RGB或扫描线倾斜),但通常不会以白色结束。另一方面,如果驱动程序拒绝此解包对齐,它可能会将纹理留空并生成GL错误。看看有没有

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


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

您能保证纹理的大小为2倍吗?如果你从位图工厂获得数据,它可以与屏幕密度一起缩放,从而导致PO2源图像变成NPO2。是的,纹理是POT,不,我不从位图工厂获得它们。实际上,我从C++加载它们(通过访问APK),但我不认为存在问题,因为它只是C++的东西而不是OpenGL,如果问题出在它们身上,我会在所有的设备上都安装。是每一个纹理都是白色的,还是只是其中的一部分?它们都是RGBA、RGB还是混合?为什么要使用2的解包对齐?如果我正确的话,Galaxy Variant有Mali400 GPU。我在Mali400上遇到了一些着色器问题(与颜色精度有关),因此这可能也与着色器有关。你怎么画这个纹理?您是否尝试在不同的GPU上复制错误?@SteveL-这取决于您的
image\u数据的外观。行是否在任何边界上对齐?如果纹理是RGBA,它们应该始终与dword对齐,因此1或4是可以的。如果它们是RGB,并且没有任何行填充,你需要一个值1.1)我在每次画图之前都会启用GL_纹理_2D 2)我不知道这是什么导致了问题3)我在小纹理中也有同样的问题,比如64*64 4)就像你说的,这不是白色纹理的原因5)不,我只画正方形纹理6)如果我有一些简单的不工作的问题,我会这样做-实现一个简单的测试,它应该在任何地方都能工作。遗憾的是,这些都不能解决你的问题。如果您碰巧解决了问题,请告诉我们问题出在哪里。祝你好运