「ディスプレイサーバ」の版間の差分
38行目: | 38行目: | ||
=== SurfaceFlinger === |
=== SurfaceFlinger === |
||
[[SurfaceFlinger]]は[[Android]]用に[[Google]]によって開発されたディスプレイサーバーです。 |
[[SurfaceFlinger]]は[[Android (オペレーティングシステム)|Android]]用に[[Google]]によって開発されたディスプレイサーバーです。 |
||
Androidのコンポーネントは、全て"surface"にレンダリングされます。"surface"は、アプリケーションによって生成され、SurfaceFlingerによって管理されるキューにいれられます。<ref>{{cite web|url=https://developer.android.com/reference/android/view/Surface.html|title=Android Developer: Surface|accessdate=2020-03-08|publisher=}}</ref><ref>{{cite web|url=https://source.android.com/devices/graphics/arch-sf-hwc.html|title=Android Developer: SurfaceFlinger and Hardware Composer|accessdate=2020-03-08|publisher=}}</ref> |
Androidのコンポーネントは、全て"surface"にレンダリングされます。"surface"は、アプリケーションによって生成され、SurfaceFlingerによって管理されるキューにいれられます。<ref>{{cite web|url=https://developer.android.com/reference/android/view/Surface.html|title=Android Developer: Surface|accessdate=2020-03-08|publisher=}}</ref><ref>{{cite web|url=https://source.android.com/devices/graphics/arch-sf-hwc.html|title=Android Developer: SurfaceFlinger and Hardware Composer|accessdate=2020-03-08|publisher=}}</ref> |
2020年9月6日 (日) 09:54時点における版
この項目「ディスプレイサーバ」は翻訳されたばかりのものです。不自然あるいは曖昧な表現などが含まれる可能性があり、このままでは読みづらいかもしれません。(原文:Display Server) 修正、加筆に協力し、現在の表現をより自然な表現にして下さる方を求めています。ノートページや履歴も参照してください。(2019年1月) |
ディスプレイサーバは、主にクライアントの入出力とオペレーティング・システム、ハードウェアとを調整するプログラムです。 ディスプレイサーバーはクライアントと 通信プロトコル(ネットワークケーブルなど)を介して通信します。
ディスプレーサーバーは、GUI、特にウィンドウシステムの重要なコンポーネントの一つです。
利用可能なプロトコル
X11
X.Org Serverは、通常、LinuxやBSDなどのUnixベースのカーネルの上で実行されるディスプレイサーバーの一つです。 X.Org Serverは、ユーザーの入力やクライアントからデータを受け取り、処理・合成し、LinuxだとDRMやgem、KMSなどのカーネルコンポーネントに出力します。 カーネルコンポーネントは受け取ったデータをフレームバッファに書き込み、画面に表示されます。 XはGLXに依存します。
X11の実装例の一つとして、 X Windowシステムがあります。実際に使われているものとしては、X.Org サーバーおよび Xlib、XCBなどがあります。 X.Org サーバはディスプレイサーバですが、実際の実装は、MutterやKwinといったコンポジットウィンドウマネージャに依存しています。
有名なX11プロトコルを実装したディスプレイサーバーの例としては、 X.Org サーバーや XFree86、XQuartz、Cygwin/Xなどがあります。クライアント向けのライブラリとしてはXlibやXCBがあります。
xevと呼ばれるUnixコマンドは、ウィンドウを作成し、ウィンドウに発生したイベントの情報(リサイズやキーボードからの入力、マウスクリックなど)を送信するようディスプレイサーバーに要求し、受け取った情報をコンソールに出力します。
Wayland
Waylandのプロトコルを実装するディスプレイサーバーは、Waylandコンポジットと呼ばれます。 Waylandコンポジットは、クライアントに対する入出力を処理します。X11とは違い、コンポジットも担当します。Waylandを実装したものとしては、 WestonやMutter、Kwin、Enlightmentなどがあります。
Waylandコンポジットは、Waylandディスプレイサーバープロトコルを使用してクライアントと通信します。このプロトコルは、EGLレンダリングAPIのフレームバッファを利用し、クライアントが直接データーを出力できるように定義されています。また、ディスプレイサーバーは、どのウィンドウが最上部に位置するか、つまりユーザーが何を見えるのかを判断し、ディスプレイに表示します。また、evdevからクライアントへの情報の伝達にも責任を負います。
WaylandはFedoraなどいくつかのLinuxディストリビューションで採用されています。[1]また、Waylandはモバイルにも適しており、TizenやSalifish OSといったスマートフォンやタブレット向けのプロジェクトでも採用されています。
Waylandの実装はMITライセンスで提供されているlibwayland-clientとlibwayland-serverを使うことで使用可能です。
また、WaylandをChrome OSに実装するプロジェクトが進行中です。[2]
Mir
Mirは、Ubuntuのディスプレイサーバーに採用されることを目的にCanonicalによって開発されましたが、2017年にUbuntuのディスプレイサーバーはWaylandに変更されました。Mirは、X11やWaylandに使われているものとは異なる、独自のMirディスプレイサーバープロトコルを使用しますが、X11プロトコルもサポートします。[3]
Mirの実装は、GPLv3でライセンスされたlibmir-serverとlibmir-clientのもとで利用することができます。
SurfaceFlinger
SurfaceFlingerはAndroid用にGoogleによって開発されたディスプレイサーバーです。
Androidのコンポーネントは、全て"surface"にレンダリングされます。"surface"は、アプリケーションによって生成され、SurfaceFlingerによって管理されるキューにいれられます。[4][5]
また、Android特有のものとして、デバイスのメモリの割当や仲裁、ファイル記述子の同期といったメモリ管理を行う"Gralloc"があります。Grallocは、GBMやNvidiaのEGLStreamsなどと競合します。Grallocのハードウェア抽象化レイヤ(HAL)は、"surface"の基礎となるバッファを割り当てるために使用されます。
Androidでコンポジットを行うとき、SurfacesはSurfaceFlingerに送られ、OpenGL ESを使用して合成が行われます。
HWCはAndroid3.0にて導入され、開発が続いています。HWCの主要な目的は、 ハードウェアを用いた合成時の効率を上げることです。HALの実装は各端末により異なり、通常はOEMが担当します。
Quartz
Apple社のmacOSの描画エンジンです。Quartzは、ディスプレイサーバーの機能とウィンドウシステム内のウィンドウマネージャの機能を実装しています。
Desktop Window Manager(DWM)
Desktop Window Managerは、Windows Vista以降のMicrosoft Windowsに導入されました。GUIの描画にハードウェアアクセラレーションを使用します。DWMは、"Windows Aero"の機能である透明化や、3Dのウィンドウ切り替えなどを行います。 DWMはWindows Server2008でも使用可能ですが、"Desktop Experience"を有効にし、互換性のあるグラフィックドライバをインストールする必要があります。
脚注
- ^ “Why Wayland Anyway?”. Goings On. Matthias Clasen. 2016年6月17日閲覧。
- ^ “Ozone Overview”. 2017年8月20日閲覧。
- ^ ThomasVo5 (2013年3月4日). “[Updated Mir – An outpost envisioned as a new home]”. tvoss@work. 2017年8月5日閲覧。
- ^ “Android Developer: Surface”. 2020年3月8日閲覧。
- ^ “Android Developer: SurfaceFlinger and Hardware Composer”. 2020年3月8日閲覧。