在Android中选择EGL配置的正确方法是什么?

时间:2014-07-14 16:45:57

标签: android opengl-es egl

我正在使用自己的GLSurfaceView,并且一直在努力应对与EGL配置选择器相关的崩溃。

似乎通过调用setEGLConfigChooser(5, 6, 5, 0, 16, 0)来请求RGB_565应该是最受支持的。但是,使用主机GPU在模拟器上运行此代码我仍然会崩溃,似乎是因为我的显卡本身不支持RGB_565。通过调用setEGLConfigChooser(8, 8, 8, 8, 16, 0)设置为RGBA_8888似乎在我的模拟器和HTC Rezound设备上正常运行,但我仍然在市场上看到少量崩溃报告。

我的猜测是大多数手机现在都支持RGBA_8888,但是我的少数用户手机只能兼容RGB_565,这会阻止我的配置选择器获取配置。

看到我不需要alpha通道,是否有正确的方法首先尝试RGBA_8888然后再回到RGB_565?有没有更简洁的方法可以在不关心alpha值的情况下询问任何ol'配置?

我看到了一个可能的解决方案,提前确定默认显示配置是什么,并在此处具体请求:https://stackoverflow.com/a/20918779/234256。不幸的是,从API级别17开始,不推荐使用建议的getPixelFormat函数。

2 个答案:

答案 0 :(得分:0)

根据我的经验,我认为setEGLConfigChooser()实际上并不正确,即它的实现存在错误。在许多设备中,我看到崩溃,即使底层表面的类型正确,setEGLConfigChooser()也无法选择有效的上下文。

我发现选择EGL上下文的唯一可靠方法是使用自定义EGLConfigChooser。这还有一个额外的好处,就是根据自己的规则选择配置,例如: surface 必须具有深度,最好是RGB888,但可以适应RGB565。实际上,使用eglChooseConfig()获取可能的配置列表然后返回符合您选择条件的其中一个配置非常简单。

答案 1 :(得分:0)

此gsoc代码示例用于启用MSAA。但它还包含选择配置的代码,检查它们是否可用。

https://code.google.com/p/gdc2011-android-opengl/source/browse/trunk/src/com/example/gdc11/MultisampleConfigChooser.java#90