2012年1月12日木曜日

IDirect3D9::GetDeviceCaps

アダプタに対して,指定した種別のデバイスの情報を取得する.ただ,取得できる情報が多すぎるので表示機能ではなく,ブレイクポイントをはるためだけの命令を挟む.そこにブレイクポイントをはって,後はデバッガで中身を見る.D3DCAPS9の中はもうちょっとじっくりドキュメントを読まないと使えなさそう.

#include <sdkddkver.h>

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

#include <tchar.h>
#include <sstream>
typedef std::basic_ostringstream<TCHAR> tostringstream;

#include <d3d9.h>

#include <memory>

template <typename T>
struct release_deleter {
    typedef T * pointer;

    void operator()(T * p) const
    {
        p->Release();
    }
};

typedef std::unique_ptr<IDirect3D9, release_deleter<IDirect3D9> > d3d_ptr;

int APIENTRY _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    // IDirect3D9オブジェクトの生成
    d3d_ptr pD3D(Direct3DCreate9(D3D_SDK_VERSION));

    // エラーチェック
    if(pD3D == NULL){
        MessageBox(
            NULL,
            TEXT("IDirect3D9のオブジェクトを生成できませんでした."),
            TEXT("失敗"),
            MB_OK
        );
        return -1;
    }

    UINT n = pD3D->GetAdapterCount();
    for(UINT i = 0; i < n; ++i){
        D3DCAPS9 caps;
        pD3D->GetDeviceCaps(i, D3DDEVTYPE_HAL, &caps);
        caps.AdapterOrdinal += 1; // ブレイクポイント用
        pD3D->GetDeviceCaps(i, D3DDEVTYPE_REF, &caps);
        caps.AdapterOrdinal += 1; // ブレイクポイント用
    }
   
    return 0;
}

0 件のコメント:

コメントを投稿