【发布时间】:2012-02-10 12:39:39
【问题描述】:
我们是一个开发人员团队,致力于开发虚拟 3D 地球上的地形可视化软件。该项目针对运行安卓的移动设备,主要是平板电脑和手机。我们已经在几种设备上对此进行了测试,虽然手机似乎可以正常运行应用程序(我们没有检测到任何问题),但某些平板电脑在屏幕上绘制纹理时似乎存在问题。
为了清楚起见,我附上了一个显示问题的视频,因为它有点难以用文字解释。这个例子展示了一个被分成 200 个扇区的球体,每个扇区都有不同的纹理。
如您所见,有时它看起来像是试图同时在同一个扇区中绘制两个不同的纹理。
我们已经在这些设备上进行了测试:
- 三星 Galaxy S SLC (ok)
- HTC Desire (ok)
- Nook 电子书阅读器(好的)
- Samsung Galaxy Tab 10.1(无法正常工作)
- Sony Tablet S(也不工作)
- 三星 Galaxy Tab 7.0(正常)
我发布了可能涉及此的关键代码。首先是用于绘制纹理的片段着色器:
varying mediump vec2 TextureCoordOut;
uniform sampler2D Sampler;
....
gl_FragColor = texture2D (Sampler, TextureCoordOut);
接下来,我将在OpenGL中执行的关键指令发布,因为代码在几个大函数中被保留:
GLES20.glGenTextures(num, idTextures, 1); //declare 200 textures
...
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, idTextures[texture]); //texture binding
...
GLES20.glVertexAttribPointer(Attributes.Position, size, GLES20.GL_FLOAT, false, stride, fb);
...
GLES20.glVertexAttribPointer(Attributes.TextureCoord, size, GLES20.GL_FLOAT, false, stride, fb);
...
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, first, count);
很抱歉无法提供更多细节,但经过几周的调试,我们完全不知道是什么原因造成的。我转向你希望有任何线索,因为我们现在完全迷路了。提前致谢。
【问题讨论】:
-
在每个渲染周期后添加
glFlush或glFinish可能会有所帮助,因为您似乎在不断地进行相当广泛的渲染状态更改。 -
感谢您的建议,但不幸的是它不起作用。
标签: android mobile opengl-es 3d tablet