DirectX C++ Windowsアプリケーションで10ビットカラーのサポートを追加したいとします。 DXGI_FORMAT_R10G10B10A2_UNORMを使用して、RGBチャンネルあたり10ビット(RGBの合計30ビット)について話しています。ディスプレイ上の10ビットカラーサポートを検出する
システムがそれをサポートしているかどうかを検出する方法は、ディスプレイモニタが実際にこのモードをサポートしているかどうかです。
例えば、私は、表示モードのリストを列挙していますので:
IDXGIOutput *output=null; for(Int i=0; OK(adapter->EnumOutputs(i, &output)); i++)
{
DXGI_FORMAT mode=DXGI_FORMAT_R10G10B10A2_UNORM;
UInt descs_elms=0; output->GetDisplayModeList(mode, 0, &descs_elms, null); // get number of mode descs
RELEASE(output);
}
そして、私のノートパソコンのディスプレイが10ビットをサポートしていないにもかかわらず、私はまだ解像度のリストを含む、有効な結果を取得。 後で10ビットのフルスクリーンスワップチェーンを作成でき、すべて正常に動作します。
しかし、モニターが10ビットか8ビットかわからないので、10ビットをシミュレートするためにいくつかのディザリングを手動で適用する必要があるかどうかはわかりません。
ディスプレイが実際に10ビット=ディザリングが必要ない場合、または8ビット=であればカスタムディザリングシェーダを適用します。
私は古典的なWin32/WinAPIと新しいユニバーサルWindowsプラットフォームの両方で作業しています(したがって、両方のプラットフォームのソリューションが必要です)。モニターが本当には、10ビット・モードをサポートしているかどうかを考え出す
は
こんにちはチャック、ご返信いただき、誠にありがとうございます。これは私が現在やっていることです。現在のところ、これはユーザー設定を持つことで最高のソリューションです。 しかし、これにはいくつかの欠点があります。ユーザーには、これを自動検出するのではなく、何かを設定する必要があるという不便さがあります。また、ユーザーが自分のモニターがサポートしているものを単に知ることができず、悪化する品質。 例えば、彼は10ビットの精度を選択し、8ビットよりも優れた品質を得ると考えています。 – Esenthel
実際には10ビットの設定では、ディザシェーダは無効になり、モニタが8ビットの場合、ディザリングシェイダなしではさらに悪くなります。 そのユーザー設定では、このオプションが何をするのか、本当に明確にする必要があります。 DirectXが実際にサポートされているものとされていないものを検出するためのオプションを提供した場合、最も良い方法です。私はその新しい機能が将来追加されることを要求したいと思います。 BTW。これは私のゲームエンジンです、今、数年間の開発http://www.esenthel.com/ ありがとう – Esenthel