OpenGL 4.0 GLSL 基础教程概览
OpenGL 4.3 最新渲染管线图
从OpenGL 2.0 到 OpenGL 3.0变化非常大,但从OpenGL 3.0 到OpenGL 4.0 变化不是太大。
着色器程序直接运行在GPU上,并且是并行的,一个片元着色器可能一次执行所有象素。
deprecation model, 在OpenGL3.0 提出,为了保持向后兼容,兼容模式compatibility profile.和核心模式core profile的概念在OpenGL 3.2 中提出。
OpenGL 4.0 GLSL 框架 下载地址
-------------------------------------分割线-------------------------------------
-------------------------------------分割线-------------------------------------
在Qt 4.7以后版本,可以通过下列方式选择核心模式:
QGLFormat format;
format.setVersion(4,0);
format.setProfile(QGLFormat::CoreProfile);
QGLWidget *myWidget = new QGLWidget(format);
传送数据到GP
1. 产生顶点数组对象(vertex-array object, VAO)的标识符glGenVertexArrays
2. 绑定(创建)顶点数组对象glBindVertexArray
3. 产生缓冲区对象的标识符glGenBuffers
4. 绑定(创建)缓冲区对象glBindBuffer
5. 为缓冲区对象分配存储空间,传送数据glBufferData
6. 更新缓冲区对象的数据glBufferSubData
顶点数组对象(VAO)
1. 顶点有多种属性值
位置
颜色
纹理坐标
应用程序数据
顶点数组包含了这些数据
2. OpenGL中用顶点数组对象打包了所有的顶点数据(位置、颜色等)
3. 生成顶点数组对象的标识符(或名字)然后绑定
产生顶点数组对象名
1. Void glGenVertexArrays(GLsizein,GLuint*arrays);
2. 返回n个当前未被使用的顶点数组对象名到数组arrays
3. 名字类似于C中的指针,只有指向已分配的内存才有意义
4. OpenGL中的分配方式称为对象绑定
绑定顶点数组对象
1. 当array首次使用的从glGenVertexArrays()返回的非零值时,创建一个新的顶点数组对象并赋以该名字
2. 当绑定到已创建的顶点数组对象时,该对象变成当前活动对象
3. 当绑定到零值时,OpenGL停止使用应用程序分配的顶点数组对象并返回到顶点数组的默认状态
删除顶点数组对象
1. Void glDeleteVertexArrays(GLsizein,constGLuint*arrays);
2. 删除arrays中指定的n个顶点数组对象,使得这些名字可被重用
3. 如果一个当前绑定的顶点数组对象被删除,该顶点数组的绑定变为0,并且默认顶点数组成为当前活动对象
查询顶点数组对象名
1. GLboolean glIsVertexArray(GLuintarray);
2. 查询array是否对应到一个顶点数组对象
3. 返回GL_TRUE,如果array是一个之前glGenVertexArrays()产生的顶点数组对象名,且后来未被删除
4. 返回GL_FALSE,如果array是0,或者一个非顶点数组对象名的非零值
顶点缓冲区对象(VBO)
1. 顶点的各种数据存储在缓冲区对象中,并由当前绑定的顶点数组对象所管理
2. 缓冲区对象是由GPU分配并管理的内存创建、绑定、传送(或更新)数据