Performance
-
Hallo Leute, ich habe eine Frage zu der Performance von DirectX Spielen allgemein !
Die Funktion IDirect3D::Present kehrt doch erst zurück, nachdem Sie alle Zeichnungsoperationen abgeschlossen hat, was bedeutet, dass die CPU nichts tut, während die Grafikkarte die Bilder berechnet ?
Währe es nicht besser diese Funktion in einem eigenen Thread aufzurufen und in einem zweiten Thread bereits mit der CPU die KI und Bewegungen und alles zu berechnen, während die Grafikkarte noch damit beschäftigt ist, das letzte Bild aufzubauen ???
Gruss Ishildur
-
das ist eigentlich egal, die grafiktreiber speichern sich eh alles ab bevor es gezeichnet wird, manchmal haben die 5frames im cache ohne sie gerendert zu haben.
es ist nicht so dass die cpu irgendwo auf die graka wartet während des reinderings, die graka ruft den treiber auf, wann immer sie mehr input will, weil sie fertig ist.es ist also schon multithreaded.
falls es dich dennoch stören sollte, dass present die logic blockiert, rechne erst die logic durch und ruf dann erst present auf.
rapso->greets();
-
Läuft Present nicht asynchron?
-
jo, wird in den cache geschoben und erst wenn die graka nen interrupt ausruft ausgeführt.
-
Und wieso braucht dann die Funktion so unglaublich lange...
Macht mal einen Zeitvergleich:
einmal ohne die Aufrufe von Clear und Present und dann mit Clear und Present...
Das Resultat ist ernüchternd !!!Gruss Ishildur
-
Ishildur schrieb:
Und wieso braucht dann die Funktion so unglaublich lange...
Macht mal einen Zeitvergleich:
einmal ohne die Aufrufe von Clear und Present und dann mit Clear und Present...
Das Resultat ist ernüchternd !!!Nee, wenn es nicht so wäre, würde ich mich wundern. Immer solche bekloppten Zeitmessungen.
-
1. das kommt auf die anwendung an, es kann sein dass irgendwann entweder der cache volläuft, weil die ganze zeit die cpu nichts zu tun hat und nur die gpu aufgerufen wird (die gpu kann beim besten willen nicht in gleicher zeit ein ganzes rendering durchführen während die cpu nur "render" aufrufen muss)
2. es gibt bei treibern ein limit von meißtens max 5 frames die im buffer sind, weil sonst der delay zwischen cpuberechnungen und rendering zu gross wird und man natürlich einen delay von einer sekunde als schwammige reaktion bemerkt.
3. der clear kann von graka zu graka verschieden sein, das muss nicht was mit present zu tun haben wenn es dann langsamm wird.
rapso->greets();