DirectDraw - BackBuffer - Problem



  • Hallo~
    Mein Problem ist, das ich immer def "DDERR_NOTFOUND" Fehler bekomme, wenn ich probiere per GetAttachedSurface einen BackBuffer zu holen. Dieser Fehler tritt auch bei diversen Tutorial-SourceCodes auf, selbst wenn ich sie nicht selber kompiliere..vielleicht kann mir einer von euch sagen, wo das Problem liegt. ..für links zu guten Tutorialen wäre ich auch dankbar.

    int InitDD(HWND hWnd) 
    { 
       DDSURFACEDESC2 ddsd; //DirectDrawSurface-Struktur 
       DDSCAPS2 ddscaps; //DirectDrawSurfaceCaptures-Struktur 
        HRESULT ddrval; //Fehlercode-Variable für DirectX 
    
       ddrval = DirectDrawCreateEx(NULL, (void**)&lpDirectDraw, IID_IDirectDraw7, NULL); //Erstellen des DirectDraw-Objekts 
    
       if(ddrval!=DD_OK) //Überprüfen ob DirectDraw-Objekt erstellt werden konnte und bei Scheitern Fehlermeldung ausgeben 
       { 
          MessageBox(hWnd, "DirectDrawCreateEx fehlgeschlagen !", "Err0r", MB_OK); 
          return 0; 
       } 
    
       ddrval = lpDirectDraw->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); //CooperativeLevel festlegen 
    
       if(ddrval!=DD_OK) //Überprüfen ob CooperativeLevel gesetzt werden konnte und bei Scheitern Fehlermeldung ausgeben 
       { 
          MessageBox(hWnd, "SetCooperativeLevel fehlgeschlagen !", "Err0r", MB_OK); 
          return 0; 
       } 
    
       memset(&ddsd, 0, sizeof(ddsd)); //Leeren der Struktur 
    
       //Füllen der Struktur 
       ddsd.dwSize = sizeof(ddsd); 
       ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; //Surface soll als PrimarySurface dienen 
       ddsd.dwBackBufferCount = 1; //Ein BackBuffer 
       ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; 
    
       ddrval = lpDirectDraw->CreateSurface(&ddsd, &lpddsPrimary, NULL); //Surface erstellen 
       if(ddrval!=DD_OK) //Überprüfen ob Surface erstellt werden konnte und bei Scheitern Fehlermeldung ausgeben 
       { 
          MessageBox(hWnd, "CreateSurface fehlgeschlagen !", "Err0r", MB_OK); 
          return 0; 
       } 
    
       ddscaps.dwCaps = DDSCAPS_BACKBUFFER; //Soll als BackBuffer dienen 
    
       ddrval = lpddsPrimary->GetAttachedSurface(&ddscaps, &lpddsBack); //BackBuffer vom PrimarySurface erhalten 
       if(ddrval!= DD_OK) //Überprüfen ob BackBuffer erstellt werden konnte und bei Scheitern Fehlermeldung ausgeben 
       { 
          MessageBox(hWnd, "GetAttachedSurface fehlgeschlagen !", "Err0r", MB_OK); 
          return 0; 
       } 
    
       return 1; 
    }
    

    Wäre auch nett, wenn ihr die Comments berichtigen könntet, falls etwas nicht so stimmt...bin erst dabei meine ersten DirectX-Schritte zu gehen und bin gleich am Anfang der Tutorials auf dieses Problem gestossen.

    Lumpensammler~



  • Lumpensammler schrieb:

    vielleicht kann mir einer von euch sagen, wo das Problem liegt.

    Die DX Debugruntimes.

    Bye, TGGC (Der Held lebt!)



  • Soll das mit "Err0r" ein Joke sein?



  • dali schrieb:

    Soll das mit "Err0r" ein Joke sein?

    Was bitte..?

    TGGC schrieb:

    Lumpensammler schrieb:

    vielleicht kann mir einer von euch sagen, wo das Problem liegt.

    Die DX Debugruntimes.

    Ok...danke



  • ich habe dasselbe problem (wollte eine Klasse schreiben). Ich habe die Variablen (directX Object, primary-surface, backbuffer) als private variablen deklariert...

    und was sollen die DX Debugruntimes sein???



  • Lumpensammler schrieb:

    dali schrieb:

    Soll das mit "Err0r" ein Joke sein?

    Was bitte..?

    [cpp]
    MessageBox(hWnd, "SetCooperativeLevel fehlgeschlagen !", "Err0r", MB_OK);
    [/cpp]



  • dino schrieb:

    ich habe dasselbe problem (wollte eine Klasse schreiben). Ich habe die Variablen (directX Object, primary-surface, backbuffer) als private variablen deklariert...

    und was sollen die DX Debugruntimes sein???

    DX Runtimes zum debuggen.

    Bye, TGGC (Pipe my World.)



  • dino und ich haben unser problem jetzt gelöst:

    In einer Klasse ist das DDSCAPS2-Struct nicht initialisiert, deshalb wird es von der Funktion GetAttachedSurface nicht akzeptiert. Wenn ich nun ZeroMemory davor aufrufe, funktioniert es. Vielleicht hilft dir das ja weiter...

    honae



  • Vieleicht hätten die DebugRuntimes das auch gefunden... 😎

    Bye, TGGC (Pipe my World.)


Anmelden zum Antworten