原文地址:blog.csdn.net/byhook/arti…java
OpenGL ES當前主要版本有1.0/1.1/2.0/3.0/3.1
。android
OpenGL ES版本 | Android版本 | 描述 |
---|---|---|
OpenGL ES1.0 | Android 1.0+ | OpenGL ES 1.x是針對固定硬件管線的,Android 1.0和更高的版本支持這個API規範。 |
OpenGL ES2.0 | Android 2.2(API 8)+ | OpenGL ES 2.x是針對可編程硬件管線的,不兼容OpenGL ES 1.x,Android 2.2(API 8)和更高的版本支持這個API規範。 |
OpenGL ES3.0 | Android 4.3(API 18)+ | 向下兼容OpenGL ES 2.x,Android 4.3(API 18)及更高的版本支持這個API規範。 |
OpenGL ES3.1 | Android 5.0 (API 21)+ | 向下兼容OpenGL ES3.0/2.0,Android 5.0(API 21)和更高的版本支持這個API規範 |
OpenGL ES 3.0實現了具備可編程着色功能的圖形管線,由兩個規範組成:OpenGL ES 3.0 API 規範
和OpenGL ES着色語言3.0規範(OpenGL ES SL)
。git
頂點着色器實現了頂點操做的通用可編程方法,着色器(Shader)是在GPU上運行的小程序
。 頂點着色器的輸入包括:github
uniform
)一一頂點(或者片斷)着色器使用的不變數據。頂點着色器的輸入輸出模型
編程
頂點着色器取得一個位置及相關的顏色數據做爲輸入屬性,用一個 4x4矩陣變換位置,並輸出變換後的位置和顏色。
小程序
#version 300 es
uniform mat4 u_mvpMatrix;
int vec4 a_postion;
int vec4 a_color;
out vec4 v_color;
void main(){
v_color = a_color;
gl_Position = u_mvpMatrix * a_postion
}
複製代碼
片斷着色器片斷着色器爲片斷上的操做實現了通用的可編程方法。 對光柵化階段生成的每一個片斷執行這個着色器,採用以下輸入:數組
圖元裝配頂點着色器以後, 0pennGL ES 3.0 圖形管線的下一階段就是圖元裝配。 `圖元(Primitive)是三角形、直線或者點精靈等幾何對象。圖元的每一個頂點被髮送到頂點着色器的不一樣拷貝。 在圖元裝配期間,這些頂點被組合成圖元。對於每一個圖元,必須肯定圖元是否位於視錐體(屏幕上可見的 3D 空間區域)內。若是圖元沒有徹底在視錐體內,則可能須要進行裁剪。若是圖元徹底處於該區域以外,它就會被拋棄。裁剪以後,頂點位置被轉換爲屏幕座標。也能夠執行一次淘汰操做,根據圖元面向前方或者後方拋棄它們。裁剪和淘汰以後,圖元便準備傳遞給管線的下一階段 ― 光柵化階段。post
下一階段是光柵化,在此階段繪製對應的圖元(點精靈、直線或者三角形)。光柵化是將圖元轉化爲一組二維片斷的過程,而後,這些片斷由片斷着色器處理。這些二維片斷表明着可在屏幕上繪製的像素。學習
OpenGL ES 3.0 光柵化階段
spa
片斷着色器以後,下一個階段就是逐片斷操做
。
android中的程序都是運行在虛擬機
中的,而OpenGL
做爲本地系統庫是運行在硬件上的,虛擬機與OpenGL
數據傳輸的方式由兩種
JNI
的方式,當咱們使用GLES20包
裏的方法時,內部實現其實就是調用本地方法。ByteBuffer
)集合,能夠直接分配本地內存塊,並把Java的數據複製到本地內存,本地內存能夠被本地環境存取,而不受垃圾回收器管控。從虛擬機到本地環境的數據傳輸過程
項目地址: github.com/byhook/open…
參考:
《OpenGL ES 3.0 編程指南第2版》
《OpenGL ES應用開發實踐指南Android卷》