Android glReadPixles速度,RGBA大小在setEGLConfigChooser中

Android glReadPixles速度,RGBA大小在setEGLConfigChooser中,android,opengl-es,Android,Opengl Es,我正在运行这个项目,它试图使用GLSurfaceView将每个视频帧转储到单个图像文件中。但我发现,中的RGBA大小设置对glReadPixels的速度起着重要作用 我总是在glReadPixels中设置RGBA和UNSIGNED_字节对,一些设备使用setEGLConfigChooser(8,8,8,8,x,x)读取速度更快, 和其他RGBA大小设置将使像素读取速度非常慢;虽然使用setEGLConfigChooser(5,6,5,0,x,x)某些设备的读取速度更快, 其他RGBA大小设置将使

我正在运行这个项目,它试图使用GLSurfaceView将每个视频帧转储到单个图像文件中。但我发现,中的RGBA大小设置对glReadPixels的速度起着重要作用

我总是在glReadPixels中设置RGBA和UNSIGNED_字节对,一些设备使用
setEGLConfigChooser(8,8,8,8,x,x)
读取速度更快, 和其他RGBA大小设置将使像素读取速度非常慢;虽然使用
setEGLConfigChooser(5,6,5,0,x,x)
某些设备的读取速度更快, 其他RGBA大小设置将使像素读取速度极慢。也许还有更多的病例

那么这是怎么发生的呢?有没有办法知道正确的RGBA大小设置,使用glReadPixels可以获得最快的像素读取速度

谢谢。

不确定使用可以获得最快的默认值

如果
EGL\u COLOR\u BUFFER\u TYPE==EGL\u RGB\u BUFFER
,则检查
EGL\u RED\u SIZE
EGL\u GREEN\u SIZE
EGL\u BLUE\u SIZE
EGL\u ALPHA\u SIZE
,总计等于
EGL\u BUFFER SIZE

如果使用
setEGLConfigChooser(5,6,5,0,x,x)
GL_RGB/GL_UNSIGNED_SHORT_5_6_5
配对,分别得到(5,6,5,0,16);如果获得(8,8,8,8,32),使用
setEGLConfigChooser(8,8,8,8,x,x)
,但在检查
GL\u实现\u color\u READ\u格式后,颜色格式可以是RGBA或BGRA,使用该格式和
GL\u UNSIGNED\u BYTE
作为一对输入

我使用上述方法,可以获得最快的像素读取环境。我不确定这是正确的方法


p、 的基本用法可以检查,看看如何检查设备是否支持OpenGL ES 2.0。

我想没有一种安全的方法来确定这一点。这在很大程度上取决于设备的图形硬件,而android的图形硬件可能会有很大的不同。不过,您可以尝试始终使用本机像素格式,这在理论上对设备来说应该更快

您可以使用检查本机格式(在设置之前)

Display Display=activity.getWindowManager().getDefaultDisplay(); int displayPixelFormat=display.getPixelFormat()

对于8,displayPixelFormat为PixelFormat.RGB_888,PixelFormat.RGBA_8888或5(BGRA_8888),对于5 6 5,则为任何其他。
请注意,使用565以外的任何东西都可能很棘手。根据设备和配置选择器代码的不同,您可以轻松获得“未找到配置”错误或其他配置错误。

谢谢!但是我看到API级别17中的应用程序被弃用了。2012年7月之后,AOSP中的always return PixelFormat.RGBA_8888在使用时,从返回的配置值因设备而异。如果不推荐使用,则从4.2开始,所有设备的像素格式都将为8888。eglGetConfigAttrib因设备而异,因为它取决于您选择的egl配置的配置。任何设备都有一组可用的配置,例如其中一个可以具有抗锯齿。。。其他可以具有更高的深度值。问题的解决方案仍然应该是选择与设备像素本机格式匹配的配置。