小米开发平台openGL ES glFinish使用规范
1.背景
在高通最新的平台上,为了进一步提升性能,启用了 CompressTexturesOnUpload 功能,如果应用不遵循 openGL glFinish 规范,会进一步增加应用渲染数据出现异常的概率。
2.规范说明
应用在修改更新纹理后,openGL 规范要求应用程序执行完 glFinish 后, 其他地方才能去操作使用此纹理(注意高通平台网址转APP生成目前只需要 glFlush, 但对于 openGL 规范,需要执行 glFinish,详见 OpenGL ES 3 specification section D “Propagating changes to objects”)。
3.案例分析
- 美图秀秀相机预览人像扭曲
- 美颜相机预览画面偏暗
- 问题原因
应用的 thread 6 和 thread 7 共享 GL Context,然后 thread 6 对 thread 7 上传的纹理(texture13)进行采样,但是在 thread7 中,纹理更新时没有 进行 glFinish 或 glFlush,app开发生成导致数据渲染出现问题。所以 thread7 应该在纹理更新后调用 glFinish 或 glFlush,然后 thread 6 再使用 texture13 来渲染。
编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/12691/
部分内容来自网络投稿,如有侵权联系立删