Solaris X Window System 開発ガイド

ビジュアル

1 つの表示デバイスで、1 つ以上の表示フォーマットをサポートできます。X ウィンドウシステムでは、ウィンドウサーバーがサポートする表示フォーマットを「ビジュアル」という形式でクライアントアプリケーションに通知します。ビジュアルとは、表示デバイスがサポートする表示フォーマットを記述したデータ構造体です。

X11 クライアントがウィンドウを作成する場合、そのウィンドウのビジュアルを指定します。ビジュアルは、ウィンドウ内の各ピクセルの表示特性を記述します。つまり、ウィンドウのビジュアルは表示デバイスのビデオハードウェアに対して、ウィンドウのピクセル値を解釈する方法を指示します。

システム内に構成されたディスプレイごとに、1 つずつ X11 スクリーンがあります。スクリーンごとに、サポートされるビジュアルのリストがサーバーによってクライアントアプリケーションにエクスポートされます。このビジュアルリストは、どの表示フォーマットをウィンドウの作成に使用できるかをクライアントアプリケーションに伝えます。

サーバーによって表示スクリーン用にエクスポートされるビジュアルは一定ではなく、スクリーンのデバイスハンドラに依存します。ビジュアルのエクスポートはデバイスハンドラに制御されるので、クライアントアプリケーションは、1、8、24 ビットのように従来のデプスとは異なるデプスを持つビジュアルなど、さまざまなビジュアルを処理できるように準備しなければなりません。デプスが 4、16、および奇数のビジュアルはエクスポートできない可能性があり、クライアントでそれを処理するように準備しなければなりません。

クライアントアプリケーションでは、Xlib ルーチン XGetVisualInfo(3) または XMatchVisualInfo(3) を呼び出して、スクリーン用にサポートされるビジュアルのリストを照会したり、ユーティリティ xdpyinfo(1) を使用してサポートされるビジュアルのリストを照会したりできます。X11 の色とビジュアルの概要については、このマニュアルの「はじめに」に掲載されている X11 のマニュアルを参照してください。

デフォルトビジュアル

X11 スクリーンごとに、スクリーン用にエクスポートされるビジュアルのいずれかがデフォルトビジュアルとして指定されています。デフォルトビジュアルとは、スクリーンのルートウィンドウに割り当てられたビジュアルのことで、ほとんどのアプリケーションではこのビジュアルを使用してウィンドウを作成します。クライアントアプリケーションが起動すると、アプリケーションで別のビジュアルを指定しない限り、そのウィンドウにはデフォルトビジュアルが割り当てられます。

「組み込みデフォルトビジュアル」とは、Solaris X サーバー内でハードコード化されたビジュアルです。スクリーンごとに、そのスクリーンの表示デバイスの特性によって異なるデフォルトビジュアルがあります。openwin(1) の実行時に別のデフォルトビジュアルを指定しない限り、これがデフォルトビジュアルとなります。

ウィンドウサーバーが X11 接続ブロック内で返すデフォルトビジュアルを変更したいことがあります。デフォルトビジュアルでは実行できないクライアントプログラムを特定のビジュアルで実行させる場合などです。たとえば、TrueColor ビジュアルがデフォルトビジュアルとなっている 24 ビットデバイス上では、24 ビットカラーで実行できないアプリケーションを PseudoColor ビジュアルで実行させることができます。

複数デプスデバイスの開発担当者にとっては、デフォルトビジュアルを変更すると、アプリケーションの機能をさまざまな構成でテストできるので便利です。デフォルトビジュアルを変更する方法についての詳細は、xsun(1) のマニュアルページを参照してください。サーバーによってエクスポートされるデフォルトビジュアルとサポートされるビジュアルのリストは、XGetVisualInfo(3) を使用して X11 から検証できます。

複数デプスデバイスのビジュアル

Solaris X サーバーでは、同時に複数ピクセルデプスのウィンドウを表示できるデバイスがサポートされます。これらのデバイスを、「複数デプス」デバイスといいます。このようなデバイスのほとんどがデプスごとにビットプレーングループを持っているため、しばしば「複数プレーングループ (MPG)」デバイスと呼ばれます。

デプスごとに、1 つまたは複数のビジュアルがエクスポートされることがあります。ほとんどの MPG デバイスでは、エクスポートされた任意のビジュアルを使用してウィンドウを作成できます。TrueColor ビジュアルを推奨するアプリケーションの場合、開発担当者は TrueColor ビジュアルが使用可能かどうかを判断する必要があります。これは、PseudoColor がデフォルトビジュアルの場合でも、TrueColor ビジュアルを使用できることがあるからです。

ビジュアルに関するプログラミング上のヒント

この節では、さまざまなビジュアルをサポートするデバイスを対象に X11 アプリケーションのプログラムを作成する際、発生する問題について説明します。

デフォルトビジュアルに関する仮定

X11 クライアントのプログラミングにおいて多い間違いは、デフォルトビジュアルにインデックスクラス (たとえば PseudoColor または StaticColor) があると仮定することです。しかし、デフォルトビジュアルがデバイスによっては 24 ビット TrueColor である可能性もあります。これらのデバイス上で実行する必要があるクライアントについては、そのデフォルトビジュアルの種類に対処できるように準備しておかなければなりません。

よくある誤りを以下に示します。

デバイスがクライアントから要求されたビジュアルをサポートしない場合は、次のエラーメッセージが戻されます。このエラーメッセージのうち、# は要求されたデプス番号を表し、n は要求された表示デバイスを表します。表 A–1 に示すサポートされるビジュアルとデバイスの組み合わせで、このメッセージが戻される場合は、インストールに問題があります。

Error:

cannot provide a default depth #for device

/dev/fbs/n

一般に、各種のデフォルトビジュアルが存在する中でクライアントの移植性を高めるためには、部分的な変更が必要とされます。

境界ピクセルの設定

デフォルトビジュアル以外のビジュアルを使用してウィンドウを作成するときに、アプリケーションがウィンドウ属性構造内で border_pixel 値を設定しなければ、BadMatch エラーが発生します。これは一般的なプログラミングエラーで、デバッグが困難な場合があります。境界ピクセルの設定についての詳細は、XCreateWindow のマニュアルページを参照してください。


注 –

グラフィックスとダブルバッファリングの性能が十分に得られない場合 (加速不足など) は、OpenWindows が root としてインストールされていない可能性があります。