Direct3D 10.1
Direct3D 10.1 は、Windows Vista と Windows 7 が動作するPC上の任意のグラフィックス ハードウェアで、WDDMドライバがなくても、動作します。残念ながら Windows XP では動作しませんが...
Direct3D を使ったことのある開発者であれば、Direct3D #がDirect3D #-1のハードウェアでは動作しない(例えば、Direct3D 9 は Direct3D 8 のハードウェアでは動作しない)ことをご存じでしょう。あるいは Caps に無い機能は動作しませんでした。Direct3D 10.1 は、Direct3D の歴史始まって以来初めて、高速なソフトウェア ラスタライザを持ち、下位互換性を保証します。
Direct3D 10.1には Direct3D 10, Direct3D 9, Software の3種類のドライバがあり、デバイス作成時に選択できます。Direct3D 10, 9 ドライバにはそれぞれハードウェアの機能に対応したフィーチャーレベル(Feature Level 10_1, Feature Level 10_0, Feature Level 9_3, Feature Level 9_2, Feature Level 9_1)があります。
実装時には以下のようにD3D10デバイスを作成します。
static const D3D10_FEATURE_LEVEL1
levelAttempts[] =
{
D3D10_FEATURE_LEVEL_10_1,
D3D10_FEATURE_LEVEL_10_0,
D3D10_FEATURE_LEVEL_9_3,
D3D10_FEATURE_LEVEL_9_2,
D3D10_FEATURE_LEVEL_9_1,
};
for (UINT level = 0;
level < ARRAY_SIZE(levelAttempts);
level++)
{
hr = D3D10CreateDevice1(
pAdapter,
driverType,
softwareRasterizer,
flags,
levelAttempts[level],
D3D10_1_SDK_VERSION,
&spDevice
);
if (SUCCEEDED(hr))
{
if (DoesBGRASupportExist(spDevice))
{
*ppDevice = spDevice.Detach();
break;
}
hr = E_FAIL;
}
}
WDDMドライバが動作するDirect3D 10 あるいは Direct3D 9 ハードウェアであれば、これで Direct3D 10.1 が動作する Direct3D 10 デバイスが作成できます。WDDMでない、あるいはDirect3D 9以前のハードウェアの場合(たとえばサーバーなど)には、さらに以下のコードを追加し WARPドライバを使ってソフトウェアで動作する Direct3D 10デバイスを作成します。
if !(SUCCEEDED(hr))
{
HANDLE hWarp =
LoadLibrary(L”D3D10WARP.dll");
if(NULL == hWarp)
<error>
hr = D3D10CreateDevice1(
NULL,
D3D10_DRIVER_TYPE_SOFTWARE,
hWarp,
0,
D3D10_FEATURE_LEVEL_10_1,
D3D10_1_SDK_VERSION,
&pDevice
);
}
Windows 7 SDK (Beta) をダウンロードすると、Direct2DやDirectWriteのサンプルに上記のコードが使われています。