DirectX CreateDevice schlägt fehl



  • Guten Tag
    ich habe ein Problem. Wen ich mit diesen Paramtern ein CreateDevice mache gibt es einen Fehler wen ich das im Fullscreen mache, mach ich es im Fenster gibt es keinen Fehler.

    PresentParams.Windowed = Windowed;
    	PresentParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	PresentParams.BackBufferFormat = D3DFMT_UNKNOWN;
    	PresentParams.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
    

    Ich habe keine Ahnung warum.. Windowed ist True oder False.

    mfg



  • burnner schrieb:

    PresentParams.BackBufferFormat = D3DFMT_UNKNOWN;
    

    Da liegt der Fehler. D3DFMT_UNKNOWN ist nur im Fenstermodus erlaubt (logischerweise).

    MSDN schrieb:

    In fact, D3DFMT_UNKNOWN can be specified for the BackBufferFormat while in windowed mode. This tells the runtime to use the current display-mode format and eliminates the need to call IDirect3DDevice9::GetDisplayMode.



  • und wie würde die lösung aussehen? weil das weglassen geht auch nicht



  • Wie wäre es mit einem Blick in die Dokumentation oder die zahlreichen DirectX-Beispielprogramme?



  • Ok ich habs mir angeschaut, auch wen ich diesen Parameter weglasse, gibt es einen Fehler.



  • Natürlich.
    Du musst Direct3D doch sagen, welchen Videomodus es setzen soll...
    z.B. D3DFMT_X8R8G8B8 oder D3DFMT_R5G6B5



  • Außerdem musst du definieren wie breit und wie hoch der BackBuffer sein soll. Und wieviele Backbuffer du haben willst.

    am besten du liest dir mal bei msdn direkt durch was man da alles angeben muss.

    Such da nach: D3DPRESENT_PARAMETERS und dann der erste link.

    Bei mir sieht das so aus:

    ZeroMemory(&pd3d_present, sizeof(D3DPRESENT_PARAMETERS));
         pd3d_present.BackBufferWidth         = 800;
         pd3d_present.BackBufferHeight        = 600;
         pd3d_present.BackBufferCount         = 1;
         pd3d_present.BackBufferFormat        = D3DFMT_A8R8G8B8;
         pd3d_present.MultiSampleType         = D3DMULTISAMPLE_NONE;
         pd3d_present.hDeviceWindow           = this->Handle;
         pd3d_present.SwapEffect              = D3DSWAPEFFECT_DISCARD;
         pd3d_present.Windowed                = FALSE;
         pd3d_present.EnableAutoDepthStencil  = FALSE;
         pd3d_present.PresentationInterval    = D3DPRESENT_INTERVAL_DEFAULT;
    

    ...Nurmal ganz davon abgesehen sagt die Fehlermeldung auch schon was du falsch gemacht hast! Und zwar das man das BackBuffer Format UNKNOWN nicht im Vollbildmodus verwenden darf.



  • Im SDK gibts so viele Beispiele...

    Hier die minimale Version:

    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    

Anmelden zum Antworten