D3D9 kennt D3DCAPS_OVERLAY nicht ?!



  • Sorry, dachte haette ich oben schon genannt 😉

    1>------ Build started: Project: Overlay Test 01, Configuration: Debug Win32 ------
    1>Compiling...
    1>stdafx.cpp
    1>Compiling...
    1>COverlayManager.cpp
    1>c:\users\....overlay test 
    01\overlay test 01\coverlaymanager.cpp(79) : error C2065: 'D3DCAPS_OVERLAY' : undeclared identifier
    1>Overlay Test 01.cpp
    1>Generating Code...
    1>Overlay Test 01 - 1 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    

    Lg Tobi



  • Laut dem MSDN-Fehlercode: C2065 ist dein 'D3DCAPS_OVERLAY' undeklariert. Wo hast du das her? Nichtmal hier habe ich es gefunden und wenn es da schon nicht ist... 😕



  • Ja ich versteh das auch nicht. Hatte das vor einem Jahr oder so mal mit DirectDraw gemacht und da ging das noch mit dem Overlays. Nun hab ich mich für die "neue" SDK von März 2009 entschieden und da ist vermerkt, dass die DirectDraw so alleine garnicht mehr existiert, sondern die Direct3D9 alle Funktion3n beinhaltet. Selbst in der MSDN ist dieses Beispiel( http://msdn.microsoft.com/en-us/library/dd797814(VS.85).aspx ) zu finden nach dem ich mich orientiert habe. Da wird das Falg auch einfach so benutzt.

    Echt komisch.

    Lg Tobi



  • MSDN schrieb:

    To query for overlay support, call IDirect3D9::GetDeviceCaps. If the driver supports hardware overlay, the D3DCAPS_OVERLAY flag is set in the D3DCAPS9.Caps member.

    Vielleicht unterstützt deine Hardware keine Overlays, wäre aber etwas fragwürdig...



  • Ja ne is klar, glaub schon das meine ATI 2600 xt Overlays supportet, somal es damals auch ging 😉
    Es ist nur echt komisch wieso das Overlay-Falg nicht mal angegeben ist ...



  • Haste das mal mit

    IDirect3D9ExOverlayExtension::CheckDeviceOverlayType
    

    gecheckt?



  • Nein hab ich noch nicht. Aber brauch ich nicht das Flag nachher trotzdem?, wenn ich meine Overlaysurface anlegen will? Mir war so 😕


  • Administrator

    @T0bi,
    Wenn ich mich jetzt nicht schwer täusche, dann existiert DirectDraw nicht mehr in DirectX 9.0c. Das Zeug ist jetzt alles nur noch über Direct3D machbar. DirectDraw existiert ja eigentlich seit DirectX 8.0 nicht mehr. Ich weiss allerdings nicht, ob es in DirectX 8.0 noch gab und nur als deprecated galt. Aber mit der Überarbeitung und Einführung von DirectX 8.0 hat man alle 2D Zeichenfunktionen und co dem 3D Bereich überlassen, da dies deutlich einfacher ist und auch mehr Möglichkeiten für 2D zulässt.

    Was für ein SDK hast du denn vor einem Jahr verwendet?

    Grüssli



  • Hm das kann ich dir jetzt gar nicht mehr sagen. Ich weiß nur noch das ich mit den alten LPDIRECT3D7 und Co Objecten gearbeitet hatte.


  • Administrator

    LPDIRECT3D7
    -> DirectX 7.x
    Ja, da war DirectDraw noch dabei 😉

    Was hat dies denn früher mal bedeutet? Dann könnte man vielleicht das Gegenstück zu heute finden 🙂

    Grüssli



  • Hä? Wie Gegenstück finden?


  • Administrator

    T0bi schrieb:

    Hä? Wie Gegenstück finden?

    Ich habe keine Ahnung, was D3DCAPS_OVERLAY prüfen soll und finde auch nichts sinnvolles dazu. Google gibt ganze 7 Ergebnisse zurück, wovon zwei auf diesen Thread verweisen.
    Wenn es wirklich aus DirectX 7 stammt und etwas mit DirectDraw zu tun hat, dann prüft man das vielleicht heutzutage anders?

    Wobei man in der MSDN allerdings zum Teil D3DCAPS_OVERLAY in nigel nagel neuen Dokumentationen findet. Wenn ich mehr über den Wert, bzw. dessen Bedeutung, von D3DCAPS_OVERLAY wissen würde, dann könnte man vielleicht die Suche besser einschränken 😉

    Grüssli



  • Oh man, was ist da nur los ^^? Ja was gibts da mehr zu wissen, für mich ist das lediglich ein Flag das gesetzt ist in den Caps um dir anzuzeigen, ob deine GraKa das Overlay-Featur unterstützt 😕 ich schau mal, ob ich meine alten Projekte finde, vllt. hab ich es ja auch anders gemacht :S

    Lg Tobi



  • So hab jetzt doch noch mein altn Code gefunden:

    bool fOverlayComp( ) {
    
    	DDCAPS ddCaps;
    	HRESULT result;
    
    	memset( &ddCaps, 0, sizeof( DDCAPS ) );
    	ddCaps.dwSize = sizeof( DDCAPS );
    
    	result = g_lpDD->GetCaps( &ddCaps, 0 );
    	if( result != DD_OK ) {
    
    		MessageBox( 0, "Could not get the caps!", "Shutdown error!", MB_OK | MB_ICONERROR );
    		return false;
    	}
    
    	if( !( ddCaps.dwCaps & [b]DDCAPS_OVERLAY[/b] ) ) {
    
    		MessageBox( 0, "This graficcard is not overlay compatible!", "Shutdown error!", MB_OK | MB_ICONERROR );
    		return false;
    	}
    
    	return true;
    }
    

    und siehe da es heisst nicht D3DCAPS_OVERLAY sonder DDCAPS_OVERLAY.

    Lg Tobi


Anmelden zum Antworten