Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> 安卓省電與加速 >> Android 4.0 硬件加速紋理渲染過程

Android 4.0 硬件加速紋理渲染過程

編輯:安卓省電與加速

網頁的顯示主要分成WebCore渲染,OpenGl紋理渲染(GPU),系統將OpenGl紋理顯示於屏幕上 這三個步驟。           其中第一步是解析網頁最後形成一個PictureSet。第二步是生成每個tile的SkBitmap,並據此由GPU形成OpenGl紋理。最後一步根據OpenGl紋理顯示內容在屏幕上。androidBrowser硬件加速的代碼改動非常大,這裡針對的是4.0的代碼。           本文主要關注每個tile由SkBitmap轉換為OpenGl紋理的過程。本過程是由TransferQueue::tryUpdateQueueWithBitmap函數開始,而在TransferQueue::updateDirtyBaseTiles函數結束。其中前者運行於TexturesGenerator線程,由BaseTile::paintBitmap函數調用而來。而後者運行於UI線程,在每次GLWebViewState::drawGL的時候都會調用,以更新各個tile的紋理。       紋理的渲染過程是由系統來完成的,類TransferQueue管理各個tile的渲染順序並與系統交互。其中有一個SurfaceTexture對象和一個SurfaceTextureClient對象。這兩個對象是android系統中專門用於GPU渲染紋理的,SurfaceTexture相當於服務端而SurfaceTextureClient為客戶端,它們共享一塊顯存數組。SurfaceTexture中還有一個待渲染的顯存隊列(由上述數組的下標組成)。真正的渲染發生在SurfaceTexture::updateTexImage函數。而SurfaceTexture中有諸如dequeueBuffer和queueBuffer之類的函數,用來管理顯存數組和隊列。       TransferQueue::tryUpdateQueueWithBitmap函數中通過ANativeWindow_lock函數最終會調用到SurfaceTexture::dequeueBuffer,取得一塊空閒顯存。然後將SkBitmap的數據以內存拷貝的方式復制過去。然後ANativeWindow_unlockAndPost最終調用到SurfaceTexture::queueBuffer函數,將已有內容的顯存放到待渲染隊列中。       TransferQueue::updateDirtyBaseTiles則調用SurfaceTexture::updateTexImage函數依次從隊列中取出顯存並渲染紋理。每次渲染一個紋理都通過幀緩沖和顯存拷貝的方式(TransferQueue::blitTileFromQueue)復制給每個相應的tile。       這樣,整個過程就結束了。  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved