Nexus 5上的GLSurfaceView帧速率问题
我有一个示例应用程序(完整源代码),它使用MediaCodec对相机帧进行编码,同时将它们显示在GLSurfaceView上。
Systrace每秒确认30次绘图调用:
但是,屏幕录制记录(.mp4,YouTube)显示的视频帧率要低得多。
简而言之,我的编码和显示循环执行以下操作:
在Galaxy Nexus LTE和Nexus 7上(都使用AOSP 4.4),应用程序按预期运行。 到目前为止,只有Nexus 5在画到屏幕的帧数和明显的帧数之间存在这种差异......
我祈祷我不疯狂。
我能够复制这种行为,而我的GL向导办公室同事发现了这个问题。
基本上,其中一个EGL上下文没有注意到纹理内容已经改变,所以它不断渲染旧数据。 我们认为它会得到偶尔的更新,因为它有一组循环的缓冲区,所以最终它会重新使用您正在查看的缓冲区。
我能够通过更新纹理渲染器类来修复代码中的问题,并更改了这一点:
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);
对此:
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);
解除绑定并重新绑定会导致驱动程序拾取正确的缓冲区。
链接地址: http://www.djcxy.com/p/92535.html