glEnable和glEnableClientState有什麼區別?每次我需要一個模式設置/取消設置時,我必須查看參考以瞭解哪些人會接受它。奧斯汀有什麼一般規則說哪些模式進入哪一種模式?glEnable和glEnableClientState有什麼區別?
回答
除了Tibur酒店的答案,在實踐中唯一採用glEnableClientState
和glDisableClientState
是啓用/禁用內置固定功能屬性陣列(如GL_VERTEX_ARRAY
,GL_NORMAL_ARRAY
,...)。對於所有其他狀態,您使用glEnable
和glDisable
(或glEnableVertexAttribArray
和作爲通用頂點着色器屬性)。
glEnable
是服務器端,而glEnableClientState
是客戶端。在服務器端將CPU和客戶端視爲您的GPU。全球範圍來看,頂點數組只是客戶端。
在OpenGL方面,服務器端是GPU而不是CPU,反之亦然? – ashishsony
glEnable
用於OpenGL ARB確定代表內部驅動程序狀態的狀態集合。 glEnableClientState
是表示您更直接控制的信息的狀態。唯一已啓用/禁用的客戶端狀態是舊的頂點數組狀態。這些被glEnable/DisableVertexAttribArray
取代。
由於驅動程序仍然管理所有這種狀態,所以這種區別實際上毫無意義。
在GLX上使用間接渲染的情況下,驅動程序不會管理所有狀態。在客戶端,OpenGL/GLX庫負責跟蹤客戶端狀態,而在服務器端,驅動程序必須關心OpenGL狀態。這樣的區別。 OpenGL-3在間接GLX方面還沒有完全確定,這是一個恥辱,因爲緩衝對象和Tesselation Shaders的帶寬節省將間接地使OpenGL-3變得非常有意義。 – datenwolf
- 1. 有什麼區別`和$(Bash中有什麼區別?
- 2. 有什麼區別? :和||
- 3. &&和||有什麼區別?
- 4. 「/」和「/ *」有什麼區別?
- 5. 有什麼區別:。!和:r!?
- 6. ==和===有什麼區別?
- 7. Appender和〜有什麼區別?
- 8. $ @和$ *有什麼區別?
- 9. is和=有什麼區別?
- 10. #.00和#。##有什麼區別?
- 11. `==`和`is`有什麼區別?
- 12. '=='和'==='有什麼區別?
- 13. /和/#/有什麼區別?
- 14. | 0和~~有什麼區別?
- 15. `&`和`ref`有什麼區別?
- 16. ==和===有什麼區別?
- 17. ==和===有什麼區別?
- 18. `{}`和`[]`有什麼區別?
- 19. JavaScript和=== ===有什麼區別?
- 20. difftime和' - '有什麼區別?
- 21. =和==有什麼區別?
- 22. xtype和別名有什麼區別?
- 23. Mixpanel:識別()和people.identify()有什麼區別?
- 24. 有什麼區別
- 25. 有什麼區別
- 26. 有什麼區別?
- 27. 有什麼區別?
- 28. 有什麼區別?
- 29. 有什麼區別
- 30. ....有什麼區別?
如果所有的數組都是客戶端,爲什麼數組比開始/結束更快?我認爲顯卡直接從內存中複製它們,但這不能成爲客戶端,對嗎? – Dani
@Dani原始頂點數組是客戶端狀態並駐留在CPU內存中(這就是爲什麼您只需在'glVertexPointer'等中設置指向CPU內存的指針的原因)。性能提升不僅僅是因爲不從CPU複製,而是因爲不爲每個頂點回調驅動程序。但是你是對的,因爲VBOs(這是使用數組的現代方式)允許你將數組存儲在GPU內存中。但使用'glEnableClientState'啓用數組的舊方式已被保留。 –
@Dani無論如何,固定函數頂點數組已被棄用(與'glEnableClientState'一起)。而通用着色器屬性的新的'glEnableVertexAttribArray'不再有客戶端或服務器的概念。 –