OpenGL 概念整理
1. OpenGL
1.1 术语说明
概念 | 描述 | 版本 |
---|---|---|
OpenGL | Open Graphics Library Khronos 定义GPU功能实现的SPEC,标准API | 4.6 |
OpenGL ES | Embedded System 为嵌入式系统定义的相关补充接口 | 3.2 |
EGL | 用于GPU渲染与机器原生窗口之间通信的API,独立于OpenGL ES各个版本 | |
Vulkan | Khronos组织新定义的接口,相比于OpenGL更加高效 | 1.2 |
1.2 OpenGL 理解
从功能上理解,OpenGL 是开发者操作GPU渲染的工具,需要将所定义的行为给到GPU去执行渲染操作:
- 将绘制源数据提供给到GPU;
- 将执行操作(程序)给到GPU;
- 绘制完成后将显示内容提供给到framebuffer;
针对于上述功能需求,Khronos将OpenGL设计成为一组状态机,规定一系列的变量描述OpenGL此刻应当如何运行,其状态通常被称为上下文(Context),我们可以在程序中配置他们,这些状态会一直生效到下次改变:
- Context:作为状态机的上下文,描述当前状态的值以及改变状态的值;
- Object: OpenGL将一系列具有相同功能的状态抽象出状态的子集称之为对象
- OpenGL Shading Language:GPU的编程语言,使用GLSL来编写shader程序
概念 | 说明 |
---|---|
Vertex | 顶点 GPU渲染绘制是对于点的操作,这里是物体顶点坐标的计算操作 |
Fragment | 片元操作,理解为对于像素点的颜色计算操作 |
Shader | 着色器:GPU中执行程序的名称(ARM 将HW 叫做Shader Core),一般有Vertex、fragment、geometry等 |
Texture | 作为Fragment输入操作的源数据,多种方式提供给到GPU |
1.3 VBO、EBO、VAO的理解
顶点数据如何提供给到GPU:
对象 | 说明 |
---|---|
VBO | Vertex Buffer Object,一块buffer,描述顶点的数据对象 |
EBO | Element Buffer Object,描述元素的数据对象,存储顶点的索引,可以复用顶点构建三角形 |
VAO | Vertex Arrary Object,一块buffer,顶点数组对象,可以描述多个顶点 |
GLfloat vertices[] = {
0.5f, 0.5f, 0.0f, // 右上角
0.5f, -0.5f, 0.0f, // 右下角
-0.5f, -0.5f, 0.0f, // 左下角
-0.5f, 0.5f, 0.0f // 左上角
};
GLuint indices[] = { // 注意索引从0开始!
0, 1, 3, // 第一个三角形
1, 2, 3 // 第二个三角形
};
GLuint VBO, VAO, EBO;//声明变量
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &am