日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 3D emulation 架构理解

發(fā)布時間:2024/7/19 Android 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 3D emulation 架构理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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


在實現(xiàn)上就是把 libGLESv1_CM.so ?libGLESv2.so 替換掉,當system調(diào)用 gl的函數(shù)的時候,把調(diào)用打包為stream,并通過 pipe 發(fā)送到 host端處理,進入轉化為對 host opengl的調(diào)用。

光這樣還不夠,還要把 libegl, libgralloc 都替換了,由于要調(diào)用 host 端的 opengl 必須有 rendercontext, 所以要把 android egl 也轉化為host 的 xgl的調(diào)用(假設你用 ubuntu).


創(chuàng)建

正常情況下,當一個apk進程須要創(chuàng)建窗口的時候,它調(diào)用egl的函數(shù)創(chuàng)建 Surface,?也要調(diào)用 gralloc的中函數(shù)創(chuàng)建內(nèi)存來存放Surface須要的光柵 , 而后把 兩者關聯(lián),這些都是在本進程中完畢的,但在?Android 3D emulation 的體系結構中,窗口不能直接創(chuàng)建了,而必需通過發(fā)命令給 host 端 render 讓它來調(diào)用 xgl 的命令來創(chuàng)建

Surface相應 3D Emulation 中的 WindowSurface,?光柵內(nèi)存相應 3D Emulation 中的 ColorBuffer.



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


更新

當APK調(diào)用swapBuffers (就是把已經(jīng)畫的上屏, 這須要各Surface提供圖象內(nèi)存,有SurfaceFlinger做處理并顯示到屏幕上),能夠想象使用opengl的畫圖已經(jīng)結束,如今就是運行一系列內(nèi)存 copy, ColorBuffer 把opengl繪好圖的 image 讀取出來.

elg的eglMakeCurrent參數(shù)提供第一個surface是用來畫東西的,而第二個就是讀取的

public boolean eglMakeCurrent(EGLDisplay display, EGLSurface draw, EGLSurface read, EGLContext context) ;

應用程序畫東西的時候使用的應該是?EGLSurface draw, 這個 Surface是后臺的,看不見,僅僅是為了能成功調(diào)用opengl的進行硬件渲染

如今上屏了,須要曾經(jīng)draw的 surface光柵數(shù)據(jù)讀取回來,當然這是eglMakeCurrent 參數(shù)提供的

讀取的Surface光柵內(nèi)存供SurfaceFlinger操作,最后生成的屏幕圖像在FrameBuffer中,能夠直接上屏



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


轉載于:https://www.cnblogs.com/mengfanrong/p/3774689.html

總結

以上是生活随笔為你收集整理的Android 3D emulation 架构理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。