對我來說逾滥,這是兩個非常容易忘的概念烘贴,細節(jié)也不太好記憶禁添。所以我簡單粗暴地總結(jié)一下二者〗白伲可能未必精確老翘,但get到了大致思想即可。
VBO:Vertex Buffer Object锻离,頂點緩沖對象铺峭。
可以存儲大量頂點,因而我們可以利用VBO一次性發(fā)送一大批數(shù)據(jù)到顯卡上汽纠。
VAO:Vertex Array Object卫键,頂點數(shù)組對象。
一個VAO虱朵,配置并告訴了我們該如何使用VBO(包括如何解讀VBO中的數(shù)據(jù))莉炉,以及使用哪個VBO。
為了了解VAO究竟存了什么碴犬,我執(zhí)行了一個小測試呢袱。
我把綁定VAO的那句代碼:glBindVertexArray(cubeVAO)
分別放在了三個位置。
Position 1: 綁定并配置VBO之前翅敌。
Position 2: 綁定并配置VBO之后,配置頂點屬性之前惕蹄。
Position 3: 配置頂點屬性之后蚯涮。
如下圖所示:
運行結(jié)果如下:Position1與Position2都正常,且沒有任何區(qū)別卖陵;Position3不正常(顯而易見:))
據(jù)我分析遭顶,Position1與Position2之所以運行結(jié)果相同,源于OpenGL的狀態(tài)機模式泪蔫。Position1自然不必多說棒旗,走的是正常流程。Position2的話,由于我們已經(jīng)先行綁定了VBO铣揉,在狀態(tài)機模式下饶深,當我們開始綁定VAO的時候,此時的VBO尚未被解綁逛拱,所以相當于VAO在綁定和配置過程中敌厘,隱含地包含了一個綁定中的VBO。