http://zhidao.baidu.com/link?url=c3m55lgpjhU1Rb7TEP-aTGQAX3-GrcBk5NaUC2UA1ZtQiCCtHJzB_KoG7pWvPEybfYv7AWiUH8Vev0Y3Jkr0OK
android 的opengl glEnableClientState() 和 glDisableClientState() 作用是什么呢?
舉報| 2011-09-01 19:27
提問者采納
OpenGL是個狀態機,我們通常見到的glEnable - glDisable函數就是通知OpenGL開啟/關閉某種狀態的,譬如光照、深度檢測等等。但是也有glEnableClientState - glDisableClientState這對。它們的區別是通知的具體對象在概念上不一樣——分別是服務端和客戶端。事實上我也無法很清楚地告訴你區別之處,反正你把你電腦上的具體程序,包括它用到的內存等等看作客戶端,把你電腦里面的——顯卡里的OpenGL“模塊”,乃至整張擁有OpenGL流水線、硬件實現OpenGL功能的顯卡,作為服務端。它們各自維護一些“狀態”,glEnable 等是直接維護流水線處理相關的狀態的,glEnableClientState 維護的則是進入流水線前的狀態。流水線早期的T&L階段,程序的頂點數據就被獲知而接受處理了。至於頂點是怎么來的——是glVertex來的,還是glDrawArray來的,流水線沒必要知道——這就是客戶端的任務,所以是否使用頂點數組(作為一種狀態是否需要被啟動)都是由客戶端決定。顯示列表的glCallList比較特殊,它繞過客戶端,直接通知服務端把之前初始化時設定的代碼段所映射的硬件設置“啟亮”,這是相當於直接把顯存的某一段占有而隨時呼喚了,硬件對此命令沒有絲毫猶豫地接受,對該呼喚的答應變成一種“神經反射”行為——這是最理想最高級的“繪制”。
