顶点属性数据
顶点属性数据的指定表示的是为指定属性位置的顶点设置相关数据值,属性位置通常在顶点着色器中通过布局限定符设置。
常量顶点属性的指定
void glVertexAttrib1f(GLint index, GLfloat x);
void glVertexAttrib2f(GLint index, GLfloat x, GLfloat y);
void glVertexAttrib3f(GLint index, GLfloat x, GLfloat y, GLfloat z);
void glVertexAttrib4f(GLint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void glVertexAttrib1fv(GLint index, const GLfloat *values);
void glVertexAttrib2fv(GLint index, const GLfloat *values);
void glVertexAttrib3fv(GLint index, const GLfloat *values);
void glVertexAttrib4fv(GLint index, const GLfloat *values);
顶点数组的指定
void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,const GLvoid * pointer)
void glVertexAttribIPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,const GLvoid * pointer)
顶点缓存对象(VBO)
顶点缓存对象(VBO)是将顶点数据存放在服务端的高性能显卡内存中以便客户端调用和共享。
顶点缓存对象(VBO)避免了显示列表(glCallList)无法动态修改顶点数据的缺点,也避免了顶点数组(VA)将顶点数据存储在客户端,等处理完再发送给服务端导致的效率低的问题,如果顶点数组数据保存在客户内存中,使用glDrawArrays或glDrawElements绘图时,这些数据必须从客户内存复制到图形内存,如果数据过大或者频繁绘图时,将带来性能问题。可以说VBO结合了VA和glCallList两者的特性,效率在两者之间。
创建VBO
void glGenBuffers(GLsizei n, GLuint* buffers);//分配顶点缓存对象
void glBindBuffer(GLenum target, GLuint buffer);//绑定顶点缓存对象
void glBufferData(GLenum target,GLsizeiptr size, const GLvoid* data, GLenum usage)//将数据载入缓存对象
顶点数组对象(VAO)
顶点数组对象( VAO )是一种特殊类型对象,它封装了与顶点处理器有关的所有数据,记录顶点缓存区和索引缓冲区的引用,以及顶点的各种属性的布局,而不存储实际的数据。
使用VBO每次都要调用glBindBuffer、glVertexAttribPointer、glEnableVertexAttribArray等,而VAO可以更快地在顶点数组配置之间切换,使顶点数组的使用更加高效。应用程序可以通过绑定一个已经设置状态的VAO快速地在顶点数组配置之间切换,所有变化可以在一个函数调用中完成。
VAO可以理解为VBO的状态容器,记录了每一次绘制所需的所有的VBO的信息。
创建VAO
void glGenVertexArrays(GLsizei n, GLuint *arrays)
void glBindVertexArray(GLuint array)
其他
glVertex
glVertex属于最初的渲染管线,是最原始的设置顶点的方式,在glBegin和glEnd之间使用,每设置一次顶点数据就要和GPU通信一次,渲染效率比较低。
显示列表(glCallList)
显示列表(glCallList)与glVertex相反,只和GPU通信一次,在通信之前将所有需要设置的顶点数据都收集好,一次性发送给GPU。但传到GPU之后不能再更改数据。
顶点数组(VA)
顶点数组(VA)与显示列表一样也是收集好所有的顶点数据,一次性传送给GPU。因为数据在客户端而不是在GPU中储存,所以绘制的速度没有显示列表快,但可以对数据进行修改。
参考链接:
https://blog.csdn.net/shengwenj/article/details/50980674