X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=blobdiff_plain;f=src%2Fmain.cpp;h=34aa2ce7dfb0253b9810dc40c2c0995f0d2e0812;hb=f32a9b7c8eab3536ad354f85ee65c41d5b5da006;hp=2744e86bdd370f3e1df4f7b3adf885bb0282b255;hpb=e2b1ddcdc1007c0099a77eda28c377ff61d454be;p=physics.git
diff --git a/src/main.cpp b/src/main.cpp
index 2744e86..34aa2ce 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -15,11 +15,12 @@
* along with this program. If not, see .
*/
+#include
+
#include
#include
#include
-#include "debug.h"
#include "handleSignal.h"
#include "game.h"
@@ -74,6 +75,9 @@ static const int s_iMinWaitMicro = s_iMinWaitMilli * 1000;
static int s_iTargetUPS = 100;
static float s_fAccUpdateWait = 0;
+static int s_iTargetFPS = 100;
+static float s_fAccDrawWait = 0;
+
static int s_iUPS, s_iFPS;
static int s_iUpdateCount, s_iDrawCount;
static MICRO s_micLastSecond;
@@ -240,7 +244,7 @@ int startUpdateThread(void*)
if(s_iMinWaitMicro < s_fAccUpdateWait)
{
- int iWaits = s_fAccUpdateWait / s_iMinWaitMicro;
+ int iWaits = (int)(s_fAccUpdateWait / s_iMinWaitMicro);
s_fAccUpdateWait -= iWaits * s_iMinWaitMicro;
SDL_Delay(iWaits * s_iMinWaitMilli);
}
@@ -257,7 +261,19 @@ int startDrawThread(void*)
while(s_bIsRunning)
{
- draw();
+ MICRO time = tickCountMicro();
+ draw();
+ time = tickCountMicro() - time;
+
+ float wait = (1000000.0 / s_iTargetFPS - time);
+ s_fAccDrawWait += 0 < wait ? wait : 0;
+
+ if(s_iMinWaitMicro < s_fAccDrawWait)
+ {
+ int iWaits = (int)(s_fAccDrawWait / s_iMinWaitMicro);
+ s_fAccDrawWait -= iWaits * s_iMinWaitMicro;
+ SDL_Delay(iWaits * s_iMinWaitMilli);
+ }
}
drawClean();