0

私がこれまでに知っているように、surfaceflinger プロバイダーは APP にサーフェスを表示してレンダリングし、すべてのサーフェスを最終画面に合成します。(間違いがあればThxで指摘してください。)

最初の質問: surfaceflinger によって作成されたサーフェスは、すべてのプロセスで使用できるグローバルに利用可能ですか? (サーフェスのメモリは GPU メモリにありますか?)

私がググったように、プロセス間でopenGLコンテキストを共有することはできません(ここでは、APPプロセスとsurfaceflingerプロセスを意味します)。サーフェスで使用される GPU メモリについてはどうかわかりません。

私の最初の質問に対する答えが「はい」の場合、APP がサーフェスにレンダリングするときに、サーフェスフリンガーと共有する openGL リソースはありますか? そして、表面の記憶を含むこれらの破片はどのように機能したのでしょうか?

4

1 に答える 1

0

SurfaceAndroidと EGLには違いがありSurfaceます。それらは密接に関連していますが、同じものではありません。

などのメソッドで作成された EGL サーフェスはeglCreateWindowSurface()、EGL コンテキストに関連付けて、レンダリングのターゲットとして使用できます。プロセス間で共有することはできません。

Androidサーフェスは、BufferQueue オブジェクトの単なるラッパーであり、システム内でグラフィック バッファーを移動する方法を提供します。アプリがレンダリングされるバッファーは、アプリと SurfaceFlinger の間で渡すことができますが、EGL 状態は渡されません。SurfaceFlinger が取得するのはすべて完成品です。

このシステムについては、グラフィックス アーキテクチャ ドキュメントで詳細に説明されています。

于 2015-04-28T05:17:44.170 に答える