2012-10-13 145 views
2

OpenGL的顶点数组对象是否存储在VRam中?Opengl顶点数组对象

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

回答

10

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

您不能将“顶点和指示数据”读入Vertex Array Objects。他们实际上并没有存储的数据;数据阵列存储在buffer objects中。 VAO只有参考他们。 VAO描述了这些缓冲区中的数据是如何格式化的,以便OpenGL可以理解它们的含义。如果你问的是client-side vertex arrays(注意缺少“对象”一词,尽管你可以在VAO中使用客户端顶点数组),那么根据定义,它们不会存储在GPU上。客户端顶点数组的“客户端”是用户的代码。 IE:你分配,拥有和管理的内存。

如果你在问关于使用buffer objects,是的,缓冲区对象存储驻留在“服务器”(即:OpenGL实现所拥有的内存)上。无论它是否在任何特定时间点在GPU上实际存在,都不是您可以确定的。但是,在您拨打glBufferData,glBufferSubData或更新缓冲区对象的其他此类功能后,服务器已复制该数据。

+0

是的,对术语缺乏了解。我刚开始看openGL。我很高兴你能理解我在问什么。我想知道是否通过分配缓冲区对象并将它们与Assimp场景结构中已有的数据一起填充,我会复制数据并浪费我的时间。 – Ignoreme

+0

@ Kronos25:你会复制数据,但不会“浪费时间”。运行时性能就是您所追求的,因此将数据导入GPU对于实现这一点非常重要。另外,在完成上传之后,您应该*删除*您的场景结构。 –