Komische Frametimevariation



  • Hallo an Alle!

    Ich bin neu hier und hoffe, dass das der richtige Berecih für meine Frage ist.

    Also ich schreibe an einem 3D-Spiel und habe festgestellt, dass die Framedauer in etwa alle 20-50 Frames 10 mal länger ist als sonst.
    Zum Test hab ich folgendes Minimalprogramm geschrieben und auch da das Gleiche.
    Alle 20-50 Durchläufe dauert ein Durchlauf ca. 0.01s und sonst ca. 0.001s .

    #include "stdafx.h"
    #include <iostream>
    #include <GL/glfw.h>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	float lasttime,frametime=0;
    	 if( !glfwInit() )
    	{
    		fprintf( stderr, "Failed to initialize GLFW\n" );
    		return false;
    	}
    
    	 bool running=true;
    	 lasttime = glfwGetTime();
    	 while (running)
    	 {
    		 frametime=glfwGetTime()-lasttime;
    		 lasttime=glfwGetTime();
    		 cout << "frametime= "<< frametime << endl;
    	 }
    }
    

    Ich benutze Visual C++ 2010 Express und zur Zeitberechung die OpenGL-Bibliothek glfw.

    Hat jemand eine Idee, woran das liegen könnte?



  • Hintergrundprozesse duerfen auch mal Rechenzeit bekommen.



  • Erst mal Danke für die schnelle Antwort.

    Das mit den Hintergrundprozessen ist natürlich logisch.
    Nur sollte doch dann bei konstanten Hintergrundprozessen auch immer ca. die selbe Zeit (also ca. 1/100s)addiert werden.
    Allerdings verzehnfacht sich ja die Dauer immer, egal wie lange der Schleifeninhalt dauert.
    Also bei dem großen Programm dauert ein Frame normalerweise 1/100s und bei den Schwankungen dann nicht 2/100s, sondern eben 1/10s , was dann zu Ruckeln führt.



  • Die Zeitdifferenz kann auch durch Addition entstanden sein, nicht durch Multiplikation. Und bei konstanter Hintergrundlast bleibt die Rechenzeit auch constant, egal wie gross dein Spiel ist.



  • Ok, danke erstmal,

    nur bleibt sie ja eben nicht konstant, und beim kleinen programm springt sie von 1/1000 auf 1/100, also ca PLUS 1/100 und MAL 10,
    beim großen Programm springt sie von 1/100 auf 1/10, also ca PLUS 1/10 und MAL 10
    (bei der selben Hintergrunbelastung).

    Also wird die Framedauer ja augenscheinlich alle 20-50 Frames mit 10 multipliziert, und das verstehe ich nicht.


Anmelden zum Antworten