状态机
可以理解为一个保存对象当前状态,且可以根据输入修改当前状态进行响应的机器
特点
- 记忆功能:保存当前状态(如使用颜色、混合功能是否开启等)
- 接收输入:根据输入修改当前状态,且有相应输出
-
上下文 Context
一个保存OpenGL中各种状态的庞大状态机,
- 是OpenGL指令执行的基础,需要在调用指令之前创建
OpenGL函数 与 上下文
- 不论何种语言,OpenGL函数都是面向过程的函数
- 函数本质:对context中某个状态/对象进行操作
- 可以通过对OpenGL指令的封装,将OpenGL的相关函数调用封装成一个面向对象的图形API
问题:反复上下文切换/大量修改渲染状态,导致GPU开销较大
- 针对不同模块,创建不同的context进行状态管理,context之间共享纹理、缓冲区等资源
顶点数组 VertexArray、顶点缓冲区 VertexBuffer
顶点:绘制图形时顶点位置的数据
OpenGL ES中的图元类型
屏幕中的所有图形/图像,都是由这三种图元组合而成的
- 点
- 线
- 三角形
顶点数据存储方式
顶点数组与顶点缓冲区的区别在于顶点数据的存储方式不同
- 存储在内存中,即 【顶点数组】
- 存储在GPU提前分配的显存中,即 【顶点缓冲区】
管线
可以理解为流水线,该流水线有一个固定顺序的操作,需要按着这个顺序一个个执行
固定管线/存储着色器
- 一个已经封装好的Shader程序,开发者使用时,只需要传入相应参数,即可快速完成渲染,类似苹果系统中封装好的API
- 当固定管线无法完成每个业务时,需要将与业务相关的部分变成可编程,用户根据需要自定义管线来完成业务
- 目前OpenGL中可编程的仅有两个程序:顶点着色器、片元着色器
顶点着色器
- OpenGL中用来处理顶点相关代码的程序
- 将顶点坐标由 自身坐标系 转换到 归一坐标系
- 是逐顶点运行的程序,即每个顶点数据都会执行一次,且是并行的
操作
- 确定顶点位置
- 处理图形顶点的变换(旋转、平移、缩放)
-
片元着色器
片元:理解为屏幕中的像素点
- 片元着色器主要用于处理一个个的像素点,例如像素颜色的计算和填充
- 逐像素且在GPU并行运行的程序,即每个像素都会执行一次
举例说明:图片饱和度是如何完成的?
- 通过片元着色器进行一个个像素点的修改来实现