mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-10 07:12:07 +00:00
Remove SDL 1.2 support from the client side render backend.
This commit is contained in:
parent
f03e95901f
commit
2099626b7b
1 changed files with 35 additions and 146 deletions
|
@ -37,27 +37,10 @@
|
||||||
#include "../../common/header/common.h" /* CVar_*, qboolean (through shared.h) */
|
#include "../../common/header/common.h" /* CVar_*, qboolean (through shared.h) */
|
||||||
#include "../../client/header/ref.h"
|
#include "../../client/header/ref.h"
|
||||||
|
|
||||||
#ifdef SDL2
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_video.h>
|
#include <SDL2/SDL_video.h>
|
||||||
|
|
||||||
#else // SDL1.2
|
|
||||||
#include <SDL/SDL.h>
|
|
||||||
#endif //SDL2
|
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
static SDL_Window* window = NULL;
|
static SDL_Window* window = NULL;
|
||||||
#else
|
|
||||||
static SDL_Surface* window = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
// some compatibility defines
|
|
||||||
#define SDL_SRCCOLORKEY SDL_TRUE
|
|
||||||
#define SDL_OPENGL SDL_WINDOW_OPENGL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cvar_t *vid_displayrefreshrate;
|
cvar_t *vid_displayrefreshrate;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -74,21 +57,15 @@ GLimp_Init(void)
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) == -1)
|
if (SDL_Init(SDL_INIT_VIDEO) == -1)
|
||||||
{
|
{
|
||||||
Com_Printf("Couldn't init SDL video: %s.\n", SDL_GetError());
|
Com_Printf("Couldn't init SDL video: %s.\n", SDL_GetError());
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_version version;
|
SDL_version version;
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_GetVersion(&version);
|
SDL_GetVersion(&version);
|
||||||
const char* driverName = SDL_GetCurrentVideoDriver();
|
|
||||||
#else
|
|
||||||
char driverName[64];
|
|
||||||
SDL_VideoDriverName(driverName, sizeof(driverName));
|
|
||||||
version = *SDL_Linked_Version();
|
|
||||||
#endif
|
|
||||||
Com_Printf("SDL version is: %i.%i.%i\n", (int)version.major, (int)version.minor, (int)version.patch);
|
Com_Printf("SDL version is: %i.%i.%i\n", (int)version.major, (int)version.minor, (int)version.patch);
|
||||||
Com_Printf("SDL video driver is \"%s\".\n", driverName);
|
Com_Printf("SDL video driver is \"%s\".\n", SDL_GetCurrentVideoDriver());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -97,10 +74,7 @@ GLimp_Init(void)
|
||||||
/*
|
/*
|
||||||
* Sets the window icon
|
* Sets the window icon
|
||||||
*/
|
*/
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
#include "icon/q2icon64.h" // 64x64 32 Bit
|
||||||
|
|
||||||
/* The 64x64 32bit window icon */
|
|
||||||
#include "icon/q2icon64.h"
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SetSDLIcon()
|
SetSDLIcon()
|
||||||
|
@ -108,6 +82,7 @@ SetSDLIcon()
|
||||||
/* these masks are needed to tell SDL_CreateRGBSurface(From)
|
/* these masks are needed to tell SDL_CreateRGBSurface(From)
|
||||||
to assume the data it gets is byte-wise RGB(A) data */
|
to assume the data it gets is byte-wise RGB(A) data */
|
||||||
Uint32 rmask, gmask, bmask, amask;
|
Uint32 rmask, gmask, bmask, amask;
|
||||||
|
|
||||||
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
||||||
int shift = (q2icon64.bytes_per_pixel == 3) ? 8 : 0;
|
int shift = (q2icon64.bytes_per_pixel == 3) ? 8 : 0;
|
||||||
rmask = 0xff000000 >> shift;
|
rmask = 0xff000000 >> shift;
|
||||||
|
@ -124,113 +99,53 @@ SetSDLIcon()
|
||||||
SDL_Surface* icon = SDL_CreateRGBSurfaceFrom((void*)q2icon64.pixel_data, q2icon64.width,
|
SDL_Surface* icon = SDL_CreateRGBSurfaceFrom((void*)q2icon64.pixel_data, q2icon64.width,
|
||||||
q2icon64.height, q2icon64.bytes_per_pixel*8, q2icon64.bytes_per_pixel*q2icon64.width,
|
q2icon64.height, q2icon64.bytes_per_pixel*8, q2icon64.bytes_per_pixel*q2icon64.width,
|
||||||
rmask, gmask, bmask, amask);
|
rmask, gmask, bmask, amask);
|
||||||
|
|
||||||
SDL_SetWindowIcon(window, icon);
|
SDL_SetWindowIcon(window, icon);
|
||||||
|
|
||||||
SDL_FreeSurface(icon);
|
SDL_FreeSurface(icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* SDL 1.2 */
|
|
||||||
|
|
||||||
/* The window icon */
|
|
||||||
#include "icon/q2icon.xbm"
|
|
||||||
|
|
||||||
static void
|
|
||||||
SetSDLIcon()
|
|
||||||
{
|
|
||||||
SDL_Surface *icon;
|
|
||||||
SDL_Color transColor, solidColor;
|
|
||||||
Uint8 *ptr;
|
|
||||||
int i;
|
|
||||||
int mask;
|
|
||||||
|
|
||||||
icon = SDL_CreateRGBSurface(SDL_SWSURFACE,
|
|
||||||
q2icon_width, q2icon_height, 8,
|
|
||||||
0, 0, 0, 0);
|
|
||||||
|
|
||||||
if (icon == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SetColorKey(icon, SDL_SRCCOLORKEY, 0);
|
|
||||||
|
|
||||||
transColor.r = 255;
|
|
||||||
transColor.g = 255;
|
|
||||||
transColor.b = 255;
|
|
||||||
|
|
||||||
solidColor.r = 0;
|
|
||||||
solidColor.g = 0;
|
|
||||||
solidColor.b = 0;
|
|
||||||
|
|
||||||
SDL_SetColors(icon, &transColor, 0, 1);
|
|
||||||
SDL_SetColors(icon, &solidColor, 1, 1);
|
|
||||||
|
|
||||||
ptr = (Uint8 *)icon->pixels;
|
|
||||||
|
|
||||||
for (i = 0; i < sizeof(q2icon_bits); i++)
|
|
||||||
{
|
|
||||||
for (mask = 1; mask != 0x100; mask <<= 1)
|
|
||||||
{
|
|
||||||
*ptr = (q2icon_bits[i] & mask) ? 1 : 0;
|
|
||||||
ptr++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_WM_SetIcon(icon, NULL);
|
|
||||||
|
|
||||||
SDL_FreeSurface(icon);
|
|
||||||
}
|
|
||||||
#endif /* SDL 1.2 */
|
|
||||||
|
|
||||||
static int IsFullscreen()
|
static int IsFullscreen()
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_DESKTOP)
|
||||||
if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN_DESKTOP) {
|
{
|
||||||
return 1;
|
return 1;
|
||||||
} else if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) {
|
}
|
||||||
|
else if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN)
|
||||||
|
{
|
||||||
return 2;
|
return 2;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
return !!(window->flags & SDL_FULLSCREEN);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static qboolean CreateSDLWindow(int flags, int w, int h)
|
static qboolean CreateSDLWindow(int flags, int w, int h)
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
int windowPos = SDL_WINDOWPOS_UNDEFINED;
|
int windowPos = SDL_WINDOWPOS_UNDEFINED;
|
||||||
// TODO: support fullscreen on different displays with SDL_WINDOWPOS_UNDEFINED_DISPLAY(displaynum)
|
|
||||||
window = SDL_CreateWindow("Yamagi Quake II", windowPos, windowPos, w, h, flags);
|
window = SDL_CreateWindow("Yamagi Quake II", windowPos, windowPos, w, h, flags);
|
||||||
|
|
||||||
return window != NULL;
|
return window != NULL;
|
||||||
#else
|
|
||||||
window = SDL_SetVideoMode(w, h, 0, flags);
|
|
||||||
SDL_EnableUNICODE(SDL_TRUE);
|
|
||||||
return window != NULL;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static qboolean GetWindowSize(int* w, int* h)
|
static qboolean GetWindowSize(int* w, int* h)
|
||||||
{
|
{
|
||||||
if(window == NULL || w == NULL || h == NULL)
|
if(window == NULL || w == NULL || h == NULL)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_DisplayMode m;
|
SDL_DisplayMode m;
|
||||||
|
|
||||||
if(SDL_GetWindowDisplayMode(window, &m) != 0)
|
if(SDL_GetWindowDisplayMode(window, &m) != 0)
|
||||||
{
|
{
|
||||||
Com_Printf("Can't get Displaymode: %s\n", SDL_GetError());
|
Com_Printf("Can't get Displaymode: %s\n", SDL_GetError());
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
*w = m.w;
|
*w = m.w;
|
||||||
*h = m.h;
|
*h = m.h;
|
||||||
#else
|
|
||||||
*w = window->w;
|
|
||||||
*h = window->h;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -249,17 +164,14 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
int height = *pheight;
|
int height = *pheight;
|
||||||
unsigned int fs_flag = 0;
|
unsigned int fs_flag = 0;
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
if (fullscreen == 1)
|
||||||
if (fullscreen == 1) {
|
{
|
||||||
fs_flag = SDL_WINDOW_FULLSCREEN_DESKTOP;
|
fs_flag = SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||||
} else if (fullscreen == 2) {
|
}
|
||||||
|
else if (fullscreen == 2)
|
||||||
|
{
|
||||||
fs_flag = SDL_WINDOW_FULLSCREEN;
|
fs_flag = SDL_WINDOW_FULLSCREEN;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
if (fullscreen) {
|
|
||||||
fs_flag = SDL_FULLSCREEN;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// only do this if we already have a working window and fully initialized rendering backend
|
// only do this if we already have a working window and fully initialized rendering backend
|
||||||
// (GLimp_InitGraphics() is also called when recovering if creating GL context fails or the one we got is unusable)
|
// (GLimp_InitGraphics() is also called when recovering if creating GL context fails or the one we got is unusable)
|
||||||
|
@ -268,12 +180,7 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
/* If we want fullscreen, but aren't */
|
/* If we want fullscreen, but aren't */
|
||||||
if (fullscreen != IsFullscreen())
|
if (fullscreen != IsFullscreen())
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_SetWindowFullscreen(window, fs_flag);
|
SDL_SetWindowFullscreen(window, fs_flag);
|
||||||
#else
|
|
||||||
SDL_WM_ToggleFullScreen(window);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Cvar_SetValue("vid_fullscreen", fullscreen);
|
Cvar_SetValue("vid_fullscreen", fullscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,14 +194,9 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
/* Is the surface used? */
|
/* Is the surface used? */
|
||||||
if (window)
|
if (window)
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
|
|
||||||
re.ShutdownWindow(true);
|
re.ShutdownWindow(true);
|
||||||
|
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
#else
|
|
||||||
SDL_FreeSurface(window);
|
|
||||||
#endif
|
|
||||||
window = NULL;
|
window = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +205,8 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
|
|
||||||
// let renderer prepare things (set OpenGL attributes)
|
// let renderer prepare things (set OpenGL attributes)
|
||||||
flags = re.PrepareForWindow();
|
flags = re.PrepareForWindow();
|
||||||
if(flags == -1)
|
|
||||||
|
if (flags == -1)
|
||||||
{
|
{
|
||||||
// hopefully PrepareForWindow() logged an error
|
// hopefully PrepareForWindow() logged an error
|
||||||
return false;
|
return false;
|
||||||
|
@ -314,10 +217,8 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
flags |= fs_flag;
|
flags |= fs_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
/* Set window icon - For SDL1.2, this must be done before creating the window */
|
/* Set window icon - For SDL1.2, this must be done before creating the window */
|
||||||
SetSDLIcon();
|
SetSDLIcon();
|
||||||
#endif
|
|
||||||
|
|
||||||
cvar_t *gl_msaa_samples = Cvar_Get("gl_msaa_samples", "0", CVAR_ARCHIVE);
|
cvar_t *gl_msaa_samples = Cvar_Get("gl_msaa_samples", "0", CVAR_ARCHIVE);
|
||||||
|
|
||||||
|
@ -325,7 +226,7 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
{
|
{
|
||||||
if (!CreateSDLWindow(flags, width, height))
|
if (!CreateSDLWindow(flags, width, height))
|
||||||
{
|
{
|
||||||
if((flags & SDL_OPENGL) && gl_msaa_samples->value)
|
if((flags & SDL_WINDOW_OPENGL) && gl_msaa_samples->value)
|
||||||
{
|
{
|
||||||
Com_Printf("SDL SetVideoMode failed: %s\n", SDL_GetError());
|
Com_Printf("SDL SetVideoMode failed: %s\n", SDL_GetError());
|
||||||
Com_Printf("Reverting to %s r_mode %i (%ix%i) without MSAA.\n",
|
Com_Printf("Reverting to %s r_mode %i (%ix%i) without MSAA.\n",
|
||||||
|
@ -334,6 +235,7 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
|
|
||||||
/* Try to recover */
|
/* Try to recover */
|
||||||
Cvar_SetValue("gl_msaa_samples", 0);
|
Cvar_SetValue("gl_msaa_samples", 0);
|
||||||
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
|
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
|
||||||
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
|
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
|
||||||
}
|
}
|
||||||
|
@ -345,7 +247,9 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
/* Try to recover */
|
/* Try to recover */
|
||||||
Cvar_SetValue("r_mode", 4);
|
Cvar_SetValue("r_mode", 4);
|
||||||
Cvar_SetValue("vid_fullscreen", 0);
|
Cvar_SetValue("vid_fullscreen", 0);
|
||||||
|
|
||||||
VID_NewWindow(width, height);
|
VID_NewWindow(width, height);
|
||||||
|
|
||||||
*pwidth = width = 640;
|
*pwidth = width = 640;
|
||||||
*pheight = height = 480;
|
*pheight = height = 480;
|
||||||
flags &= ~fs_flag;
|
flags &= ~fs_flag;
|
||||||
|
@ -368,11 +272,8 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: window title is now set in re.InitContext() to include renderer name */
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
/* Set the window icon - For SDL2, this must be done after creating the window */
|
/* Set the window icon - For SDL2, this must be done after creating the window */
|
||||||
SetSDLIcon();
|
SetSDLIcon();
|
||||||
#endif
|
|
||||||
|
|
||||||
/* No cursor */
|
/* No cursor */
|
||||||
SDL_ShowCursor(0);
|
SDL_ShowCursor(0);
|
||||||
|
@ -387,19 +288,16 @@ GLimp_InitGraphics(int fullscreen, int *pwidth, int *pheight)
|
||||||
*/
|
*/
|
||||||
void GLimp_GrabInput(qboolean grab)
|
void GLimp_GrabInput(qboolean grab)
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
if(window != NULL)
|
if(window != NULL)
|
||||||
{
|
{
|
||||||
SDL_SetWindowGrab(window, grab ? SDL_TRUE : SDL_FALSE);
|
SDL_SetWindowGrab(window, grab ? SDL_TRUE : SDL_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SDL_SetRelativeMouseMode(grab ? SDL_TRUE : SDL_FALSE) < 0)
|
if(SDL_SetRelativeMouseMode(grab ? SDL_TRUE : SDL_FALSE) < 0)
|
||||||
{
|
{
|
||||||
Com_Printf("WARNING: Setting Relative Mousemode failed, reason: %s\n", SDL_GetError());
|
Com_Printf("WARNING: Setting Relative Mousemode failed, reason: %s\n", SDL_GetError());
|
||||||
Com_Printf(" You should probably update to SDL 2.0.3 or newer!\n");
|
Com_Printf(" You should probably update to SDL 2.0.3 or newer!\n");
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
SDL_WM_GrabInput(grab ? SDL_GRAB_ON : SDL_GRAB_OFF);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int glimp_refreshRate = -1;
|
int glimp_refreshRate = -1;
|
||||||
|
@ -414,15 +312,14 @@ int GLimp_GetRefreshRate(void)
|
||||||
glimp_refreshRate = ceil(vid_displayrefreshrate->value);
|
glimp_refreshRate = ceil(vid_displayrefreshrate->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
|
|
||||||
// do this only once, assuming people don't change their display settings
|
// do this only once, assuming people don't change their display settings
|
||||||
// or plug in new displays while the game is running
|
// or plug in new displays while the game is running
|
||||||
if (glimp_refreshRate == -1)
|
if (glimp_refreshRate == -1)
|
||||||
{
|
{
|
||||||
SDL_DisplayMode mode;
|
SDL_DisplayMode mode;
|
||||||
// TODO: probably refreshRate should be reset to -1 if window is moved
|
|
||||||
int i = SDL_GetWindowDisplayIndex(window);
|
int i = SDL_GetWindowDisplayIndex(window);
|
||||||
|
|
||||||
if(i >= 0 && SDL_GetCurrentDisplayMode(i, &mode) == 0)
|
if(i >= 0 && SDL_GetCurrentDisplayMode(i, &mode) == 0)
|
||||||
{
|
{
|
||||||
glimp_refreshRate = mode.refresh_rate;
|
glimp_refreshRate = mode.refresh_rate;
|
||||||
|
@ -442,10 +339,6 @@ int GLimp_GetRefreshRate(void)
|
||||||
glimp_refreshRate++;
|
glimp_refreshRate++;
|
||||||
|
|
||||||
return glimp_refreshRate;
|
return glimp_refreshRate;
|
||||||
#else
|
|
||||||
// Asume 60hz.
|
|
||||||
return 60;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -458,15 +351,11 @@ VID_ShutdownWindow(void)
|
||||||
{
|
{
|
||||||
/* cleanly ungrab input (needs window) */
|
/* cleanly ungrab input (needs window) */
|
||||||
GLimp_GrabInput(false);
|
GLimp_GrabInput(false);
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
#else
|
|
||||||
SDL_FreeSurface(window);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
window = NULL;
|
window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// make sure that after vid_restart the refreshrate will be queried from SDL2 again.
|
// make sure that after vid_restart the refreshrate will be queried from SDL2 again.
|
||||||
glimp_refreshRate = -1;
|
glimp_refreshRate = -1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue