我正在运行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提高最快的像素读取速度?
感谢。
答案 0 :(得分:0)
不确定使用eglGetConfigAttrib可以获得最快的默认值。
如果EGL_COLOR_BUFFER_TYPE == EGL_RGB_BUFFER
,请检查EGL_RED_SIZE
,EGL_GREEN_SIZE
,EGL_BLUE_SIZE
和EGL_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以外的任何东西都很棘手。根据设备和配置选择器代码,您可以轻松获取无配置发现错误或其他配置错误。