Androidグラフィックアーキテクチャ



Android Graphics Architecture

基本概念:BufferQueue:グラフィックデータ生成モジュールと受信バッファバッファリングデータレンダリングモジュールは、さらに処理または接続されます。バッファメモリの割り当ては、HALインターフェイスによるメモリアロケータgrallocによって実装されます。 SurfaceFlinger:複数のソースからバッファリングされたデータを受信すると、結合されてディスプレイデバイスに送信されます。プロデューサー側はアプリによってBinderWindowManagerに送信され、データはSurfaceFlingerに送信されます。 vsync信号が到着すると、SurfaceFlingerはそれをトラバースして、新しいデータを取得するための新しいデータがある場合、または古いデータを続行する場合に、新しいバッファーレイヤーデータを見つけます。データをHALにアセンブルする方法をとるすべてのデータバッファを収集した後。 Hardware Composer(HAL)は、使用可能なハードウェアに応じて、バッファーを組み立てる最も効率的な方法を決定します。 Surface:消費SurfaceFlingerバッファキューを生成します。サーフェスレンダリング時間になると、バッファは最終的な消費者向けディスプレイデバイスに送信されます。 SurfaceHolder:SurfaceHolderに関連するAPIサーフェスのサイズと形式が提供される、SurfaceHolderに関連するすべての関連操作のビュー。 SurfaceViewには、Surfaceとビューが含まれています。 SurfaceView SurfaceFlingerコンテンツは結合され、レンダリングは別のスレッドによって実行されます。 SurfaceTextureには、SurfaceテクスチャとGLESテクスチャが含まれています。彼らはBufferQueueを作成しました。新しいバッファー、通知アプリ、アプリへのプロデューサーは、バッファーの前に保留を解除し、バッファーキューから新しいバッファーを取得してからEGL呼び出しを発行し、バッファーがGLESを外部テクスチャとして提供できるようにします。 TextureViewビューとSurfacTextureを一緒に表示します。 TextureViewは、コールバックと新しいデータバッファーへのアクセスに応答します。更新の内容により、他の要素のビューが再描画されます。つまりTextureViewはUIレイヤーと一緒に描画されます。

生成されたサーフェスデータ--->データアセンブリSurfaceFlinger->参照されたレンダリングモジュールの表示

表面の質感:
新しいデータが追加されますBufferQueue->コールバックonFrameAvailable()を生成->保持されているデータのリリース前にupdateTexImage()を呼び出し、キューから新しいデータにアクセスし、GLESoesテクスチャのバッファーとして新しく利用可能になったものにEGL呼び出しを発行します使用-> SurfaceViewビデオ表示画面外部テクスチャ(GL_TEXTURE_EXTERNAL_OES)とGL_TEXTURE_2Dは同じではありません。