2011-01-23 16 views
1

これは安定版リリースコードではありません。テストするために開発用PCのHWNDからC++アプリケーションで作成されたウィンドウ付きD3D9デバイスを取得する必要があります。オプションのロード。Direct3D9デバイスを作成するための最小限のコード

私は古いD3D8クラスからそれを一緒にハックしようとしていましたが、私はD3DERR_INVALIDCALLを取得しています。

基本的に私は今、これを持っている:

HWND mHWnd = ...; 
    LPDIRECT3D9 mpD3D = Direct3DCreate9(D3D_SDK_VERSION); 

    D3DPRESENT_PARAMETERS md3dpp; 
    ZeroMemory(&md3dpp, sizeof(D3DPRESENT_PARAMETERS)); 
    md3dpp.Windowed     = true; 
    md3dpp.SwapEffect    = D3DSWAPEFFECT_DISCARD; 
    md3dpp.BackBufferCount   = 1; 
    md3dpp.EnableAutoDepthStencil = 0; 
    md3dpp.hDeviceWindow   = mHWnd; 
    md3dpp.BackBufferWidth   = 0; 
    md3dpp.BackBufferHeight   = 0; 
    md3dpp.FullScreen_RefreshRateInHz = 0; 
    md3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
    md3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; 
    md3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; 
    md3dpp.MultiSampleQuality = 0; 

    LPDIRECT3DDEVICE9 mpD3DDevice=0; 
    HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,0,&md3dpp,&mpD3DDevice); 

私はいくつかのD3DPRESENT_PARAMETERSオプションを把握非難するかもしれない - 私は古いプレーンな装置であり、Z-バッファやステンシルやAAのバックバッファを気にしません良い。

いくつかの互換性のないフラグをコピーして貼り付けましたか?

答えて

1

1問題は、いくつかの動作フラグを設定する必要があるということです。デバイスの作成を制御以上オプションの
DWORD
併用[IN]

BehaviorFlags:CreateDevice.上のドキュメントから

。詳細については、「D3DCREATE」を参照してください。

そしてD3DCREATEドキュメントから:

D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING、およびD3DCREATE_SOFTWARE_VERTEXPROCESSINGは相互に排他的なフラグです。 CreateDeviceを呼び出すときに、少なくとも1つのの頂点処理フラグを指定する必要があります。

試してみてください。

HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,D3DCREATE_MIXED_VERTEXPROCESSING,&md3dpp,&mpD3DDevice); 
+0

いやはや!これは、頭脳のないコード貼り付けから来ています。今は期待どおりに動作します。 –

+0

@ジョン:Hehehe、逃すのは簡単:) – Goz

関連する問題