次の方法で共有


ガンマ コントロール (Direct3D 9)

ガンマ コントロールを使用すると、サーフェス自体のコンテンツに影響を与えることなく、サーフェスのコンテンツの表示方法を変更できます。 これらのコントロールは、Direct3D がサーフェスを離れ、画面にレンダリングされる前にデータに適用される非常に単純なフィルターと考えてください。

ガンマ コントロールはスワップ チェーンのプロパティです。 ガンマ コントロールを使用すると、サーフェスの赤、緑、青の各レベルがシステムに表示される実際のレベルにどのようにマップされるかを動的に変更できます。 ガンマ レベルを設定すると、ユーザーのキャラクターが撮影されたときに赤、キャラクターが新しい項目を取得したときに緑色などの色が点滅し、フレーム バッファーに新しいイメージをコピーせずに効果を得ることができます。 または、カラー レベルを調整して、バック バッファー内の画像に色バイアスを適用することもできます。

Direct3D 9 にはデバイスのプロパティとして 1 つのスワップ チェーンがあるため、デバイスごとに少なくとも 1 つのスワップ チェーン (暗黙的なスワップ チェーン) が常に存在します。 ガンマ ランプはスワップ チェーンのプロパティであるため、スワップ チェーンをウィンドウ化するときにガンマ ランプを適用できます。 ガンマ ランプはすぐに有効になります。 垂直同期操作を待機していません。

SetGammaRamp メソッドと GetGammaRamp メソッドを使用すると、ディスプレイ用のデジタルアナログ コンバーター (DAC) に送信される前に、ピクセルの赤、緑、青の色コンポーネントに影響を与えるランプ レベルをサーフェスから操作できます。

ガンマ ランプ レベル

Direct3D では、ガンマ ランプという用語は、フレーム バッファー内のすべてのピクセルの特定の色コンポーネント (赤、緑、青) のレベルを、DAC が表示用に受信する新しいレベルにマップする値のセットを表します。 再マップは、カラー コンポーネントごとに 1 つずつ、3 つの参照テーブルを使用して実行されます。

そのしくみ: Direct3D はフレーム バッファーからピクセルを取得し、個々の赤、緑、青の色コンポーネントを評価します。 各コンポーネントは、0 ~ 65535 の値で表されます。 Direct3D は元の値を受け取り、それを使用して 256 要素配列 (ランプ) のインデックスを作成します。各要素には、元の要素を置き換える値が含まれます。 Direct3D は、フレーム バッファー内の各ピクセルの各色コンポーネントに対してこの検索と置換のプロセスを実行し、画面上のすべてのピクセルの最終的な色を変更します。

次の 2 つのグラフに示すように、傾斜路の値をグラフ化して視覚化すると便利です。 左側のグラフは、色をまったく変更しないランプを示しています。 右のグラフは、適用先の色成分に負のバイアスを与えるランプを示しています。

ガンマ ランプ値のグラフ

左側のグラフの配列要素には、インデックスと同じ値が含まれます。インデックス 0 の要素では 0、インデックス 255 では 65535 です。 この種類のランプは、入力値が表示される前に変更されないため、既定値です。 右側のグラフは、より多くのバリエーションを提供します。そのランプには、最初の要素の 0 から最後の要素の 32768 までの範囲の値が含まれます。値の範囲は一様です。 このランプを使用するカラー コンポーネントがディスプレイにミュート状態で表示されます。 線形グラフの使用に限定されません。必要に応じて、アプリケーションで任意のマッピングを割り当てることができる場合は 。 エントリをすべてのゼロに設定して、カラー コンポーネントをディスプレイから完全に削除することもできます。

ガンマ ランプ レベルの設定と取得

ガンマ ランプ レベルは、Direct3D がフレーム バッファーカラーコンポーネントを表示される新しいレベルにマップするために使用するテーブルを効果的に検索します。 SetGammaRamp メソッドと GetGammaRamp メソッドを呼び出すことで、プライマリ サーフェスのランプ レベルを設定および取得できます。 SetGammaRamp は 2 つのパラメーターを受け取り、 GetGammaRamp は 1 つのパラメーターを受け入れます。 SetGammaRamp の場合、最初のパラメーターは D3DSGR_CALIBRATE または D3DSGR_NO_CALIBRATIONです。 2 番目のパラメーター pRamp は、 D3DGAMMARAMP 構造体へのポインターです。 D3DGAMMARAMP 構造体には、256 要素の WORD の配列が 3 つ含まれており、それぞれ 1 つの配列に赤、緑、青のガンマ ランプが含まれています。 GetGammaRamp には、現在のガンマ ランプで塗りつぶされる D3DGAMMARAMP 型へのポインターを受け取る 1 つのパラメーターがあります。

SetGammaRamp の最初のパラメーターにD3DSGR_CALIBRATE値を含めて、新しいガンマ レベルを設定するときにキャリブレーターを呼び出すことができます。 ガンマ ランプを調整すると、処理オーバーヘッドが発生し、頻繁に使用しないでください。 校正されたガンマ ランプを設定すると、ディスプレイ アダプターとモニターに関係なく、一貫性のある絶対ガンマ値がユーザーに提供されます。

すべてのシステムでガンマキャリブレーションがサポートされているわけではありません。 ガンマ調整がサポートされているかどうかを判断するには、 GetDeviceCaps を呼び出し、メソッドが戻った後、関連付けられている D3DCAPS9 構造体の Caps2 メンバーを調べます。 D3DCAPS2_CANCALIBRATEGAMMA機能フラグが存在する場合は、ガンマ調整がサポートされます。

新しい傾斜路レベルを設定する場合、配列で設定したレベルは、アプリケーションが全画面表示の排他モードの場合にのみ使用されることに注意してください。 アプリケーションが通常モードに変わるたびにランプ レベルが確保され、アプリケーションが全画面表示モードに復帰したときに再度有効になります。

デバイスがスワップ チェーンの現在のプレゼンテーション モード (全画面表示またはウィンドウ表示) でガンマ ランプをサポートしていない場合、エラー値は返されません。 アプリケーションは、D3DCAPS9 型の Caps2 メンバーのD3DCAPS2_FULLSCREENGAMMAビットとD3DCAPS2_CANCALIBRATEGAMMA機能ビットをチェックして、デバイスの機能と、校正器がインストールされているかどうかを判断できます。

Direct3D サーフェス