DEADSOFTWARE

fix slope interpolation; add r_maxfps
[d2df-sdl.git] / src / game / g_window.pas
index 7774c0a34c0c03b2bda5fd5418ece817dc492963..f55c43001f90849c064bfc3a98b9dac28370322f 100644 (file)
@@ -52,6 +52,7 @@ const
 
 var
   Time, Time_Delta, Time_Old: Int64;
+  Frame: Int64;
   flag: Boolean;
   wNeedTimeReset: Boolean = false;
   wMinimized: Boolean = false;
@@ -124,6 +125,7 @@ begin
 
   if wNeedTimeReset then
   begin
+    Frame := 0;
     Time_Delta := 28;
     wNeedTimeReset := false;
   end;
@@ -167,18 +169,27 @@ begin
 
   // Âðåìÿ ïðåäûäóùåãî îáíîâëåíèÿ
   if flag then
-  begin
     Time_Old := Time - (Time_Delta mod 28);
+
+  // don't wait if VSync is on, GL already probably waits enough
+  if gLerpActors then
+    flag := (Time - Frame >= gFrameTime) or gVSync;
+
+  if flag then
+  begin
     if (not wMinimized) then
     begin
+      if gPause or not gLerpActors then
+        gLerpFactor := 1.0
+      else
+        gLerpFactor := nmin(1.0, (Time - Time_Old) / 28.0);
       Draw;
       sys_Repaint
-    end
+    end;
+    Frame := Time
   end
   else
-  begin
-    sys_Delay(1) // release time slice, so we won't eat 100% CPU
-  end;
+    sys_Delay(1);
 
   e_SoundUpdate();
 end;