changed src so the libpg headers are now used
[physics.git] / src / main.cpp
index 2744e86..34aa2ce 100644 (file)
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <pg/debug.h>
+
 #include <GL/gl.h>
 #include <GL/glu.h>
 #include <SDL/SDL.h>
 
-#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();