1

これは安定したリリース コード用ではありません。何かをテストするために、開発用 PC の HWND から C++ アプリで作成されたウィンドウ付きの D3D9 デバイスを取得する必要があるだけです。オプションのロードでデフォルトにすることができます。

私が持っていた古い 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については気にしません。古いプレーンデバイスは問題ありません。

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

4

1 に答える 1

1

1 つの問題は、いくつかの動作フラグを設定する必要があることです。

CreateDeviceのドキュメントから。:

BehaviorFlags [入力]
DWORDデバイスの作成を制御する1つ以上のオプション
の組み合わせ。詳細については、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);
于 2011-01-25T15:53:07.820 に答える