mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2024-11-14 00:50:38 +00:00
2a67d5bcb2
With the new SDL2 versioning scheme, SDL_VERSIONNUM macro overflows the minor version into the thousands digit after 2.9.0, e.g. encodes 2.23.0 as 4300, and we used to reject that thinking it is SDL v3 or something.
161 lines
3.6 KiB
C
161 lines
3.6 KiB
C
/*
|
|
Copyright (C) 1996-2001 Id Software, Inc.
|
|
Copyright (C) 2002-2005 John Fitzgibbons and others
|
|
Copyright (C) 2007-2008 Kristian Duske
|
|
Copyright (C) 2010-2014 QuakeSpasm developers
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
#include "quakedef.h"
|
|
#if defined(SDL_FRAMEWORK) || defined(NO_SDL_CONFIG)
|
|
#if defined(USE_SDL2)
|
|
#include <SDL2/SDL.h>
|
|
#else
|
|
#include <SDL/SDL.h>
|
|
#endif
|
|
#else
|
|
#include "SDL.h"
|
|
#endif
|
|
#include <stdio.h>
|
|
|
|
static void Sys_AtExit (void)
|
|
{
|
|
SDL_Quit();
|
|
}
|
|
|
|
static void Sys_InitSDL (void)
|
|
{
|
|
#if defined(USE_SDL2)
|
|
SDL_version v;
|
|
SDL_version *sdl_version = &v;
|
|
SDL_GetVersion(&v);
|
|
#else
|
|
const SDL_version *sdl_version = SDL_Linked_Version();
|
|
#endif
|
|
|
|
Sys_Printf("Found SDL version %i.%i.%i\n",sdl_version->major,sdl_version->minor,sdl_version->patch);
|
|
|
|
if (SDL_Init(0) < 0) {
|
|
Sys_Error("Couldn't init SDL: %s", SDL_GetError());
|
|
}
|
|
atexit(Sys_AtExit);
|
|
}
|
|
|
|
#define DEFAULT_MEMORY (256 * 1024 * 1024) // ericw -- was 72MB (64-bit) / 64MB (32-bit)
|
|
|
|
static quakeparms_t parms;
|
|
|
|
// On OS X we call SDL_main from the launcher, but SDL2 doesn't redefine main
|
|
// as SDL_main on OS X anymore, so we do it ourselves.
|
|
#if defined(USE_SDL2) && defined(__APPLE__)
|
|
#define main SDL_main
|
|
#endif
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int t;
|
|
double time, oldtime, newtime;
|
|
|
|
host_parms = &parms;
|
|
parms.basedir = ".";
|
|
|
|
parms.argc = argc;
|
|
parms.argv = argv;
|
|
|
|
parms.errstate = 0;
|
|
|
|
COM_InitArgv(parms.argc, parms.argv);
|
|
|
|
isDedicated = (COM_CheckParm("-dedicated") != 0);
|
|
|
|
Sys_InitSDL ();
|
|
|
|
Sys_Init();
|
|
|
|
parms.memsize = DEFAULT_MEMORY;
|
|
if (COM_CheckParm("-heapsize"))
|
|
{
|
|
t = COM_CheckParm("-heapsize") + 1;
|
|
if (t < com_argc)
|
|
parms.memsize = Q_atoi(com_argv[t]) * 1024;
|
|
}
|
|
|
|
parms.membase = malloc (parms.memsize);
|
|
|
|
if (!parms.membase)
|
|
Sys_Error ("Not enough memory free; check disk space\n");
|
|
|
|
Sys_Printf("Quake %1.2f (c) id Software\n", VERSION);
|
|
Sys_Printf("GLQuake %1.2f (c) id Software\n", GLQUAKE_VERSION);
|
|
Sys_Printf("FitzQuake %1.2f (c) John Fitzgibbons\n", FITZQUAKE_VERSION);
|
|
Sys_Printf("FitzQuake SDL port (c) SleepwalkR, Baker\n");
|
|
Sys_Printf("QuakeSpasm " QUAKESPASM_VER_STRING " (c) Ozkan Sezer, Eric Wasylishen & others\n");
|
|
|
|
Sys_Printf("Host_Init\n");
|
|
Host_Init();
|
|
|
|
oldtime = Sys_DoubleTime();
|
|
if (isDedicated)
|
|
{
|
|
while (1)
|
|
{
|
|
newtime = Sys_DoubleTime ();
|
|
time = newtime - oldtime;
|
|
|
|
while (time < sys_ticrate.value )
|
|
{
|
|
SDL_Delay(1);
|
|
newtime = Sys_DoubleTime ();
|
|
time = newtime - oldtime;
|
|
}
|
|
|
|
Host_Frame (time);
|
|
oldtime = newtime;
|
|
}
|
|
}
|
|
else
|
|
while (1)
|
|
{
|
|
/* If we have no input focus at all, sleep a bit */
|
|
if (!VID_HasMouseOrInputFocus() || cl.paused)
|
|
{
|
|
SDL_Delay(16);
|
|
}
|
|
/* If we're minimised, sleep a bit more */
|
|
if (VID_IsMinimized())
|
|
{
|
|
scr_skipupdate = 1;
|
|
SDL_Delay(32);
|
|
}
|
|
else
|
|
{
|
|
scr_skipupdate = 0;
|
|
}
|
|
newtime = Sys_DoubleTime ();
|
|
time = newtime - oldtime;
|
|
|
|
Host_Frame (time);
|
|
|
|
if (time < sys_throttle.value && !cls.timedemo)
|
|
SDL_Delay(1);
|
|
|
|
oldtime = newtime;
|
|
}
|
|
|
|
return 0;
|
|
}
|