梳理 Opengl ES 3.0 (一)宏觀着眼


  Opengl ES 可以理解為是在嵌入式設備上工作的一層用於處理圖形顯示的軟件,是Opengl 的縮水版本。

下圖是它的工作流程示意圖:

 

注意圖中手機左邊的EGL Layer

Opengl ES是跨平台(即可支持不同操作系統)的軟件。它如果想調用與系統相關,與硬件相關的操作,並不是通過直接訪問操作系統,而是經過了一個中間層,即 EGL Layer,這個EGL layer當然也是Opengl es不可分割的一部分,失去了它,自然也就失去了和操作系統交互的方式了。不同的系統,要實現自己的EGL,比如在IOS系統下,定義了一個EAGL對象來實現EGL;在Android平台下,定義了GLView類,通過GLView.EGLContextFactory來提供EGL。EGL究竟提供了哪些內容,可以參考這個官方鏈接

 

Opengl ES 3.0這個軟件的一代即1.1版本,使用的是固定式流水線;目前的2.0/3.0版本可理解為可修改式流水線。流水線這個詞非常適合描述這個軟件的工作流程,其實就是個標准的代碼順序執行的過程吧,應該是和並行相對的詞。

先看看這個固定流水線的圖:

后續的解讀會逐步展開每一個階段的具體過程。

 

可編程流水線

所謂“可修改”在程序員看來自然就是可編程了,所謂可編程,就是可以開放方法,可以讓開發者自定義方法,這個寫出來的方法,就是程序代碼了。普通代碼是在CPU下運行,讓CPU去處理代碼。而這種為渲染流水線制作的代碼,是放在GPU上運行的,被稱為 Shader 。

在前述固定管線長長的流水作業過程中,可編程管線強制要求上層應用程序員使用Shader來完成其中的某些步驟。

 簡單提下 Shader

Opengl ES 3.0內部有兩種可編程處理單元,即Vertex processor和Fragment processor,分別用來處理Vertex shader executable和Fragment shader executable。注意,Opengl ES 3.0不支持Geometry Shader。上圖中,紫色部分就是可執行體了,即 executable .

不同平台上的開發 

1.Android。可以使用包含了OpenGL es的基於java的框架來使用java語言實現相關功能。還可以使用Native Developement Kit(NDK)來使用C/C++語言開發,這個時候JNI會作為JAVA核心框架與NDK C++代碼之間的橋梁。

2.IOS。Opengl es 3.0在IOS 7以及以后的版本里進行了完整的實現。也就是Iphone 5s以后的版本。Mac系統提供了Xcode IDE來開發IOS應用,可以發布到iphone,ipad,ipod上,opengl es 3.0要求xcode 5以上版本。即IOS7 SDK + XCODE 5.0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM