目錄編程
2.1 OpenGL ES 2操作系統
在imx6q中有3個vivante的GPU,分別是GC2000、GC320、GC355。GC2000負責3D圖形的加速,GC320負責2D圖形的加速,GC355負責矢量圖形的加速。如圖 11所示:遊戲
圖 11 Vivante GPU簡介ip
圖 12 GC2000硬件架構
圖 12表示的是GC2000 GPU的硬件架構,各模塊的具體做用以下:
Host Interface:GPU和CPU還有內存通信的接口。
Memory Controller:GPU內存控制器。
Graphics Pipeline Front End:至關於GPU內部的DMA,用於從內存中取指令和數據給GPU處理。
Ultra-threaded Unifed Shader:統一着色器,便可用做頂點着色器(vertex shader)也能用做片元着色器(fragment shader)。用做vertex shader時主要負責幾何變換和光照計算,用做fragment shader時主要負責處理貼圖數據和計算像素顏色。
3D Rendering Engine:負責將三角形和線段轉換爲像素(光柵化),計算三角形面的顏色屬性等。
Texture Engine:用於材質貼圖的處理。
Pixel Engine/Resolve:負責像素透明處理,可見平面的測定和抗鋸齒的一些處理,並將GPU處理完成的圖像數據輸出到frambuffer。
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式設備而設計。OpenGL ES 是從 OpenGL 裁剪的定製而來的,去除了四邊形、多邊形等複雜圖元等許多非絕對必要的特性。OpenGL ES 1.x 針對固定pipeline硬件,OpenGL ES 2.x 針對可編程pipeline硬件。
OpenGL是一個操做GPU的API,它經過驅動向GPU發送相關指令,控制pipeline狀態機的運行狀態。但OpenGL須要與本地視窗系統進行交互,這就須要一箇中間控制層,最好與平臺無關,EGL所以被獨立的設計出來,它做爲OpenGL ES和本地窗口的橋樑。
EGL API 是獨立於OpenGL ES各版本標準的獨立API ,其主要做用是爲OpenGL指令建立 Context 、繪製目標Surface 、配置Framebuffer屬性、Swap提交繪製結果等。此外,EGL爲GPU廠商和OS窗口系統之間提供了一個標準配置接口。通常來講,OpenGL ES中pipeline的狀態被存儲於EGL管理的一個Context中。而Frame Buffers 和其餘繪製Surfaces 經過EGL API進行建立、管理和銷燬。 EGL 同時也控制和提供了對設備顯示和可能的設備渲染配置的訪問。
圖 21爲一個典型的EGL系統佈局。應用程序經過調用EGL API進行window、surface、context的初始化,接着經過調用OpenGL ES的API進行設置context等,最後調用GPU渲染API進行渲染。
圖 21典型EGL系統佈局
圖 22表示的是Vivante GPU的軟件框架。GAL Driver是爲了下降跨平臺(操做系統,硬件平臺)移植的難度而設計的一套API,包括用戶層驅動:主要提供GAL API給開發者使用;內核層驅動:主要負責管理對GPU硬件的操做。
在實際使用中,圖中的EGL、OpenGL ES等圖形庫以動態庫形式被使用,用戶層的GAL Driver也以動態庫形式被使用,內核層的GAL Driver之內核模塊驅動形式被使用。
圖 22 Vivante GPU框架