隨着教程here繼獲得介紹的OpenGL 3.3,我明白,頂點和索引緩衝區必須以發出指令,他們glBindBuffer()的約束。有一個提到可以通過將句柄0傳遞給glBindBuffer()來解除緩衝區綁定,這似乎是一個好主意,以防止在完成使用時意外地使用不正確的緩衝區。在發出設置或繪製調用之後,是否有任何理由不總是解除頂點和索引緩衝區的綁定?解綁OpenGL緩衝區有什麼影響?
3
A
回答
5
由於OpenGL的架構作爲一個狀態機,這些話題是經常提出 - 並沒有明確的答案。根據綁定目標,緩衝區綁定確實會影響各種其他GL命令的操作。
在一些情況下,對象0 represenets一些「無緩衝器/缺省對象」的情況。例如,使用GL_PIXEL_UNPACK_BUFFER
,使用0將允許您將像素數據直接從客戶端內存傳輸到GL - 因此,如果您想這樣做,您絕對需要在某個點解除綁定任何綁定的PBO。如果你儘可能早或儘可能晚地取決於程序員,並且嚴重依賴於軟件的體系結構。一般規則應該是避免不必要的狀態更改,並且包括緩衝區(un)綁定操作。但是,遵循這條路線通常會導致某些狀態「泄漏」出其實際意圖的範圍 - 而這種情況可能會令人煩惱以進行調試。
在其他情況下,0
是不要做任何有效狀態。例如,現代GL需要你使用VBOs。作爲GL_ARRAY_BUFFER
的唯一用例 - 指定一些attrib指向客戶端內存的指針 - 已經消失了,因此沒有必要將0綁定爲GL_ARRAY_BUFFER
。所以解綁VBO總是浪費時間 - 下次你設置一個attrib指針,你必須綁定一些VBO,如果你沒有設置attrib指針,那綁定目標是完全不相關的。
相關問題
- 1. 綁定模板渲染緩衝區幀緩衝區在OpenGL
- 2. 爲什麼綁定OpenGL緩衝區對象?
- 3. 沙盒可以緩解緩衝區溢出的影響。
- 4. 爲什麼HttpClient.PostAsync緩衝區響應?
- 5. 緩衝區大小的影響
- 6. 忽略OpenGL typedefs有什麼影響?
- 7. 爲什麼緩衝區大小對此文件讀操作沒有影響
- 8. RGB緩衝區到JPEG緩衝區,這裏有什麼問題?
- 9. iOS OpenGL ES:何時應該綁定幀緩衝區和渲染緩衝區?
- 10. OpenGL中的幀緩衝區對象和像素緩衝區對象之間有什麼區別?
- 11. executeUpdate()對JPA緩存有什麼影響?
- 12. 緩存對NSFetchedResultsController有什麼影響
- 13. OpenGL臨時緩衝區
- 14. OpenGL ES深度緩衝區
- 15. 模板緩衝區在OpenGL
- 16. 訪問緩衝區在OpenGL
- 17. OpenGL緩衝區更新
- 18. OpenGL頂點和緩衝區
- 19. OpenGL ES多色緩衝區
- 20. OpenGL統一緩衝區?
- 21. OpenGL的 - 緩衝區,着色
- 22. OpenGL深度緩衝區
- 23. Opengl浮動緩衝區
- 24. Opengl選擇緩衝區
- 25. 什麼是緩衝區?
- 26. 爲什麼FileWriter有一個緩衝區?
- 27. OpenGL緩衝區和Qt OpenGL模塊
- 28. 什麼是緩衝區?什麼是緩衝讀取和寫入?
- 29. Linux緩衝區緩存對IO寫入的影響?
- 30. OpenGL:渲染緩衝區,深度緩衝區
不這樣做可能是,如果你不使用/與其他框架代碼集成和優化的繪製調用你已經確保適當的配料和狀態改變單一線性的應用程序代碼的唯一原因。 – prabindh
我認爲這是最優化的問題,例如:如果你有哪些影響緩衝,甚至借鑑它的一些功能,以及其他一些常規,將後的第一個總是被稱爲安裝例程,也需要執行操作在一個緩衝區,但不同的一個。所以很顯然,在這種情況下,用所需的緩衝區調用glBindBuffer()而不是用0調用它然後綁定第二個緩衝區會更有效率。 – UnTraDe