问题
公司是外购的美颜算法,需要使用GlSurfaceView提供GlThread 环境及绘制到屏幕上,在切换到美颜的时候,屏幕会闪一下红屏
分析
- 经GPU同事调查结论:美颜前几帧,没有数据,使用了默认的压缩数据,不经过GPU,所以不会解压,导致的红屏
- 在这个分析的基础上来看App的代码, 在Camera出图之前,是不会绘制的,所以在onDrawFrame里会直接return,所以应该是直接return导致的使用默认数据,出现的问题
- 将OpenGL的设置提前到return前,也就是屏幕每一帧都设置OpenGl,问题解决
结论
- 为什么之前的产品用的同样的代码不会有问题?
答: 因为GPU能力升级,使用了压缩数据,另外之前产品默认是黑色的 - 每一帧都要设置OpenGL