DEADSOFTWARE

set vsync after window creation (it should work better this way)
authorKetmar Dark <ketmar@ketmar.no-ip.org>
Mon, 12 Feb 2018 11:46:47 +0000 (13:46 +0200)
committerKetmar Dark <ketmar@ketmar.no-ip.org>
Mon, 12 Feb 2018 11:47:34 +0000 (13:47 +0200)
src/game/g_menu.pas
src/game/g_window.pas

index ff57a392880a97a2b1bdb2514b6272240288b007..0a9cc7f395614e11759408dd027d5807d0298784 100644 (file)
@@ -107,7 +107,6 @@ var
   menu: TGUIMenu;
   i: Integer;
   ovs: Boolean;
-  v: Byte;
 begin
   menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu'));
 
@@ -118,14 +117,7 @@ begin
 
   ovs := gVSync;
   gVSync := TGUISwitch(menu.GetControl('swVSync')).ItemIndex = 0;
-  {$IF not DEFINED(HEADLESS)}
-  if (ovs <> gVSync) then
-  begin
-    if (gVSync) then v := 1 else v := 0;
-    if (SDL_GL_SetSwapInterval(v) <> 0) then writeln('oops; can''t change vsync option, restart required')
-    else writeln('vsync changed');
-  end;
-  {$ENDIF}
+  if (ovs <> gVSync) then g_SetVSync(gVSync);
 
   gTextureFilter := TGUISwitch(menu.GetControl('swTextureFilter')).ItemIndex = 0;
   glLegacyNPOT := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0);
index e2fec17af124ea35f5c6a556e0536196d84a8a2f..56df2d169d730e2526a2d373328f85436675c0b1 100644 (file)
@@ -32,6 +32,7 @@ procedure Sleep (ms: LongWord);
 function GetDisplayModes (dbpp: LongWord; var selres: LongWord): SSArray;
 function g_Window_SetDisplay (preserveGL: Boolean=false): Boolean;
 function g_Window_SetSize (w, h: Word; fullscreen: Boolean): Boolean;
+procedure g_SetVSync (vsync: Boolean);
 
 procedure ProcessLoading (forceUpdate: Boolean=false);
 
@@ -522,6 +523,7 @@ begin
   fuiScrWdt := gScreenWidth;
   fuiScrHgt := gScreenHeight;
   if (assigned(oglInitCB)) then oglInitCB();
+  g_SetVSync(gVSync);
 {$ENDIF}
 
   e_ResizeWindow(gScreenWidth, gScreenHeight);
@@ -749,7 +751,7 @@ begin
 end;
 
 
-procedure InitOpenGL (vsync: Boolean);
+procedure g_SetVSync (vsync: Boolean);
 {$IF not DEFINED(HEADLESS)}
 var
   v: Byte;
@@ -757,6 +759,21 @@ var
 begin
 {$IF not DEFINED(HEADLESS)}
   if vsync then v := 1 else v := 0;
+  if (SDL_GL_SetSwapInterval(v) <> 0) then
+  begin
+    e_WriteLog('oops; can''t change vsync option, restart required', TMsgType.Warning);
+  end
+  else
+  begin
+    if vsync then e_WriteLog('VSync: ON', TMsgType.Notify) else e_WriteLog('VSync: OFF', TMsgType.Notify);
+  end;
+{$ENDIF}
+end;
+
+
+procedure InitOpenGL ();
+begin
+{$IF not DEFINED(HEADLESS)}
   SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
   SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
   SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
@@ -765,7 +782,6 @@ begin
   SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
   SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); // lights; it is enough to have 1-bit stencil buffer for lighting, but...
-  SDL_GL_SetSwapInterval(v);
 {$ENDIF}
 end;
 
@@ -913,7 +929,7 @@ begin
   end;
 
   e_WriteLog('Initializing OpenGL', TMsgType.Notify);
-  InitOpenGL(gVSync);
+  InitOpenGL();
 
   e_WriteLog('Creating GL window', TMsgType.Notify);
   if not CreateGLWindow(PChar(Format('Doom 2D: Forever %s', [GAME_VERSION]))) then