2012-10-13 142 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對於實現這一點非常重要。另外,在完成上傳之後,您應該*刪除*您的場景結構。 –