在Direct3D,當我們使用D3D11_INPUT_ELEMENT_DESC
指定輸入到頂點着色器和當我們調用IASetVertexBuffers
,我們必須指定「輸入插槽(秒)」。這些輸入插槽究竟是什麼,以及什麼是OpenGL等價物?這些輸入插槽似乎與GLSL中的layout(location = K)
指定的「位置」和glVertexAttribPointer
的第一個參數不同。D3D輸入插槽究竟是什麼,以及OpenGL的等價物是什麼?
0
A
回答
2
頂點輸入來自存儲在緩衝區中的值數組。 SemanticIndex
標識輸入在着色器中的位置。 InputSlot
定義哪個緩衝區提供該屬性的數據。緩衝區不受語義索引的約束;他們必然會輸入插槽。
見,D3D有東西兩個數組:語義(匹配在着色器定義的語義其中)的陣列和輸入槽陣列。您使用的每種語義都有一個INPUT_DESC結構,它指定(除其他之外)從語義到輸入它的輸入槽的映射。頂點緩衝區綁定到輸入插槽。任何使用這些插槽的輸入都會從相同的緩衝區中提取數據。一個特定的輸入可以有一個偏移量來訪問它的頂點數據;這允許交錯頂點數據。
OpenGL 4.3/ARB_separate_attrib_format規定similar concepts與glVertexAttribFormat
和glVertexAttribBinding
。前者指定頂點數據到達哪個屬性位置。後者指定哪個緩衝區綁定索引將饋送該屬性。緩衝區綁定緩衝區綁定索引glBindVertexBuffer(s)
。
當使用較舊的API glBindBuffer(GL_ARRAY_BUFFER)/glVertexAttribPointer
,緩衝結合指數和屬性位置索引實際上是相同的。但是這是一個糟糕的API,如果你不需要支持舊的GL版本,我建議你使用更新的東西。
相關問題
- 1. 究竟是什麼插座
- 2. 究竟是什麼輸入/輸出流?
- 3. Qt中的信號和插槽究竟是什麼?
- 4. 頭等功能究竟是什麼?
- 5. 究竟是什麼耙db:migrate做什麼?
- 6. 「句柄」究竟是什麼?
- 7. getGlobalVisibleRect()究竟是什麼?
- 8. Werkzeug究竟是什麼?
- 9. 究竟是什麼@ ViewDebug.ExportedProperty?
- 10. .parentNode究竟是什麼?
- 11. Heroku究竟是什麼?
- 12. session_hash究竟是什麼?
- 13. 究竟是什麼awakeFromNib?
- 14. 究竟是什麼任務
- 15. cout/cin究竟是什麼?
- 16. SKEmitterNode particleLifetime究竟是什麼?
- 17. 代表究竟是什麼?
- 18. 究竟是什麼情景
- 19. 究竟是什麼php.ini memory_limit?
- 20. 資源究竟是什麼?
- 21. App Pool究竟是什麼?
- 22. Erlang OTP究竟是什麼?
- 23. NoSQL究竟是什麼?
- 24. 雅典究竟是什麼?
- 25. ContextStaticAttribute究竟是什麼?
- 26. 「OAuth Provider」究竟是什麼?
- 27. targetSdkVersion究竟是什麼?
- 28. CGContextRef究竟是什麼?
- 29. cacert.pem究竟是什麼?
- 30. ViewUserControl.ViewDataKey究竟是什麼?