安卓OpenGL ES图像失真问题

3
我正在开发一款 Android 应用程序,使用 OpenGL 在草地上渲染一个 3D 球。用户可以与球交互(通过触摸旋转它)。
问题如下:在我的 Samsung Galaxy S2 上一切正常,但是当我尝试在其他设备(HTC Incredible S、HTC Sensation 等)上运行时,屏幕上会出现多个裁剪视口的扭曲图像(请参见附加图像)。
我已经尝试了我所能想到的一切方法:禁用纹理、禁用光照等等...没有任何效果。
我知道在没有实际代码的情况下很难帮助,但我真的不知道哪部分代码引起了这个问题。因此,我想问问是否有人知道可能引起这个问题的原因。
我的猜测是与 GLSurfaceView 或 Renderer 子类或这些对象的创建顺序有关...
请查看附加的图像,如果您知道问题是什么,请让我知道。

enter image description here

编辑: onSurfaceCreated 代码:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
  gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
  gl.glShadeModel(GL10.GL_SMOOTH);
  gl.glClearDepthf(1.0f);
  gl.glEnable(GL10.GL_DEPTH_TEST);
  gl.glDepthFunc(GL10.GL_LEQUAL);
  gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
  gl.glEnable(GL10.GL_TEXTURE_2D);
  gl.glEnable(GL10.GL_NORMALIZE);
}

你使用的是哪个版本的Galaxy S2?根据维基百科,有不同的型号使用不同的GPU。 - Morrison Chang
型号:GT-I9100 但我也在Galaxy Notes上进行了测试,同样可以正常工作。 - Francois Zard
2个回答

4

我的朋友。过去我也遇到了同样的问题,原因是gpu支持的位深度数不同。例如,我的galaxy支持24位深度缓冲区,而tegra2设备只支持16位(如果我没记错的话)。无论如何,在egl配置选择函数期间的解决方案是相应地进行配置。

请尝试发布egl配置代码,以便我可以帮助您。

P.s. 欢迎加入 :)


好的...你找到了!! 我在这上面浪费了一周的时间。非常感谢,你刚刚救了我的命。 - Francois Zard
很高兴能够帮助。抱歉有些错别字,因为昨晚我在床上睡觉前用手持设备写下了初始回复 :) - Maurizio Benedetti

2

补充Maurizio的回答,你可以在GLSurfaceView上设置EGL配置:

mGLSurfaceView.setEGLConfigChooser(redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize);
mGLSurfaceView.getHolder().setFormat(PixelFormat);

您可以在这里了解更多信息。请注意,这可能会对不同的图形芯片产生非常不良的影响,正如您所经历的那样。从图像失真到没有明显原因的性能非常差。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接