注意:由于OpenGL是基于单线程设计的接口,调用的时候请在OpenGLContext线程中(一般为主线程)进行OpenGL相关操作 伪代码如下: int main(){ //初始化 glfwInit 其他相关操作 glDeleteTextures(1,&gluiTextureID); } return 0; } 上面说到,由于OpenGL是基于单线程设计的接口,调用的时候请在OpenGLContext
GPUImage目录.png 对于GPUImage,可以分为 GLProgram 用于加载shader,链接program的类 GPUImageContext 用于OpenGLContext上下文管理的
GPUImageContext是GPUImage对OpenGL ES上下文的封装,并添加GPUImge相关的上下文,如上下文队列(contextQueue,解决OpenGLContext不是多线程安全的问题
析构引起的 crash crash 的主要原因:为了解决内存泄漏,Flutter 在退出的时候完全释放到 Flutter 相关的引用,从而导致触发了 FlutterOpenGLRenderer 释放 OpenGLContext ,在 10.13 的或者更低的系统上,openGLContext 在析构的时候会出现了 crash。 解决办法:在 FlutterOpenGLRenderer 中,让 openGLContext 不要释放,来规避这个 crash。
线程管理 OpenGLContext不是多线程安全的,GPUImage创建了专门的contextQueue,所有的滤镜都会扔到统一的线程中处理。
回过头,接着看APP如何初始化硬件加速环境:直观上说,主要是构建OpenGLContext、EglSurface、RenderThread(如果没启动的话)。
为了最佳效果,效果框架直接应用了OpenGL的纹理,您的应用程序必须有一个有效的OpenGLcontext,才可以使用效果框架的API。应用效果的纹理可以用于位图,视频,甚至相机。