Remove SDL 1.2 support from the GL3 SDL backend.
Do some minor cleanup, while here.
This commit is contained in:
parent
0e512a8f5d
commit
f03e95901f
|
@ -30,36 +30,25 @@
|
||||||
|
|
||||||
#include "header/local.h"
|
#include "header/local.h"
|
||||||
|
|
||||||
#ifdef SDL2
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.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;
|
||||||
static SDL_GLContext context = NULL;
|
static SDL_GLContext context = NULL;
|
||||||
#else
|
static qboolean vsyncActive = false;
|
||||||
static SDL_Surface* window = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
qboolean have_stencil = false;
|
qboolean have_stencil = false;
|
||||||
static qboolean vsyncActive = false;
|
|
||||||
|
|
||||||
// called by GLimp_InitGraphics() before creating window,
|
// called by GLimp_InitGraphics() before creating window,
|
||||||
// returns flags for SDL window creation, -1 on error
|
// returns flags for SDL window creation, -1 on error
|
||||||
int GL3_PrepareForWindow(void)
|
int GL3_PrepareForWindow(void)
|
||||||
{
|
{
|
||||||
unsigned int flags = 0;
|
|
||||||
int msaa_samples = 0;
|
int msaa_samples = 0;
|
||||||
|
|
||||||
if(SDL_GL_LoadLibrary(NULL) < 0) // Default OpenGL is fine.
|
if(SDL_GL_LoadLibrary(NULL) < 0) // Default OpenGL is fine.
|
||||||
{
|
{
|
||||||
// TODO: is there a better way?
|
// TODO: is there a better way?
|
||||||
ri.Sys_Error(ERR_FATAL, "Couldn't load libGL: %s!", SDL_GetError());
|
ri.Sys_Error(ERR_FATAL, "Couldn't load libGL: %s!", SDL_GetError());
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,11 +59,12 @@ int GL3_PrepareForWindow(void)
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
|
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||||
|
|
||||||
int contextFlags = SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG;
|
int contextFlags = SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG;
|
||||||
|
|
||||||
if(gl3_debugcontext && gl3_debugcontext->value)
|
if(gl3_debugcontext && gl3_debugcontext->value)
|
||||||
{
|
{
|
||||||
contextFlags |= SDL_GL_CONTEXT_DEBUG_FLAG;
|
contextFlags |= SDL_GL_CONTEXT_DEBUG_FLAG;
|
||||||
|
@ -83,16 +73,8 @@ int GL3_PrepareForWindow(void)
|
||||||
{
|
{
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, contextFlags);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, contextFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl3config.compat_profile = false;
|
gl3config.compat_profile = false;
|
||||||
#else // SDL1.2 doesn't have all this, so we'll have some kind of compatibility profile
|
|
||||||
gl3config.compat_profile = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if !SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
/* Set vsync - For SDL1.2, this must be done before creating the window */
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, r_vsync->value ? 1 : 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (gl_msaa_samples->value)
|
if (gl_msaa_samples->value)
|
||||||
{
|
{
|
||||||
|
@ -101,14 +83,18 @@ int GL3_PrepareForWindow(void)
|
||||||
if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) < 0)
|
if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) < 0)
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "MSAA is unsupported: %s\n", SDL_GetError());
|
R_Printf(PRINT_ALL, "MSAA is unsupported: %s\n", SDL_GetError());
|
||||||
|
|
||||||
ri.Cvar_SetValue ("gl_msaa_samples", 0);
|
ri.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);
|
||||||
}
|
}
|
||||||
else if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaa_samples) < 0)
|
else if (SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, msaa_samples) < 0)
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "MSAA %ix is unsupported: %s\n", msaa_samples, SDL_GetError());
|
R_Printf(PRINT_ALL, "MSAA %ix is unsupported: %s\n", msaa_samples, SDL_GetError());
|
||||||
|
|
||||||
ri.Cvar_SetValue("gl_msaa_samples", 0);
|
ri.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);
|
||||||
}
|
}
|
||||||
|
@ -119,14 +105,7 @@ int GL3_PrepareForWindow(void)
|
||||||
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
|
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initiate the flags */
|
return SDL_WINDOW_OPENGL;
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
flags = SDL_WINDOW_OPENGL;
|
|
||||||
#else // SDL 1.2
|
|
||||||
flags = SDL_OPENGL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return flags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -143,6 +122,7 @@ DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei le
|
||||||
const char* sourceStr = "Source: Unknown";
|
const char* sourceStr = "Source: Unknown";
|
||||||
const char* typeStr = "Type: Unknown";
|
const char* typeStr = "Type: Unknown";
|
||||||
const char* severityStr = "Severity: Unknown";
|
const char* severityStr = "Severity: Unknown";
|
||||||
|
|
||||||
switch(severity)
|
switch(severity)
|
||||||
{
|
{
|
||||||
case QGL_DEBUG_SEVERITY_NOTIFICATION:
|
case QGL_DEBUG_SEVERITY_NOTIFICATION:
|
||||||
|
@ -153,26 +133,32 @@ DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei le
|
||||||
case GL_DEBUG_SEVERITY_MEDIUM_ARB: severityStr = "Severity: Medium"; break;
|
case GL_DEBUG_SEVERITY_MEDIUM_ARB: severityStr = "Severity: Medium"; break;
|
||||||
case GL_DEBUG_SEVERITY_LOW_ARB: severityStr = "Severity: Low"; break;
|
case GL_DEBUG_SEVERITY_LOW_ARB: severityStr = "Severity: Low"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(source)
|
switch(source)
|
||||||
{
|
{
|
||||||
#define SRCCASE(X) case GL_DEBUG_SOURCE_ ## X ## _ARB: sourceStr = "Source: " #X; break;
|
#define SRCCASE(X) case GL_DEBUG_SOURCE_ ## X ## _ARB: sourceStr = "Source: " #X; break;
|
||||||
|
|
||||||
SRCCASE(API);
|
SRCCASE(API);
|
||||||
SRCCASE(WINDOW_SYSTEM);
|
SRCCASE(WINDOW_SYSTEM);
|
||||||
SRCCASE(SHADER_COMPILER);
|
SRCCASE(SHADER_COMPILER);
|
||||||
SRCCASE(THIRD_PARTY);
|
SRCCASE(THIRD_PARTY);
|
||||||
SRCCASE(APPLICATION);
|
SRCCASE(APPLICATION);
|
||||||
SRCCASE(OTHER);
|
SRCCASE(OTHER);
|
||||||
|
|
||||||
#undef SRCCASE
|
#undef SRCCASE
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
#define TYPECASE(X) case GL_DEBUG_TYPE_ ## X ## _ARB: typeStr = "Type: " #X; break;
|
#define TYPECASE(X) case GL_DEBUG_TYPE_ ## X ## _ARB: typeStr = "Type: " #X; break;
|
||||||
|
|
||||||
TYPECASE(ERROR);
|
TYPECASE(ERROR);
|
||||||
TYPECASE(DEPRECATED_BEHAVIOR);
|
TYPECASE(DEPRECATED_BEHAVIOR);
|
||||||
TYPECASE(UNDEFINED_BEHAVIOR);
|
TYPECASE(UNDEFINED_BEHAVIOR);
|
||||||
TYPECASE(PORTABILITY);
|
TYPECASE(PORTABILITY);
|
||||||
TYPECASE(PERFORMANCE);
|
TYPECASE(PERFORMANCE);
|
||||||
TYPECASE(OTHER);
|
TYPECASE(OTHER);
|
||||||
|
|
||||||
#undef TYPECASE
|
#undef TYPECASE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,24 +174,21 @@ int GL3_InitContext(void* win)
|
||||||
if(win == NULL)
|
if(win == NULL)
|
||||||
{
|
{
|
||||||
ri.Sys_Error(ERR_FATAL, "R_InitContext() must not be called with NULL argument!");
|
ri.Sys_Error(ERR_FATAL, "R_InitContext() must not be called with NULL argument!");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
window = (SDL_Window*)win;
|
|
||||||
|
|
||||||
|
window = (SDL_Window*)win;
|
||||||
context = SDL_GL_CreateContext(window);
|
context = SDL_GL_CreateContext(window);
|
||||||
|
|
||||||
if(context == NULL)
|
if(context == NULL)
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "GL3_InitContext(): Creating OpenGL Context failed: %s\n", SDL_GetError());
|
R_Printf(PRINT_ALL, "GL3_InitContext(): Creating OpenGL Context failed: %s\n", SDL_GetError());
|
||||||
|
|
||||||
window = NULL;
|
window = NULL;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else // SDL 1.2
|
|
||||||
|
|
||||||
window = (SDL_Surface*)win;
|
|
||||||
// context is created implicitly with window, nothing to do here
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (gl_msaa_samples->value)
|
if (gl_msaa_samples->value)
|
||||||
{
|
{
|
||||||
|
@ -215,12 +198,8 @@ int GL3_InitContext(void* win)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
/* For SDL2, this must be done after creating the window */
|
/* For SDL2, this must be done after creating the window */
|
||||||
GL3_SetSwapInterval();
|
GL3_SetSwapInterval();
|
||||||
#else // SDL1.2 - set vsyncActive to whatever is configured, hoping it was actually set
|
|
||||||
vsyncActive = r_vsync->value ? 1 : 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Initialize the stencil buffer */
|
/* Initialize the stencil buffer */
|
||||||
if (SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &stencil_bits) == 0)
|
if (SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &stencil_bits) == 0)
|
||||||
|
@ -236,11 +215,13 @@ int GL3_InitContext(void* win)
|
||||||
if(!gladLoadGLLoader(SDL_GL_GetProcAddress))
|
if(!gladLoadGLLoader(SDL_GL_GetProcAddress))
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "GL3_InitContext(): ERROR: loading OpenGL function pointers failed!\n");
|
R_Printf(PRINT_ALL, "GL3_InitContext(): ERROR: loading OpenGL function pointers failed!\n");
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (GLVersion.major < 3 || (GLVersion.major == 3 && GLVersion.minor < 2))
|
else if (GLVersion.major < 3 || (GLVersion.major == 3 && GLVersion.minor < 2))
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "GL3_InitContext(): ERROR: glad only got GL version %d.%d!\n", GLVersion.major, GLVersion.minor);
|
R_Printf(PRINT_ALL, "GL3_InitContext(): ERROR: glad only got GL version %d.%d!\n", GLVersion.major, GLVersion.minor);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -248,12 +229,7 @@ int GL3_InitContext(void* win)
|
||||||
R_Printf(PRINT_ALL, "Successfully loaded OpenGL function pointers using glad, got version %d.%d!\n", GLVersion.major, GLVersion.minor);
|
R_Printf(PRINT_ALL, "Successfully loaded OpenGL function pointers using glad, got version %d.%d!\n", GLVersion.major, GLVersion.minor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
gl3config.debug_output = GLAD_GL_ARB_debug_output != 0;
|
gl3config.debug_output = GLAD_GL_ARB_debug_output != 0;
|
||||||
#else
|
|
||||||
gl3config.debug_output = 0; // no debug contexts with SDL1.2 - can't set the context flag!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gl3config.anisotropic = GLAD_GL_EXT_texture_filter_anisotropic != 0;
|
gl3config.anisotropic = GLAD_GL_EXT_texture_filter_anisotropic != 0;
|
||||||
|
|
||||||
gl3config.major_version = GLVersion.major;
|
gl3config.major_version = GLVersion.major;
|
||||||
|
@ -272,26 +248,16 @@ int GL3_InitContext(void* win)
|
||||||
|
|
||||||
/* Window title - set here so we can display renderer name in it */
|
/* Window title - set here so we can display renderer name in it */
|
||||||
snprintf(title, sizeof(title), "Yamagi Quake II %s - OpenGL 3.2", YQ2VERSION);
|
snprintf(title, sizeof(title), "Yamagi Quake II %s - OpenGL 3.2", YQ2VERSION);
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_SetWindowTitle(window, title);
|
SDL_SetWindowTitle(window, title);
|
||||||
#else
|
|
||||||
SDL_WM_SetCaption(title, title);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void GL3_SetSwapInterval(void)
|
void GL3_SetSwapInterval(void)
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
/* Set vsync - TODO: -1 could be set for "late swap tearing" */
|
/* Set vsync - TODO: -1 could be set for "late swap tearing" */
|
||||||
SDL_GL_SetSwapInterval(r_vsync->value ? 1 : 0);
|
SDL_GL_SetSwapInterval(r_vsync->value ? 1 : 0);
|
||||||
vsyncActive = SDL_GL_GetSwapInterval() != 0;
|
vsyncActive = SDL_GL_GetSwapInterval() != 0;
|
||||||
#else
|
|
||||||
R_Printf(PRINT_ALL, "SDL1.2 requires a vid_restart to apply changes to r_vsync (vsync)!\n");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean GL3_IsVsyncActive(void)
|
qboolean GL3_IsVsyncActive(void)
|
||||||
|
@ -304,11 +270,7 @@ qboolean GL3_IsVsyncActive(void)
|
||||||
*/
|
*/
|
||||||
void GL3_EndFrame(void)
|
void GL3_EndFrame(void)
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
SDL_GL_SwapWindow(window);
|
SDL_GL_SwapWindow(window);
|
||||||
#else
|
|
||||||
SDL_GL_SwapBuffers();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -316,35 +278,19 @@ void GL3_EndFrame(void)
|
||||||
*/
|
*/
|
||||||
void GL3_ShutdownWindow(qboolean contextOnly)
|
void GL3_ShutdownWindow(qboolean contextOnly)
|
||||||
{
|
{
|
||||||
/* Clear the backbuffer and make it
|
|
||||||
current. This may help some broken
|
|
||||||
video drivers like the AMD Catalyst
|
|
||||||
to avoid artifacts in unused screen
|
|
||||||
areas.
|
|
||||||
Only do this if we have a context, though. */
|
|
||||||
if (window)
|
if (window)
|
||||||
{
|
{
|
||||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
|
||||||
if(context)
|
if(context)
|
||||||
{
|
{
|
||||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
GL3_EndFrame();
|
|
||||||
|
|
||||||
SDL_GL_DeleteContext(context);
|
SDL_GL_DeleteContext(context);
|
||||||
context = NULL;
|
context = NULL;
|
||||||
}
|
}
|
||||||
#else // SDL1.2
|
|
||||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
GL3_EndFrame();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
window = NULL;
|
|
||||||
|
|
||||||
if (!contextOnly)
|
if (!contextOnly)
|
||||||
{
|
{
|
||||||
ri.Vid_ShutdownWindow();
|
ri.Vid_ShutdownWindow();
|
||||||
|
|
||||||
|
window = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue