ps:先需要了解图形渲染管线的工作流程和原理,给开发者开放出来的顶点着色器和片段着色器使用方法
提前了解的知识点:
- 图形渲染管线需要绑定EGL Context,OPENGL是一个大的状态机,而不同的EGL Context就是不同的状态。顾名思义context需要保存不同的状态(这个状态是说绘制过程中需要的状态,例如颜色选择,顶点坐标的映射关系)
- Open Gl需知:OpenGlEs是openGl中隶属于移动端的子集(webGl使用的也是openglEs);OpenGlEGL:连接OpenGlEs和具体显示设备Display的传话人,ES负责提供数据.EGL接受数据具体的显示策略EGL内部去做,之后就显示到屏幕上了
- OpenGlEgl三个对象:OpenGlEglDisplay:隔离具体的屏幕设备,OpenGlEglSurface:具体的显示内容缓冲区(frameBuffer),OpenglEglContext:状态机的真正实现,此context存储的就是不同的状态属性(比如顶点,使用的颜色)
- 使用OpenGl绘制前需要绑定对应的Context才行,因此需要使用eglMakeContext方法将context绑定到当前线程即可绘制。一个context可被多个线程绑定,但是同一时间一个context只能被一个线程使用
##opengl初始化的工作处理
参考链接:
https://juejin.cn/post/7125449091563126792
获取ANativeWindow
ANativeWindow_fromSurface获取ANativeWindow:参数是java层的surface 通过java层的surface对象获取到native层Surface对象的ANativeWindow引用(nativeSurface其实就是aNativeWindow)
eglGetDisplay
参数是获取屏幕的FLAG 目的:获取openglEs要渲染的目标display屏幕
eglInitialize
参数是2中获取的display 目的:初始化eglDisplay的链接(可以理解为就是初始化eglDisplay)
eglChooseConfig
参数是eglDisplay, 目的:获取eglConfig帧缓存配置(其实就是配置EGL帧缓冲中的颜色缓冲一个颜色通道用多少位表示,比如红色八位,蓝色也是八位显示的就更加全面了)
eglCreateWindowSurface
参数display, eglConfig, nWin, 目的:通过eglConfig和eglDisplay和nativeSurface层的引用ANativeWindow 这三个东西创建EGL Surface
eglCreateContext
参数display, eglConfig 目的:创建EGL Context:通过EGLDisplay和上面获取到的的EGLConfig帧缓存配置列表创建一个EGLContext
eglMakeCurrent
参数eglSurface,eglDisplay,eglContext 目的:将EGLContext和当前线程的EGLSurface关联,关联之后,当前线程就成为了OpenGL es的渲染线程
标签:OpenGl,OpenGLES,ANativeWindow,线程,获取,context,EGL,eglDisplay,模板 From: https://blog.51cto.com/u_14689064/5787335