Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 3D emulation 架構理解

Android 3D emulation 架構理解

編輯:關於Android編程

Android Emulator 給用戶提供 GPU on 選項,意思是利用 Host ( 就是運行 Emulator 的PC機) 的 GPU. 當然PC機必須把 OpenGL 的驅動裝好


在實現上就是把 libGLESv1_CM.so libGLESv2.so 替換掉,當system調用 gl的函數的時候,把調用打包為stream,並通過 pipe 發送到 host端處理,進入轉化為對 host opengl的調用。

光這樣還不夠,還要把 libegl, libgralloc 都替換了,因為要調用 host 端的 opengl 必須有 rendercontext, 所以要把 android egl 也轉化為host 的 xgl的調用(如果你用 ubuntu).


創建

正常情況下,當一個apk進程需要創建窗體的時候,它調用egl的函數創建 Surface, 也要調用 gralloc的中函數創建內存來存放Surface需要的光柵 , 而後把 兩者關聯,這些都是在本進程中完成的,但在 Android 3D emulation 的體系結構中,窗體不能直接創建了,而必需通過發命令給 host 端 render 讓它來調用 xgl 的命令來創建

Surface對應 3D Emulation 中的 WindowSurface, 光柵內存對應 3D Emulation 中的 ColorBuffer.


\

這裡的FrameBuffer 是 3D emulation 中的虛擬 FrameBuffer, 他對 ColorBuffer, WindowSurface, RenderContext進行集中管理


更新

當APK調用swapBuffers (就是把已經畫的上屏, 這需要各Surface提供圖象內存,有SurfaceFlinger做處理並顯示到屏幕上),可以想象使用opengl的繪圖已經結束,現在就是執行一系列內存 copy, ColorBuffer 把Z喎?/kf/ware/vc/" target="_blank" class="keylink">vcGVuZ2y75rrDzby1xCBpbWFnZSC2wcihs/bAtC48L3A+CjxwPmVsZ7XEZWdsTWFrZUN1cnJlbnSyzsr9zOG5qbXa0ru49nN1cmZhY2XKx9PDwLS7rbarzve1xKOstvi12rb+uPa+zcrHtsHIobXEPC9wPgo8cD5wdWJsaWMgYm9vbGVhbiBlZ2xNYWtlQ3VycmVudChFR0xEaXNwbGF5IGRpc3BsYXksIEVHTFN1cmZhY2UgZHJhdywgRUdMU3VyZmFjZSByZWFkLCBFR0xDb250ZXh0IGNvbnRleHQpIKO7PGJyPgo8L3A+CjxwPtOm08OzzNDyu622q873tcTKsbryyrnTw7XE06a4w8rHIEVHTFN1cmZhY2UgZHJhd6OsINXiuPYgU3VyZmFjZcrHuvPMqLXEo6y/tLK7vPujrNa7ysfOqsHLxNyzybmmtffTw29wZW5nbLXEvfjQ0NOyvP7k1si+PC9wPgo8cD7P1tTayc/GwcHLo6zQ6NKq0tTHsGRyYXe1xCBzdXJmYWNlueLVpMr9vt22wcihu9jAtKOstbHIu9XiysdlZ2xNYWtlQ3VycmVudCCyzsr9zOG5qbXEPC9wPgo8cD62wcihtcRTdXJmYWNlueLVpMTatOa5qVN1cmZhY2VGbGluZ2VystnX96Os1+6688n6s8m1xMbBxLvNvM/x1NpGcmFtZUJ1ZmZlctbQo6y/ydLU1rG908nPxsE8L3A+CjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140509/20140509091914216.jpg" alt="\">


最後你在emulator 中,跑賽車游戲也沒有問題


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved