Sun フレームバッファー使用の手引き

Creator の画像表示形式

Creator アクセラレータの出荷時のデフォルト表示形式は、8 ビット疑似カラーです。他のデフォルトを設定するには、Xsun(1) の defdepth および defclass オプション、または ffbconfig(1m) の -defoverlay および -deflinear オプションを使用してください。


注 -

Creator アクセラレータの別名は FFB (Fast Frame Buffer) です。このコード名は、Creator ソフトウェアのパッケージ名、ロード可能なデバイスのパイプラインモジュール名、設定プログラム名、デバイスのマニュアルページ名などに使用されています。


OpenWindows を起動する際に、通常の OpenWindows のコマンド行オプションを使用して、デフォルトの表示形式を変更することができます。使用可能な表示形式は、すべてデフォルトとして選択することができます。openwin defdepth 24 オプション (Xsun(1) を参照) を使用して 24 ビットトゥルーカラーをデフォルトに設定した場合には、カラーマップのフラッシュ現象が減少します。

画像表示形式のリスト

Creator アクセラレータによって、X11 の画面の画像表示形式リスト上の 11 種類の表示形式が使用可能となります。画像表示形式は、XGetVisualInfo(3) または XMatchVisualInfo(3) を使用して照会することができます。また、表示形式のリニア性 (線形性) については、XSolarisGetVisualGamma(3) によって照会することができます。

以下に使用可能な 11 種類の表示形式を示します。


注 -

上記の画像表示形式において、特にリニア画像に設定されていない場合は、ガンマ補正されていない非リニア画像となります。また 8 ビットの画像は、特にオーバーレイに指定されていない場合には、Creator アクセラレータのアンダーレイのプレーングループとなります。24 ビットの画像は、常にアンダーレイとなります。


図 3-1 に、Creator アクセラレータの画像の、フレームバッファー内のピクセル記憶装置(プレーングループ)に対する関連を示します。X、B、G、R は、ピクセルのデータが格納される 4 種類の 8 ビットチャネルを示します。図では、拡張オーバーレイが無効になっている Creator シリーズ 1、2、3 用のピクセル領域を示しています。

B、G、R チャネルは、8 ビットのピクセルデータ(赤のチャネルだけ)と、24 ビットのピクセルデータ(3 種類のチャネルを使用)のどちらも格納することができます。R チャネルは、7 種類の異なる画像 (8R 画像)をウィンドウに格納します。BGR チャネルは、ウィンドウに 3 種類の異なる画像(24 ビットの画像)を格納します。X チャネルは、8X の疑似カラーの 1 種類だけを格納します。

図 3-1 Creator アクセラレータの 11 種類の画像表示形式

Graphic

アンダーレイ画像のカラーマップのサイズは 256 です。Creator シリーズ 1 および 2 では オーバーレイ画像のカラーマップのサイズは 256 - maxwids です。 Creator シリーズ 3 は、256 色フルカラーオーバーレイを使用するか、256 - maxwids 色のシリーズ 1 または 2 との互換モードで動作するように設定できます。

オーバーレイとアンダーレイの構造

アンダーレイの 8 ビット疑似カラー画像は、ピクセルがフレームバッファーの赤のチャネルに格納されるため、8R 画像と呼ばれます。また、オーバーレイの 8 ビットの疑似カラーは X チャネルに格納されるため、8X 画像と呼ばれます。

オーバーレイ画像のウィンドウ上のピクセルは、アンダーレイ画像のウィンドウ上のピクセルに影響しません。ただし、アンダーレイ画像のウィンドウ上のピクセルは、オーバーレイ画像のウィンドウ上のピクセルに影響します。これは、アンダーレイウィンドウが BGR チャネル (あるいは R チャネルだけ) に依存するカラーデータであるのに、X チャネル上に WID 情報も持っているためです。x11 expose event (障害) の発生の原因となります。

オーバーレイウィンドウがアンダーレイウィンドウに遮断されている場合、アンダーレイデータの WID 部分によってオーバーレイウィンドウのカラーデータが破壊されてしまいます。アンダーレイウィンドウが再び取り除かれると、x11 expose event がオーバーレイウィンドウの破壊された部分に送り出されます。これは、互いに干渉しないアンダーレイとオーバーレイを備えた ZX アクセラレータとは異なります。Creator アクセラレータの 8 ビットのアンダーレイのウィンドウ上のピクセルは、24 ビットのアンダーレイのウィンドウ上のピクセルに影響します。

Creator アクセラレータは、X チャネルアーキテクチャーに従います。このアーキテクチャーでは、8X プレーングループ表示に使用されていない色のピクセル値とコードを、アンダーレイ画像のピクセル表示を操作するウィンドウ ID として使用します。

Creator 3D シリーズ 3 には、ZX アクセラレータと同様の非干渉型のオーバーレイとアンダーレイを持つ拡張オーバーレイモードが備えられています。このモードが有効になると、WID プレーングループは X またはオーバーレイチャネルを共有しなくなるため、x11 expose event (障害) は発生しなくなります。

maxwids とは、オーバーレイのピクセル値をハードウェアウィンドウ ID として、どの程度使用するかを特定する ffbconfig(1M) 設定オプションです。詳細は、「ハードウェアのウィンドウ ID」を参照してください。maxwids の最小値は 1、デフォルト値は 32 です。オーバーレイ画像は、通常のカラーマップのエントリ数が 256 より少ないため、部分画像となります。この画像のカラーマップに、クライアントが指定されたカラーマップエントリの数以上のピクセル値で描画すると、エラーは発生しませんが、表示された色の定義はされません。

SX アクセラレータとの比較

Creator アクセラレータの画像表示アーキテクチャーは、SX アクセラレータのディスプレイアダプタである CG14 と類似しています。CG14 もまた、8 ビットまたは 24 ビットのアンダーレイ画像と単一 8 ビット疑似カラーのオーバーレイ画像を備えた、X チャネルアーキテクチャーのディスプレイアダプタです。Creator アクセラレータの画像表示アーキテクチャーと CG14 には、以下の 2 つの大きな違いがあります。

ガンマ補正

Creator アクセラレータには、ガンマ補正ありの画像表示形式と、ガンマ補正なしの画像表示形式があります。ガンマ補正された画像は、リニア画像と呼ばれます。以下にリニア画像の種類を示します。

リニア画像と非リニア画像は、どちらも X11 画面の画像リスト上に存し、XGetVisualInfo によって照会することができます。リニア性は、X11 コアプロトコルで認識される画像上の特性ではないため、相対する非リニア画像からリニア画像を認識するために、拡張ルーチン XSolarisGetVisualGamma(1) が呼び出されます。詳細は、XSolarisGetVisualGamma(1) のマニュアルページを参照してください。

CG14 は、Creator アクセラレータのようなリニア画像を備えていません。CG14 は、特別なガンマ LUT を使用して、画面全体に影響するガンマ補正を行います。したがって、CG14 では、ガンマ補正された 24 ビットのウィンドウと補正されていないウィンドウを、画面上に同時に開くことはできません。Creator の画面上では、両方のウィンドウを同時に開くことが可能です。

単一のカラー LUT

CG14 では、ハードウェアのカラー LUT を 2 つ備えています。1 つは 8 ビットのアンダーレイ画像で使用され、もう 1 つは 8 ビットのオーバーレイ画像で使用されます。一方、Creator アクセラレータシリーズ 1 と 2 では、ハードウェアのカラー LUT を 1 つだけ備えています。これは、2 つのウィンドウのカラーマップが、同じピクセルの位置で同じ色を持っていない場合には、Creator アクセラレータ上のオーバーレイウィンドウが、8 ビットのアンダーレイウィンドウに対し、カラーマップのフラッシュ現象を起こすことを意味します。Creator シリーズ 3 には、Xserver が割り当てや共有を管理する 4 種類のカラー LUT があります。

Creator アクセラレータ上にあるカラー LUT が 1 つだけの場合には、透過オーバーレイのアプリケーション上でオーバーレイとアンダーレイが色を共有するようにプログラミングしてください。オーバーレイ画像は、アンダーレイ画像とは常に異なるため、透過オーバーレイのアプリケーションは最低 2 種類のカラーマップを必要とし、その 1 つはオーバーレイに、もう 1 つはアンダーレイに割り当てられます。オーバーレイウィンドウは、通常アンダーレイウィンドウの子ウィンドウであり、各ピクセルのレイヤー間の関係は、アプリケーションによって管理されます。このような状態で、マウスポインタがアンダーレイとオーバーレイの境界の内側にある場合には、オーバーレイのカラーマップはハードウェアのカラー LUT にインストールされますが、アンダーレイのカラーマップはインストールされません。オーバーレイのカラーマップを通して表示された際に、アンダーレイのピクセルが正しい色を表示しているかどうかを確認してください。アンダーレイとオーバーレイ両方のカラーマップの同じ位置にそれぞれ色を割り当てることによって、確認することができます。

Creator と ZX アクセラレータとの比較

ZX アクセラレータと異なり、Creator アクセラレータの出荷時のデフォルト画像はオーバーレイではありません。ZX アクセラレータでは、デフォルト画像は 8 ビットのオーバーレイの疑似カラーとなりますが、Creator アクセラレータでは、SX アクセラレータと同様に、8 ビットのアンダーレイの疑似カラーとなります。アンダーレイのウィンドウで影響を受けないポップアップウィンドウを持つアプリケーションを作成する場合には、単純にデフォルトの画像を使用することはできません。そのためアプリケーションは、影響を受けないオーバーレイ画像を検索するために、XSolarisOvlSelectBestOverlay を呼び出す必要があります。詳細は、X ウィンドウシステムのオーバーレイについて記述している、Solaris のマニュアルを参照してください。


注 -

XSolarisOvlSelectBestOverlay は、Solaris 2.4 リリースから提供されています。Solaris 2.4 と Solaris 2.4 以前のオペレーティングシステム上でアプリケーションを実行する場合には、この関数の外部参照は、#pragma weak を定義します。これにより、プログラムはシンボルの値を確認することができます。プログラムが Solaris 2.3 またはそれ以前のバージョンで実行されている場合は、シンボルの値が 0 になります。この場合には、オーバーレイ画像を検索するために XSolarisOvlSelectBestOverlay を呼び出すことはできません。そのかわりに、アプリケーションは、XGetVisualInfo を使用して、256 以下のカラーマップのエントリを持つ最初の 8 ビット画像を検索することができます。ただし、この方法は Creator アクセラレータ特有のものであり、Creator アクセラレータを使用するためのコードは、他のデバイスへの移植性があるとは限りません。


ウィンドウマネージャーについての注意事項

Creator アクセラレータのデフォルトの画像がオーバーレイでないため、オーバーレイのウィンドウがオーバーライドリダイレクトでない場合には、問題が発生することがあります (たとえば、ウィンドウマネージャの装飾ウィンドウで囲まれる場合など)。Solaris でサポートしている olwmmwmdtwm などのウィンドウマネージャーでは、ツールキットのサブウィンドウが、デフォルト画像の装飾ウィンドウで囲まれています。これは、アプリケーション内で、ポップアップウィンドウにデフォルト以外の画像が指定されている場合も同様です。

たとえば、デフォルトの画像が 8 ビットのアンダーレイの疑似カラーの場合に、アプリケーションがツールキットに対し、ポップアップウィンドウを 8 ビットのオーバーレイの疑似カラー画像に置くように指定しても、ウィンドウマネージャはそのポップアップウィンドウを、8 ビットのアンダーレイの装飾ウィンドウで囲みます。このように、ポップアップウィンドウは、他のアンダーレイのウィンドウに悪影響を与えます。

この問題を回避する方法を以下に示します。