2

在一些android测试设备中,当在opengl 2.0 ES中渲染时,屏幕会闪烁。我能够在调用“eglSwapBuffers”时将问题跟踪到 GLSurfaceView 类,因此每次迭代都会产生闪烁,一个屏幕变黑,下一个屏幕显示我绘制的图像。因此,eglSwapBuffers 似乎没有在每次调用时保留后台缓冲区,从而产生这种闪烁行为。

无论如何要保留后台缓冲区吗?我发现也许我可以使用EGL_SWAP_BEHAVIOR_PRESERVED_BIT标志,但我不知道如何将它放在 android 中,也不知道如何在姜饼等旧 API 中使用它。

谢谢

4

1 回答 1

1

您应该不需要修改 GLSurfaceView。您的问题更有可能是由系统的驱动程序或配置引起的。我会尝试使用不同图形驱动程序的不同测试设备。在 AVD 上运行它会发生什么?

可能是您的测试设备没有为底层 linux 帧缓冲设备提供足够的内存来获得正常的三重缓冲。在这种情况下,大多数系统将退回到单缓冲。我建议您检查这些 fb 设备参数。对于您正在使用的显示模式,virtual_size 应该足够大以容纳 2 或 3 个缓冲区:

cat /sys/class/graphics/fb0/mode
  U:1024x768p-60
cat /sys/class/graphics/fb0/virtual_size
  800,1440
于 2013-08-06T21:43:52.427 回答