一種變量類型是 uniform。uniform是 OpenGL ES 2.0中被輸入着色器的只讀值。uniform被使用存儲各種着色器需要的數據,例如:轉換矩陣、光照參數或者顏色。基本上各種輸入着色器的常量參數像頂點和片段(但在編譯時並不知道)應該是uniform。
OpenGL ES 2.0必須至少提供128 個頂點着色器 uniform和 16個片段着色器 uniform。
OpenGL ES着色器語言的另一個變量是屬性。屬性變量僅僅在頂點着色器中被使用,
逐頂點的指定頂點着色器的輸入。典型的被用來儲存位置、法線、貼圖座標和顏色數據。關鍵是懂得屬性是每個頂點被繪製的詳細數據。它實際上是着色器的使用者決定什麼數據是屬性。
像 uniform一樣,硬件對頂點着色器的屬性變量數量有限制。最大的屬性數通過工具編譯支持gl_MaxVertexAttribs確定。(或者使用
GL_MAX_VERTEX_ATTRIBS爲參數調用glGetIntegerv查詢)最小數是
8。如果爲確保你的程序能在任何OpenGL ES 2.0工具上編譯,確保你的屬性不超過
8。
變量被用來存儲頂點着色器的輸出和片段着色器的輸入。基本上每個頂點着色器把輸出數據轉變成一個或更多片段着色器的輸入。那些變量也被片段着色器聲明(類型需匹配),並且在光柵化階段被線性插補變成基元
像 uniform和屬性,變量也有數量的限制(硬件上它們被用來做插補)。工具支持的最大數目是gl_MaxVaryingVectors(使用GL_MAX_VARYING_VECTORS爲參數調用 glGetIntegerv查詢)。最小數目是 8。
GLSurfaceView
分類: 嵌入式
Render的mode可以設爲兩種模式,一種是自動循環模式,也就是說GL線程以一 定的時間間隔自動的循環調用用戶實現的onDrawFrame()方法進行一幀一幀的繪製,還有一種的“髒”模式,也就是說當用戶需要重繪的時候,主動 “拉”這個重繪過程,有點類似於Canvas中的invalidate()
具體的調用方法是在GLSurfaceView中
a.自動模式
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
b."髒"模式
.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
當需要重繪時,調用
GLSurfaceView.requestRender()
一般情況下使用髒模式,這樣可以有效降低cpu負載。測試結果表明,OpenGL真正繪圖時一般會佔到30%以上的cp