![]() |
DirectX-Forum - Beitragsübersicht - |
|
Thema | SDX: Ermitteln, ob letzter Frame schon fertig gezeichnet ist |
Von |
Nico |
E-Mail |
nico.schertler@gmx.de |
Datum |
24. Februar 2010 um 17:41:14 |
Frage |
Hallo!
Wenn in meiner D3D-Anwendung die Framerate sinkt (so auf die 20 fps), merkt man ziemlich deutlich, dass die Mausbewegung auf dem Bildschirm hinter der tatsächlichen hinterherhängt. Bei der Suche nach Lösungen für dieses Problem bin ich darauf gestoßen, dass das Problem wohl mit D3D und nicht mit DirectInput zu tun hat. Sprich, wenn zu die Grafikkarte zu viel zu tun hat, werden die Draw-Aufträge gebuffered, bis alle vorhergehenden abgearbeitet sind. Als Folge hängt das Bild auf dem Bildschirm eben etwas hinterher. Kann ich dieses Buffern irgendwie ausstellen? Ich vermute mal nicht, deswegen gleich eine zweite Frage: Kann ich ermitteln, ob die Grafikkarte mit dem Rendern des vorhergehenden Frames schon fertig ist, sodass ich erst einen neuen Aufruf starte, wenn alles fertig ist? Übigens habe ich schon PresentationInterval.Immediate und One probiert. Bei beiden dasselbe Problem. Wenn die Framerate wieder ziemlich hoch ist, bewegt sich die Maus auch wieder so, wie sie soll.
Nico |
|
Antwort: |
Von |
mdx |
E-Mail |
mdx@vb-fun.de |
Datum |
02. März 2010 um 09:20:11 |
Antwort |
Ich verstehe dein Problem nicht wirklich, zumal deine Lösung keine Lösung ist. Wenn ein Frame eine sekunde braucht, dann braucht es eben eine sekunde. Wenn du Frames auslassen möchtest (Aufträge), dann würde das nichts bringen. Anstatt ruckeln hast du sprünge und nie einen Zuwachs an FPS.
Geregelt wird die Abarbeitung über den Treiber der Grafikkarte, aber wie gesagt, es würde nichts bringen. Wenn du möchtest, dass es auf "schlechter" Hardware läuft, musst du den Rechenaufwand minimieren. Eine andere Lösung gibt es nicht. |
|
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|