首页 > 其他分享 >OpenGLES绘制图形模板:OpenGl处理

OpenGLES绘制图形模板:OpenGl处理

时间:2022-10-23 14:32:26浏览次数:77  
标签:OpenGl OpenGLES ANativeWindow 线程 获取 context EGL eglDisplay 模板

ps:先需要了解图形渲染管线的工作流程和原理,给开发者开放出来的顶点着色器和片段着色器使用方法

提前了解的知识点:

  1. 图形渲染管线需要绑定EGL Context,OPENGL是一个大的状态机,而不同的EGL Context就是不同的状态。顾名思义context需要保存不同的状态(这个状态是说绘制过程中需要的状态,例如颜色选择,顶点坐标的映射关系)
  2. Open Gl需知:OpenGlEs是openGl中隶属于移动端的子集(webGl使用的也是openglEs);OpenGlEGL:连接OpenGlEs和具体显示设备Display的传话人,ES负责提供数据.EGL接受数据具体的显示策略EGL内部去做,之后就显示到屏幕上了
  3. OpenGlEgl三个对象:OpenGlEglDisplay:隔离具体的屏幕设备,OpenGlEglSurface:具体的显示内容缓冲区(frameBuffer),OpenglEglContext:状态机的真正实现,此context存储的就是不同的状态属性(比如顶点,使用的颜色)
  4. 使用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

相关文章