From: Patrik Gornicz Date: Fri, 22 Aug 2008 01:32:16 +0000 (-0400) Subject: added rolling times X-Git-Tag: physics-premerge~140 X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=commitdiff_plain;h=d279b77b8130a56b4687b7f0702389ddc73941ac;p=libbear.git added rolling times --- diff --git a/src/main.cpp b/src/main.cpp index d8ca3e1..228c238 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,7 +61,7 @@ bool is_Running; * draw_Count := counts this seconds draws * last_Second := stores the time of the last second, used for ups and fps */ -int target_UPS = 250; +int target_UPS = 100; long int last_Block_Update; float update_Sum = 0; @@ -70,6 +70,16 @@ int update_Count, draw_Count; long int last_Second; +float target_time_steps_per_second = 100; + + +// experiment with rolling averages +float rUpdate = 100; +float rDraw = 100; +float rRun = 100; +float num = 10; + + /// ***** MAIN Method ***** int main() { @@ -123,9 +133,17 @@ void run() while(is_Running) { - blockUpdate(); - updateFPSCounters(); - draw(); + long int time; + + time = tickCountMicro(); + blockUpdate(); + updateFPSCounters(); + draw(); + time = tickCountMicro() - time; + + rRun = (rRun * (num-1) + time) / num; + + cout << "rR:\t" << rRun << endl; } } @@ -133,6 +151,8 @@ void blockUpdate() { long int start = tickCountMicro(); + cout << "Block" << endl; + // Calculate the updates that should be run for the next draw update_Sum += (start - last_Block_Update) / (1000000 / (float)target_UPS); @@ -150,7 +170,7 @@ void blockUpdate() for (int i = 1; i <= iupdate_sum; i++) { handleInput(); - update(time_step*i / 1000); + update(time_step / 1000); } // remove the updates that where run from the sum update_Sum -= iupdate_sum; @@ -189,18 +209,37 @@ void handleInput() void update(float time_step) { + long int time; + update_Count++; - game::update(time_step); + time = tickCountMicro(); + game::update(time_step); + time = tickCountMicro() - time; + + rUpdate = (rUpdate * (num-1) + time) / num; + + cout << "ru:\t" << rUpdate << endl; + cout << "ts:\t" << time_step << endl; } void draw() { + long int time; + draw_Count++; - game::draw(); + time = tickCountMicro(); + game::draw(); + + SDL_GL_SwapBuffers(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + //SDL_Delay(50); + time = tickCountMicro() - time; - SDL_GL_SwapBuffers(); + rDraw = (rDraw*(num-1) + time) /num; - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + cout << "rd:\t" << rDraw << endl; }