Opengl顶点数组对象

时间:2012-10-13 00:58:38

标签: opengl vao

OpenGL的顶点阵列对象是否存储在VRam中?

我真正要问的是:如果我加载一个模型,例如使用Assimp,那么将顶点和indice数据读入顶点数组对象;我会在Ram中复制数据,还是将其复制到GPU?

1 个答案:

答案 0 :(得分:10)

这里似乎缺乏对OpenGL术语的理解。

您无法将“顶点和指数数据”读入Vertex Array Objects。它们实际上并不存储数据;数据数组存储在buffer objects中。 VAO仅引用它们。 VAO描述了这些缓冲区中的数据是如何格式化的,以便OpenGL能够理解它们的含义。

如果您询问client-side vertex arrays(注意缺少“对象”一词,尽管您可以将客户端顶点数组与VAO一起使用),那么根据定义它们不会存储在GPU上。客户端顶点数组的“客户端”是用户的代码。 IE:您分配,拥有和管理的内存。

如果您询问buffer objects的使用,是的,缓冲区对象存储驻留在“服务器”上(即:OpenGL实现拥有的内存)。在任何特定时间点,它是否实际上都在GPU上,这不是您可以确定的。但在您调用glBufferDataglBufferSubData或其他更新缓冲区对象的函数后,服务器已复制该数据。