probleme mit D3DPRESENT_PARAMETERS für IDirect3DDevice9 [ERLEDIGT]



  • hier sind die werte, die das programm erhält:

    //BackBuffer
        D3DPresentParameters.BackBufferWidth			=(UINT)(800);        
        D3DPresentParameters.BackBufferHeight			=(UINT)(600);    
        D3DPresentParameters.BackBufferFormat			=D3DFMT_X8R8G8B8;
        D3DPresentParameters.BackBufferCount			=1; 
    							//always only one backBuffer
        D3DPresentParameters.MultiSampleType			=D3DMULTISAMPLETYPE_NONE;
        D3DPresentParameters.MultiSampleQuality			=0;
        D3DPresentParameters.SwapEffect				=D3DSWAPEFFECT_DISCARD;
    
        D3DPresentParameters.hDeviceWindow			=hTargetWindow;
        //des ist des 800x600große, leere "STATIC" child Fenster, wo reingezeichnet werden soll
    
        D3DPresentParameters.Windowed				=TRUE;
        D3DPresentParameters.EnableAutoDepthStencil		=TRUE; //sure
        D3DPresentParameters.AutoDepthStencilFormat	=D3DFMT_D24X8;
        D3DPresentParameters.Flags			=D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
    
        D3DPresentParameters.FullScreen_RefreshRateInHz	=60;
        D3DPresentParameters.PresentationInterval		=parameters.bWindowed?
           D3DPRESENT_INTERVAL_IMMEDIATE :
           D3DPRESENT_INTERVAL_ONE;
    

    Also, im originalcode sieht es so aus (parameter werden von 5 verschiedenen funktionen festgelegt, die die optimalen formate auswählen etc):

    //BackBuffer
    D3DPresentParameters.BackBufferWidth			=parameters.DisplayMode.Width;
    	D3DPresentParameters.BackBufferHeight			=parameters.DisplayMode.Height;
        D3DPresentParameters.BackBufferFormat			=parameters.BackBufferFormat;
        D3DPresentParameters.BackBufferCount			=1; 
    													//always only one backBuffer
        D3DPresentParameters.MultiSampleType			=parameters.MultiSampleType;
        D3DPresentParameters.MultiSampleQuality			=parameters.MultiSampleQuality;
        D3DPresentParameters.SwapEffect					=D3DSWAPEFFECT_DISCARD;
    													//necessary for multisampling		
        D3DPresentParameters.hDeviceWindow				=hTargetWindow;
        D3DPresentParameters.Windowed					=parameters.bWindowed;
        D3DPresentParameters.EnableAutoDepthStencil		=TRUE; //sure
        D3DPresentParameters.AutoDepthStencilFormat		=parameters.DepthStencilBufferFormat;
        D3DPresentParameters.Flags						=D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
    													//necessary for multisampling=(?)
        D3DPresentParameters.FullScreen_RefreshRateInHz	=parameters.DisplayMode.RefreshRate;
        D3DPresentParameters.PresentationInterval		=parameters.bWindowed? 
    													D3DPRESENT_INTERVAL_IMMEDIATE :
    													D3DPRESENT_INTERVAL_ONE;
    

    @maxi: so hier ist der code, fallen dir irgendwelche grobe fehler auf?



  • naja, ich kenn mich da auch nich so aus... aber versuch mal die fullscreen_refrehrate auf 0 oder so zu stellen. Gibts da ein default-makro? Und das nimm ma das Flag d3dpresentflag_disard_depthstencil raus. Versuch mal ein anderes stencil-format, mit 16bit depthbuffer

    debug stellt man so an: systemsteuerung -> DirectX (wenn es directX nich gibt, musst du nochn son redistributable ackage oder so ziehn, weiß jetzt nich genau, wie das heißt.) JEdenfalls unter DirectX kannst dann bei D3D einstelln UseDebugRuntime und da kannst du auch das Debug-Level einstelln. Die Ausgaben kommen dann bei VC da unten raus, wo auch der compiler meldungen ausgibt.



  • Maxi schrieb:

    naja, ich kenn mich da auch nich so aus... aber versuch mal die fullscreen_refrehrate auf 0 oder so zu stellen. Gibts da ein default-makro?

    Jo, das war's bei mir neulich. Für Windowed einfach Default verwenden, dann klappt's.



  • *oh my god* wenn das jetzt nur an dieser blöden refresh-rate lag, lach ich mich †o† !!! 😃 Danke leutz, werde es gleich ausprobieren!



  • dann frag ich mich aber, wozu man überhaupt noch den aktuellen DisplayMode abfragen soll, auflösung wird verändert, refresh rate auf default gestellt, könnte man doch gleich das ganze in GetAdapterBackBufferFormat() oder sowas umfunktionieren, und nicht des RAM mit irgendwelchen unnötigen strukturen vollstopfen :p



  • hmmmmm...
    😕
    nnein, so einfach wars leider doch nicht! Habs zwar durch D3DPRESENT_RATE_DEFAULT ersetzt, krig aber nach wie vor dieselben fehlermeldungen an den kopf geworfen 😞 😞 😞
    ööööhhhhhh....
    noch irgendwelche ideen? 🙄



  • Maxi schrieb:

    fullscreen_refrehrate auf 0

    Die anwendung soll ja nicht im vollbildmodus laufen...

    @maxi:
    übrigens, des Direct3D habe ich jetzt auf debug umgestellt, es spuckt trotzdem keine fehlermeldungen raus 😮
    so ein mist, wie soll ich dem programm helfen, wenn es mir ned sagen kann, wo es "wehtut"? 🙄
    es muss doch irgendeinen weg geben, festzustellen WAS dieser CreateDevice() Methode nicht passt!!!
    Zu hülf!!! 😮 😮 😮



  • Öhm... kann des sein, dass D3DCREATE_HARDWARE_VERTEXPROCESSING doch nicht sogut wie von jeder grafikkarte unterstützt wird?
    weis einer, wo man bei den CAPS9 danach guggn soll???? omfg, da sind ja um die 70 elemente drinne, das dauert doch ne ewigkeit, bis man des durchgesucht hat... solche unterpunkte wie "vertexprocessing" sind mir leider auch noch nicht aufgefallen, naja, egal, ich suche fleissig weiter! 🙄 👍
    die lösung des problems ist 100% irgendwo dadrinne... 70 parameter... jeder jeweils aus 32 flags... heheheh, wird n langer abend, wenn ich pech hab 😃
    beeindrückend des struktürchen^^ aber zumindest richtig schön strukturiert 😃



  • welche ide hast du? musst natürlich im debugmodus komnpilieren und dann auch im debugmodus starten, also bei vc mit F5, dann kommen da eigentlihc immer meldungen, auch wenns keine fehler gibt. Hast nich nur die debugversion eingeschlatet sondern auch das debug-lebvel hochgeschraubt?



  • jup, alles gleich aufs höchste debug level gestellt... ich versuch grad ma das ganze project bei den einstellungen nochma zu compilen, k?
    danke nochma 🤡 👍



  • hmmmm... ne, sry, maxi, DX schweigt nach wie vor, wie ein guter partisan uf nem verhör^^ :p njo, egal, werd schon mit dem problemchen auch ohne debug hilfe klarkommen, frage ist: wie_lange_dauerts_?



  • Öhm... zurück zu VertexProcessingCaps... (aaahhh, wie lustig ich immer diese double- und triplepostings finde= sry leutz, ich weis, ist ne schlechte angewohnheit :p )
    Also, hab jetzt die VertexProcessingCaps in der struktur gefunden, aber da steht nix von D3DCREATE_HARDWARE_VERTEXPROCESSING oder sowas, sondern irgendwelches anderes, zweifellos absolut nützliches, zeug. Bringt mich leider keinen centimeter weiter... 😮

    wie krig ich denn jez raus, ob ich ne HARDWARE_VERTEXPROCESSING schnittstelle erzeugen kann? 😕

    etwa 27 sekunden später:

    if (caps.VertexProcessingCaps == 0) 
            vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    

    hab jetzt in nem tut sowas gefunden... öööhm, ist mir allein aus der dokumentation nicht klar geworden, dass der ganze Cap==0 ist, wenn kein HARDWARE_VERTEXPROCESSING unterstützt wird....



  • hhe, wiist ihr was? ich glaube, es denkt sich leichter, wenn man seine fragen aufschreibt^^ ich glaub ich versuch mich ma in einem .txt dokument auszutoben, und nicht das schöne forum hier vollzumüllen 😃
    THX ALL!
    ...
    (19 sec später)
    ...
    Übrigens, hat jetzt funktioniert, also, immer schön üebrprüfen, ob HARDWARE_VERTEXPROCESSING verfügbar ist!!! thread=[ERLEDIGT]


Anmelden zum Antworten