glReadPixles在setEGLConfigChooser中以RGBA大小加速

时间:2013-06-15 18:55:34

标签: android opengl-es

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

我总是设置RGBA& glReadPixels中的UNSIGNED_BYTE对,有些设备使用setEGLConfigChooser(8, 8, 8, 8, x, x)读取速度更快, 和其他RGBA尺寸设置将使像素读数极慢;有些设备使用setEGLConfigChooser(5, 6, 5, 0, x, x)读取速度更快, 和其他RGBA尺寸设置将使像素读取速度极慢。也许还有更多的案例。

那么这是怎么发生的?有没有办法知道正确的RGBA尺寸设置,这将使用glReadPixels提高最快的像素读取速度?

感谢。

2 个答案:

答案 0 :(得分:0)

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

如果EGL_COLOR_BUFFER_TYPE == EGL_RGB_BUFFER,请检查EGL_RED_SIZEEGL_GREEN_SIZEEGL_BLUE_SIZEEGL_ALPHA_SIZE,总计等于EGL_BUFFER_SIZE

如果我分别使用glReadPixels中的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),但在使用glGetIntegerv检查GL_IMPLEMENTATION_COLOR_READ_FORMAT后,使用该格式并GL_UNSIGNED_BYTE作为glReadPixels对中的颜色格式可以是RGBA或BGRA。

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

P.S。 eglGetConfigAttrib的基本用法可以检查getDetectedVersion()以了解如何检查设备是否支持OpenGL ES 2.0。

答案 1 :(得分:0)

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

您可以使用

检查本机格式(在设置之前)

显示display = activity.getWindowManager()。getDefaultDisplay(); int displayPixelFormat = display.getPixelFormat();

displayPixelFormat为PixelFormat.RGB_888,PixelFormat.RGBA_8888或5(BGRA_8888)为8 8 8 8或任何其他为5 6 5。 请注意,使用565以外的任何东西都很棘手。根据设备和配置选择器代码,您可以轻松获取无配置发现错误或其他配置错误。