Direct3D 10.1

Published 30 January 09 02:38 PM | hiroyuk 

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

実装時には以下のように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のサンプルに上記のコードが使われています。

Comments

No Comments
Anonymous comments are disabled

About hiroyuk

マイクロソフト㈱エバンジェリスト。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)、Texturing & Modeling, A Procedural Approach などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。

Search

This Blog

DirectX 情報

Silverlight 情報

Windows 情報

WPF 情報

並列コンピューティング情報

著書

Syndication

Page view tracker