1.常量顶点属性
glVertexAttrib *
2.顶点数组
顶点数组是制定给个顶点的属性,是保存在应用程地址空间的缓存区。作为顶点缓冲对象的基础
一般用glVertexAttribPointer或者glVertexAttribIPointer
2.1顶点属性的存储方法
结构数组(优):在一个缓冲区中存储顶点属性(内存连续)
数组结构:在单独的缓冲区中保存每个顶点属性
结构数组的缺点:如果顶点属性数据的一个子集需要修改,需要重新加载整个顶点属性缓冲区。可以通过将动态的顶点属性保存在单独的缓冲区避免这种效率低下的情况。
2.2type参数
Type参数指定的顶点属性数据格式不仅影响顶点属性数据的图形内存存储需求,并且影响整体性能,这是渲染帧所需内存带宽的一个函数。
在OpenGL ES 3.0支持名为GL_HALF_FLOAT 16位浮点顶点格式
建议在坐标,法线,副法线,切向量等使用GL_HALF_FLOAT
颜色可以存储位GL_UNSIGNED_BYTE
2.3规范化标志
控制非服点顶点属性数据到单精度浮点值的转换。
如果为假:直接转换为浮点值。
如果为真:不同类型映射的范围不同。
3.顶点缓冲区
3.1使用顶点数组指定的顶点属性保存在内存中。在进行glDrawArrays或者glDrawElements时,这些数据必须从内存复制到图形内存中。如果我们没有必要在每次绘图调用时都复制顶点数据,而是在图形内存中缓存这些数据。从而避免在每次绘图图元时重新发送数据。
OpenGL ES支持两类缓冲对象, 顶点 和 图元数据。
GL_ARRAY_BUFFER 指定顶点
GL_ELEMENT_ARRAY_BUFFER 指定图元
3.2在使用缓冲对象渲染之前,需要分配缓冲区对象并将顶点数据和元素索引上传到相应的缓冲区对象。
4.顶点数组对象(VAO)
在OpenGL ES 3.0 中引入的新特性。
VAO提供包含在顶点数组/顶点缓冲区对象配置之间切换所需要的所有状态的单一对象。
5.映射缓冲区对象
5.1映射优点:
映射缓冲区可以减少应用程序的内存占用,因为可以只需要存储数据的一个副本。
在使用共享内存的架构上,映射缓冲区返回GPU存储缓冲区的地址空间的直接指针。
5.2刷新映射的缓存区
如果应用程序用GL_MAP_FLUSH_EXPLICIT_BIT映射,但是没有明确地用glFlushMappedBufferRange刷新修改后的区域,他的内容将是未定义的。
6.复制缓冲区对象
OpenGL ES 3.0 还可以从一个缓冲区对象将数据完全复制到设备。
glCopyBufferSubData