DEADSOFTWARE

sfs and wad code refactoring: part 1
[d2df-sdl.git] / src / game / g_window.pas
index 33fc80c2969914e7f43c22d84edbc8c8d9ba55fb..cbc10281f3f8df5809a1971fb1999830816223b7 100644 (file)
@@ -3,7 +3,7 @@ unit g_window;
 interface
 
 uses
-  WADEDITOR;
+  wadreader;
 
 function  SDLMain(): Integer;
 function  GetTimer(): Int64;
@@ -23,6 +23,7 @@ function  g_Window_SetSize(W, H: Word; FScreen: Boolean): Boolean;
 implementation
 
 uses
+{$IFDEF WINDOWS}Windows,{$ENDIF}
   SDL2, GL, GLExt, e_graphics, e_log, g_main,
   g_console, SysUtils, e_input, g_options, g_game,
   g_basic, g_textures, e_sound, g_sound, g_menu, ENet, g_net;
@@ -73,6 +74,11 @@ function g_Window_SetDisplay(PreserveGL: Boolean = False): Boolean;
 var
   mode, cmode: TSDL_DisplayMode;
 begin
+{$IFDEF HEADLESS}
+  Result := True;
+  Exit;
+{$ENDIF}
+  
   Result := False;
 
   e_WriteLog('Setting display mode...', MSG_NOTIFY);
@@ -126,7 +132,7 @@ var
   res, i, k, n, pw, ph: Integer;
 begin
   SetLength(Result, 0);
-
+  {$IFDEF HEADLESS}Exit;{$ENDIF}
   k := 0; SelRes := 0;
   n := SDL_GetNumDisplayModes(0);
   pw := 0; ph := 0;
@@ -156,6 +162,7 @@ procedure ChangeWindowSize();
 begin
   gWinSizeX := gScreenWidth;
   gWinSizeY := gScreenHeight;
+  {$IFDEF HEADLESS}Exit;{$ENDIF}
   e_ResizeWindow(gScreenWidth, gScreenHeight);
   g_Game_SetupScreenSize();
   g_Menu_Reset();
@@ -167,6 +174,7 @@ var
   Preserve: Boolean;
 begin
   Result := False;
+  {$IFDEF HEADLESS}Exit;{$ENDIF}
   Preserve := False;
 
   if (gScreenWidth <> W) or (gScreenHeight <> H) then
@@ -383,6 +391,7 @@ end;
 
 procedure SwapBuffers();
 begin
+  {$IFDEF HEADLESS}Exit;{$ENDIF}
   SDL_GL_SwapWindow(h_Wnd);
 end;
 
@@ -414,9 +423,10 @@ begin
     exit;
   end;
 
+{$IFNDEF HEADLESS}
   h_Gl := SDL_GL_CreateContext(h_Wnd);
   if h_Gl = nil then Exit;
-
+{$ENDIF}
   //wWindowCreated := True;
 
   e_ResizeWindow(gScreenWidth, gScreenHeight);
@@ -425,6 +435,17 @@ begin
   Result := True;
 end;
 
+{$IFDEF WINDOWS}
+// windoze sux; in headless mode `GetTickCount()` (and SDL) returns shit
+function GetTimer(): Int64;
+var
+  F, C: Int64;
+begin
+  QueryPerformanceFrequency(F);
+  QueryPerformanceCounter(C);
+  Result := Round(C/F*1000{000});
+end;
+{$ELSE}
 function GetTimer(): Int64;
 var
   t: Uint32;
@@ -449,6 +470,7 @@ begin
   lastTicks := t;
   result := ticksOverflow+Int64(t);
 end;
+{$ENDIF}
 
 procedure ResetTimer();
 begin
@@ -588,6 +610,7 @@ procedure InitOpenGL(VSync: Boolean);
 var
   v: Byte;
 begin
+  {$IFDEF HEADLESS}Exit;{$ENDIF}
   if VSync then v := 1 else v := 0;
   SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
   SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
@@ -601,6 +624,10 @@ end;
 
 function SDLMain(): Integer;
 begin
+{$IFDEF HEADLESS}
+  e_NoGraphics := True;
+{$ENDIF}
+
   e_WriteLog('Creating GL window', MSG_NOTIFY);
   if not CreateGLWindow(PChar(Format('Doom 2D: Forever %s', [GAME_VERSION]))) then
   begin