Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android GUI系統之SurfaceFlinger(3)

Android GUI系統之SurfaceFlinger(3)

編輯:Android開發教程

Android中的本地窗口FramebufferNativewindow 

1.1 Android中的本地窗口

在OpenGL的學習過程中,我們不斷提及“本地窗口”(NativeWindow)這一概念。那麼對於Android系統來說,它是如何將OpenGL ES本地化的呢,或者說,它提供了什麼樣的本地窗口?

根據整個Android系統的GUI設計理念,我們不難猜想到至少需要兩種本地窗口:

面向管理者(SurfaceFlinger)

既然SurfaceFlinger扮演了系統中所有UI界面的管理者,那麼它無可厚非地需要直接或間接地持有“本地窗口”。從前一小節我們已經知道,這個窗口就是FramebufferNativeWindow

面向應用程序

我們先給出答案,這類窗口是SurfaceTextureClient

有不少讀者可能會覺得困惑,為什麼需要兩種窗口,同一個系統不是應該只有一種窗口嗎?比如這樣子:

圖 11?4理想的窗口系統

這個圖中,由Window來管理Framebuffer。我們打個比方來說,OpenGL就像是一台通用的打印機一樣,只要輸入正確的指令,它就能按照要求輸出結果;而Window則是“紙”,它是用來承載OpenGL的輸出結果的。OpenGL並不介意Window是A4紙或者是A6,甚至是塑料紙也沒有關系,對它來說都只是“本地窗口”。

理解了這個圖後,我們再來思考下,這樣的模型是否能符合Android的要求?假如整個系統僅有一個需要顯示UI的程序,我們有理由相信它是可以勝任的。但是如果有N個UI程序的情況呢?Framebuffer顯然只有一個,不可能讓各個應用程序自己單獨管理。

這樣子問題就來了,該如何改進呢?下面這個方法如何?

圖 11?5 改進的窗口系統

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