Frage

Dies ist nicht für einen stabilen Release -Code, ich muss nur ein Fenster -D3D9 -Gerät in einer C ++ - App von einem HWND auf meinem Dev -PC zum Testen ... es kann eine Menge Optionen standardmäßig standardmäßig erstellt werden.

Ich habe versucht, es aus einer alten D3D8 -Klasse zu hacken, die ich hatte, aber ich bekomme d3derr_invalidcall.

Grundsätzlich habe ich das jetzt:

    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);

Ich denke einige D3DPRESENT_PARAMETERS Optionen könnten schuld sein-es ist mir egal, ob Backer von Z-Puffer oder Schablonen oder AA, ein altes einfaches Gerät in Ordnung ist.

Habe ich einige inkompatible Flags zusammengepasst?

War es hilfreich?

Lösung

1 Problem ist, dass Sie einige Verhaltensflags festlegen müssen.

Von den Dokumenten auf Createdevice.:

Verhaltensflags [in
DWORD
Kombination von eines oder mehr Optionen, die die Erstellung von Geräten steuern. Weitere Informationen finden Sie unter D3dcreate.

Und von der D3dcreate Dokumente:

D3dcreate_hardware_vertexprocessing, d3dcreate_mixed_vertexprocessing und d3dcreate_software_vertexprocessing sind gegenseitig ausschließende Flaggen. Mindestens ein Von diesen Scheitelpunktverarbeitungsflags müssen beim Aufrufen von CreatedEvice angegeben werden.

Versuchen:

HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,D3DCREATE_MIXED_VERTEXPROCESSING,&md3dpp,&mpD3DDevice);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top