「 2016年04月 」一覧

Wayland でウィンドウを出す


前回はディスプレイサーバーに接続のみだったため、今回は画面に見えるようにするところまで紹介したいと思います。

プログラム

ウィンドウを出してみるプログラムは以下のようになります。
このコードで真っ黒のウィンドウが表示されますが、終了手段はコンソールで Ctrl+C で閉じることになるので注意してください。

このプログラムの解説は後半で行います。

プログラム解説

コードの流れとしては以下のようになっています。
サーバー、クライアントのプログラムであると言うことを意識すると理解しやすいかもしれません。

  1. コンポジッタに接続
  2. コンポジッタ上の各情報を取得&自分の関数コールバックを登録
  3. 描画用バッファを共有メモリで作成して登録
  4. バッファに描画データを書き込み、wl_surface_commit で登録
  5. wl_display_dispatch でいわゆるイベントループを回す

各Listenerはサーバーであるコンポジッタからの応答を実装する部分となります。

wl_shell 関連は表示している surface に対してのユーザーからの対話部分、すなわちキーボードやマウスの関連を実装するものとなるようです。
今回はこれらを何も処理していないため、まだウィンドウとして完成していない状態です。

これだけのコードがあるのにまだウィンドウとして完成していないあたり、低レベルのインターフェースである実感がありますね。


はじめての Wayland


ぼちぼち Wayland というものが標準で使用可能になっていく気配を感じたので、
Xorg ベースから切り替えが必要かと思って調べてみました。
先日は X11 なしで OpenGL の連載をしていましたが、今度は Wayland を使って OpenGL を使うというゴールに向かって話を進めていきたいと思います。前回はフルスクリーンのみでの動作でしたが今回はウィンドウシステムありでとなります。

Wayland とは

検索してもらうといろいろと情報が出てくると思いますが、
これはディスプレイサーバーのプロトコルであり、Wayland-client というライブラリが存在します。またwayland コンポジッタというものが画面の表示を行います。
そして weston というものが wayland コンポジッタのリファレンス実装となっています。

X-Windowの場合ではサーバ、クライアントは別のPCでも使用可能でしたが、Wayland の場合には同一端末上を想定しています。

実験環境

以下の環境で実験しています。

  • ArchLinux (64bit)
  • VMware Workstation 12 Player
  • weston 1.10

はじめてのWayland通信

まだ何もウィンドウが出せませんが以下のコードで、
ディスプレイサーバーに接続して情報を少し出してみることが可能です。

これを実行すると以下のような結果が出てくると思います。