Ich habe vor kurzem angefangen, DirectX-Programmierung in C++ zu lernen, und ich habe ein kleines Problem festgestellt.Verzögerung zwischen Bildern in DirectX
Die Sache ist, dass meine Übung erfordert, dass ich Farben in einer DirectX-Anwendung von einem zum anderen ändern. Ich habe eine Funktion, die das tut:
void render_frame(void)
{
// start the random generator
srand(time(NULL));
// clear the window to random color
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(rand() % 255, rand() % 255, rand() % 255), 1.0f, 0);
// begin/end/display scene
d3ddev->BeginScene();
d3ddev->EndScene();
d3ddev->Present(NULL, NULL, NULL, NULL);
}
Es funktioniert, aber es ist abhängig von der Zeit() Verzögerung, und ich frage mich, ob es eine bessere Entsprechung in Direct3D-Bibliothek ist. Zum Beispiel, wenn ich könnte diese Funktion, um mit bestimmten Farbe und Verzögerung in der Kette wie folgt aufrufen:
void render_frame_red(void);
delay(1000);
void render_frame_blue(void);
delay(1000);
Ich weiß, dass Funktion Sleep() in Standard-Bibliothek vorhanden ist, aber es buchstäblich friert mein Fenster (ich kann‘ t mit ihm während der Verzögerung interagieren). Vielleicht kann ich die Zeit für ein anderes Ticket einstellen, damit es so oft aktualisiert wird, wie ich es möchte?
Ich weiß, es ist eine kleine Sache und ich würde es wahrscheinlich später auf meiner Reise mit 3D-Programmierung herausfinden, aber es würde nicht weh tun, wenn ich mehr darüber wüsste, wie die Dinge in DirectX funktionieren.
Rufen Sie srand() nur einmal in einem Programm auf. –
Ja, das ist mein Fehler. Ich nenne es normalerweise am Anfang meiner main() - Funktion (WinMain() in diesem Fall). – RPAnimation
@NeilButterworth Eigentlich einmal in einem Thread. Oder benutze '' std :: random_device'. Was Frage betrifft, befasst sich DirectX überhaupt nicht mit Zeit. Alle verwandten Funktionen sind jetzt in DXGI vorhanden (siehe [IDXGISwapChain] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb174569 (v = V.85) .aspx)) und System-Timer. – VTT