DEADSOFTWARE

decouple repainting from blitting the FBO; draw touch overlay after FBO
[d2df-sdl.git] / src / game / g_window.pas
index 351edf913e91396a154c5ae8a5c52a08cf32c5e2..c4d1b0fb73a7984ce18686733833b6189abbac3e 100644 (file)
@@ -88,11 +88,18 @@ begin
 
     if forceUpdate then
     begin
+      e_SetRendertarget(True);
+      e_SetViewPort(0, 0, gScreenWidth, gScreenHeight);
+
       DrawMenuBackground('INTER');
       e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
-
       DrawLoadingStat();
       g_Console_Draw(True);
+
+      e_SetRendertarget(False);
+      e_SetViewPort(0, 0, gWinSizeX, gWinSizeY);
+      e_BlitFramebuffer(gWinSizeX, gWinSizeY);
+
       sys_Repaint;
       prevLoadingUpdateTime := getTimeMilli();
     end;
@@ -143,11 +150,6 @@ begin
       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();
@@ -171,7 +173,11 @@ begin
   if flag then
     Time_Old := Time - (Time_Delta mod 28);
 
-  if (Time - Frame > 4) then
+  // 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