在一些Android测试设备中,当在opengl 2.0 ES中渲染时,屏幕会闪烁。 我能够在调用“eglSwapBuffers”时跟踪GLSurfaceView类的问题,因此每次迭代都会产生闪烁,一个屏幕变为黑色,另一个屏幕变为黑色。因此, eglSwapBuffers 不会在每次调用时保留后台缓冲区,从而产生这种闪烁行为。
无论如何都要保留后台缓冲区?我发现可能我可以使用 EGL_SWAP_BEHAVIOR_PRESERVED_BIT 标志,但我无法弄明白如何将它放在android中,也不知道如何在旧的API中使用它,例如姜饼。
由于
答案 0 :(得分: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