DEADSOFTWARE

render: add r_game function prefixes
[d2df-sdl.git] / src / game / g_window.pas
index 7774c0a34c0c03b2bda5fd5418ece817dc492963..374d42051c8f9f107acf6f4ff789d349799bf441 100644 (file)
@@ -41,7 +41,7 @@ uses
 {$INCLUDE ../nogl/noGLuses.inc}
   SysUtils, Classes, MAPDEF, Math,
   e_graphics, e_log, e_texture, g_main,
-  g_console, e_input, g_options, g_game,
+  g_console, r_console, e_input, g_options, g_game, r_game,
   g_basic, g_textures, e_sound, g_sound, g_menu, ENet, g_net,
   g_map, g_gfx, g_monsters, xprofiler,
   g_touch, g_gui, g_system, g_netmaster;
@@ -52,6 +52,7 @@ const
 
 var
   Time, Time_Delta, Time_Old: Int64;
+  Frame: Int64;
   flag: Boolean;
   wNeedTimeReset: Boolean = false;
   wMinimized: Boolean = false;
@@ -87,11 +88,18 @@ begin
 
     if forceUpdate then
     begin
-      DrawMenuBackground('INTER');
+      e_SetRendertarget(True);
+      e_SetViewPort(0, 0, gScreenWidth, gScreenHeight);
+
+      r_Game_DrawMenuBackground('INTER');
       e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+      r_Game_DrawLoadingStat();
+      r_Console_Draw(True);
+
+      e_SetRendertarget(False);
+      e_SetViewPort(0, 0, gWinSizeX, gWinSizeY);
+      e_BlitFramebuffer(gWinSizeX, gWinSizeY);
 
-      DrawLoadingStat();
-      g_Console_Draw(True);
       sys_Repaint;
       prevLoadingUpdateTime := getTimeMilli();
     end;
@@ -124,6 +132,7 @@ begin
 
   if wNeedTimeReset then
   begin
+    Frame := 0;
     Time_Delta := 28;
     wNeedTimeReset := false;
   end;
@@ -136,20 +145,9 @@ begin
   begin
     flag := true;
     for i := 1 to t do
-    begin
-           if (NetMode = NET_SERVER) then g_Net_Host_Update()
-      else if (NetMode = NET_CLIENT) then g_Net_Client_Update();
       Update();
-    end;
-  end
-  else
-  begin
-         if (NetMode = NET_SERVER) then g_Net_Host_Update()
-    else if (NetMode = NET_CLIENT) then g_Net_Client_Update();
   end;
 
-  if NetMode = NET_SERVER then g_Net_Flush();
-
   g_Map_ProfilersEnd();
   g_Mons_ProfilersEnd();
 
@@ -167,18 +165,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) or (gState = STATE_FOLD) 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;