mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-21 20:21:09 +00:00
opengl renders: support of gl_version_override cvar
Provides way to check render with lower officialy reported OpenGL version. Same as: * MESA_GL_VERSION_OVERRIDE=4.6 * MESA_GLSL_VERSION_OVERRIDE=460
This commit is contained in:
parent
5babb3b96a
commit
02b8e85c01
15 changed files with 173 additions and 21 deletions
2
Makefile
2
Makefile
|
@ -1115,6 +1115,7 @@ REFGL3_OBJS_ := \
|
|||
src/client/refresh/gl3/gl3_surf.o \
|
||||
src/client/refresh/gl3/gl3_warp.o \
|
||||
src/client/refresh/gl3/gl3_shaders.o \
|
||||
src/client/refresh/files/glshaders.o \
|
||||
src/client/refresh/files/mesh.o \
|
||||
src/client/refresh/files/light.o \
|
||||
src/client/refresh/files/surf.o \
|
||||
|
@ -1160,6 +1161,7 @@ REFGL4_OBJS_ := \
|
|||
src/client/refresh/gl4/gl4_surf.o \
|
||||
src/client/refresh/gl4/gl4_warp.o \
|
||||
src/client/refresh/gl4/gl4_shaders.o \
|
||||
src/client/refresh/files/glshaders.o \
|
||||
src/client/refresh/files/mesh.o \
|
||||
src/client/refresh/files/light.o \
|
||||
src/client/refresh/files/surf.o \
|
||||
|
|
|
@ -473,6 +473,14 @@ Set `0` by default.
|
|||
Other supported values: `GL_NEAREST_MIPMAP_NEAREST`,
|
||||
`GL_NEAREST_MIPMAP_LINEAR`, `GL_LINEAR_MIPMAP_LINEAR`
|
||||
|
||||
* **gl_version_override**: Override required by render OpenGL version,
|
||||
should be used only for debug purpose and useful if OpenGL implementation
|
||||
does not report required version and implements required by render extensions.
|
||||
- `0`: check required version of OpenGL,
|
||||
- `1`: render will try to run with OpenGL 1.0,
|
||||
- `2`: render will try to run with OpenGL 2.0,
|
||||
- `3`: render will try to run with OpenGL 3.0,
|
||||
- `4`: render will try to run with OpenGL 4.0.
|
||||
|
||||
## Graphics (OpenGL 1.4 only)
|
||||
|
||||
|
|
86
src/client/refresh/files/glshaders.c
Normal file
86
src/client/refresh/files/glshaders.c
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2001 Id Software, Inc.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* =======================================================================
|
||||
*
|
||||
* Shared code for generate GL shaders
|
||||
*
|
||||
* =======================================================================
|
||||
*/
|
||||
|
||||
#include "../ref_shared.h"
|
||||
|
||||
const char*
|
||||
glshader_version(int major_version, int minor_version)
|
||||
{
|
||||
#ifdef YQ2_GL3_GLES3
|
||||
if (major_version == 2)
|
||||
{
|
||||
return "#version 100\nprecision mediump float;\n";
|
||||
}
|
||||
else if (major_version == 3)
|
||||
{
|
||||
switch(minor_version)
|
||||
{
|
||||
case 0: return "#version 300 es\nprecision mediump float;\n";
|
||||
case 1: return "#version 310 es\nprecision mediump float;\n";
|
||||
case 2: return "#version 320 es\nprecision mediump float;\n";
|
||||
default: return "#version 320 es\nprecision mediump float;\n";
|
||||
}
|
||||
}
|
||||
#else // Desktop GL
|
||||
if (major_version == 2)
|
||||
{
|
||||
switch(minor_version)
|
||||
{
|
||||
case 0: return "#version 110\n";
|
||||
case 1: return "#version 120\n";
|
||||
default: return "#version 120\n";
|
||||
}
|
||||
}
|
||||
else if (major_version == 3)
|
||||
{
|
||||
switch(minor_version)
|
||||
{
|
||||
case 0: return "#version 130\n";
|
||||
case 1: return "#version 140\n";
|
||||
case 2: return "#version 150\n";
|
||||
case 3: return "#version 330\n";
|
||||
default: return "#version 330\n";
|
||||
}
|
||||
}
|
||||
else if (major_version == 4)
|
||||
{
|
||||
switch(minor_version)
|
||||
{
|
||||
case 0: return "#version 400\n";
|
||||
case 1: return "#version 410\n";
|
||||
case 2: return "#version 420\n";
|
||||
case 3: return "#version 430\n";
|
||||
case 4: return "#version 440\n";
|
||||
case 5: return "#version 450\n";
|
||||
case 6: return "#version 460\n";
|
||||
default: return "#version 460\n";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* some unknown version */
|
||||
return "#version 100\nprecision mediump float;\n";
|
||||
}
|
|
@ -79,6 +79,7 @@ cvar_t *r_validation;
|
|||
|
||||
cvar_t *r_lightlevel;
|
||||
cvar_t *gl1_overbrightbits;
|
||||
cvar_t *gl_version_override;
|
||||
|
||||
cvar_t *gl1_particle_min_size;
|
||||
cvar_t *gl1_particle_max_size;
|
||||
|
@ -1196,6 +1197,7 @@ R_Register(void)
|
|||
gl1_particle_att_c = ri.Cvar_Get("gl1_particle_att_c", "0.01", CVAR_ARCHIVE);
|
||||
gl1_particle_square = ri.Cvar_Get("gl1_particle_square", "0", CVAR_ARCHIVE);
|
||||
|
||||
gl_version_override = ri.Cvar_Get("gl_version_override", "0", CVAR_ARCHIVE);
|
||||
r_modulate = ri.Cvar_Get("r_modulate", "1", CVAR_ARCHIVE);
|
||||
r_mode = ri.Cvar_Get("r_mode", "4", CVAR_ARCHIVE);
|
||||
gl_lightmap = ri.Cvar_Get("r_lightmap", "0", 0);
|
||||
|
|
|
@ -233,10 +233,22 @@ int RI_InitContext(void* win)
|
|||
|
||||
if (gl_config.major_version < 1 || (gl_config.major_version == 1 && gl_config.minor_version < 4))
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): Got an OpenGL version %d.%d context - need (at least) 1.4!\n",
|
||||
__func__, gl_config.major_version, gl_config.minor_version);
|
||||
if ((!gl_version_override->value) ||
|
||||
(gl_config.major_version < gl_version_override->value))
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): Got an OpenGL version %d.%d context - need (at least) 1.4!\n",
|
||||
__func__, gl_config.major_version, gl_config.minor_version);
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): Warning: glad only got GL version %d.%d.\n"
|
||||
"Some functionality could be broken.\n",
|
||||
__func__, gl_config.major_version, gl_config.minor_version);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if we've got the requested MSAA.
|
||||
|
|
|
@ -184,6 +184,7 @@ extern cvar_t *r_lerp_list;
|
|||
extern cvar_t *r_2D_unfiltered;
|
||||
extern cvar_t *r_videos_unfiltered;
|
||||
|
||||
extern cvar_t *gl_version_override;
|
||||
extern cvar_t *gl_lightmap;
|
||||
extern cvar_t *gl_shadows;
|
||||
extern cvar_t *gl1_stencilshadow;
|
||||
|
|
|
@ -80,6 +80,7 @@ const hmm_mat4 gl3_identityMat4 = {{
|
|||
}};
|
||||
|
||||
cvar_t *gl_msaa_samples;
|
||||
cvar_t *gl_version_override;
|
||||
cvar_t *r_vsync;
|
||||
cvar_t *r_retexturing;
|
||||
cvar_t *r_maptype;
|
||||
|
@ -209,6 +210,7 @@ GL3_Register(void)
|
|||
gl_drawbuffer = ri.Cvar_Get("gl_drawbuffer", "GL_BACK", 0);
|
||||
r_vsync = ri.Cvar_Get("r_vsync", "1", CVAR_ARCHIVE);
|
||||
gl_msaa_samples = ri.Cvar_Get ( "r_msaa_samples", "0", CVAR_ARCHIVE );
|
||||
gl_version_override = ri.Cvar_Get ( "gl_version_override", "0", CVAR_ARCHIVE );
|
||||
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
|
||||
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
|
||||
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
|
||||
|
|
|
@ -250,8 +250,16 @@ int GL3_PrepareForWindow(void)
|
|||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
||||
#else // Desktop GL
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||
if (gl_version_override->value)
|
||||
{
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, gl_version_override->value);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||
}
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
#endif
|
||||
|
||||
|
@ -380,10 +388,21 @@ int GL3_InitContext(void* win)
|
|||
else if (GLVersion.major < 3 || (GLVersion.major == 3 && GLVersion.minor < 2))
|
||||
#endif
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): ERROR: glad only got GL version %d.%d!\n",
|
||||
__func__, GLVersion.major, GLVersion.minor);
|
||||
if ((!gl_version_override->value) ||
|
||||
(GLVersion.major < gl_version_override->value))
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): ERROR: glad only got GL version %d.%d!\n",
|
||||
__func__, GLVersion.major, GLVersion.minor);
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): Warning: glad only got GL version %d.%d.\n"
|
||||
"Some functionality could be broken.\n",
|
||||
__func__, GLVersion.major, GLVersion.minor);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -35,12 +35,7 @@ static GLuint
|
|||
CompileShader(GLenum shaderType, const char* shaderSrc, const char* shaderSrc2)
|
||||
{
|
||||
GLuint shader = glCreateShader(shaderType);
|
||||
|
||||
#ifdef YQ2_GL3_GLES3
|
||||
const char* version = "#version 300 es\nprecision mediump float;\n";
|
||||
#else // Desktop GL
|
||||
const char* version = "#version 150\n";
|
||||
#endif
|
||||
const char* version = glshader_version(gl3config.major_version, gl3config.minor_version);
|
||||
const char* sources[3] = { version, shaderSrc, shaderSrc2 };
|
||||
int numSources = shaderSrc2 != NULL ? 3 : 2;
|
||||
|
||||
|
|
|
@ -506,6 +506,7 @@ extern void GL3_UpdateUBOLights(void);
|
|||
// ############ Cvars ###########
|
||||
|
||||
extern cvar_t *gl_msaa_samples;
|
||||
extern cvar_t *gl_version_override;
|
||||
extern cvar_t *r_vsync;
|
||||
extern cvar_t *r_retexturing;
|
||||
extern cvar_t *r_maptype;
|
||||
|
|
|
@ -76,6 +76,7 @@ const hmm_mat4 gl4_identityMat4 = {{
|
|||
}};
|
||||
|
||||
cvar_t *gl_msaa_samples;
|
||||
cvar_t *gl_version_override;
|
||||
cvar_t *r_vsync;
|
||||
cvar_t *r_retexturing;
|
||||
cvar_t *r_maptype;
|
||||
|
@ -205,6 +206,7 @@ GL4_Register(void)
|
|||
gl_drawbuffer = ri.Cvar_Get("gl_drawbuffer", "GL_BACK", 0);
|
||||
r_vsync = ri.Cvar_Get("r_vsync", "1", CVAR_ARCHIVE);
|
||||
gl_msaa_samples = ri.Cvar_Get ( "r_msaa_samples", "0", CVAR_ARCHIVE );
|
||||
gl_version_override = ri.Cvar_Get ( "gl_version_override", "0", CVAR_ARCHIVE );
|
||||
r_retexturing = ri.Cvar_Get("r_retexturing", "1", CVAR_ARCHIVE);
|
||||
r_maptype = ri.Cvar_Get("maptype", "0", CVAR_ARCHIVE);
|
||||
r_scale8bittextures = ri.Cvar_Get("r_scale8bittextures", "0", CVAR_ARCHIVE);
|
||||
|
|
|
@ -232,8 +232,16 @@ int GL4_PrepareForWindow(void)
|
|||
gl4config.stencil = false;
|
||||
}
|
||||
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6);
|
||||
if (gl_version_override->value)
|
||||
{
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, gl_version_override->value);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6);
|
||||
}
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
|
||||
// Set GL context flags.
|
||||
|
@ -351,10 +359,21 @@ int GL4_InitContext(void* win)
|
|||
}
|
||||
else if (GLVersion.major < 4 || (GLVersion.major == 4 && GLVersion.minor < 6))
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): ERROR: glad only got GL version %d.%d!\n",
|
||||
__func__, GLVersion.major, GLVersion.minor);
|
||||
if ((!gl_version_override->value) ||
|
||||
(GLVersion.major < gl_version_override->value))
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): ERROR: glad only got GL version %d.%d!\n",
|
||||
__func__, GLVersion.major, GLVersion.minor);
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
R_Printf(PRINT_ALL, "%s(): Warning: glad only got GL version %d.%d.\n"
|
||||
"Some functionality could be broken.\n",
|
||||
__func__, GLVersion.major, GLVersion.minor);
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -35,8 +35,7 @@ static GLuint
|
|||
CompileShader(GLenum shaderType, const char* shaderSrc, const char* shaderSrc2)
|
||||
{
|
||||
GLuint shader = glCreateShader(shaderType);
|
||||
|
||||
const char* version = "#version 460\n";
|
||||
const char* version = glshader_version(gl4config.major_version, gl4config.minor_version);
|
||||
const char* sources[3] = { version, shaderSrc, shaderSrc2 };
|
||||
int numSources = shaderSrc2 != NULL ? 3 : 2;
|
||||
|
||||
|
|
|
@ -496,6 +496,7 @@ extern void GL4_UpdateUBOLights(void);
|
|||
// ############ Cvars ###########
|
||||
|
||||
extern cvar_t *gl_msaa_samples;
|
||||
extern cvar_t *gl_version_override;
|
||||
extern cvar_t *r_vsync;
|
||||
extern cvar_t *r_retexturing;
|
||||
extern cvar_t *r_maptype;
|
||||
|
|
|
@ -418,4 +418,7 @@ extern void R_ClearSkyBox(float skymins[2][6], float skymaxs[2][6]);
|
|||
extern void R_MakeSkyVec(float s, float t, int axis, mvtx_t* vert,
|
||||
qboolean farsee, float sky_min, float sky_max);
|
||||
|
||||
/* GL only code */
|
||||
extern const char* glshader_version(int major_version, int minor_version);
|
||||
|
||||
#endif /* SRC_CLIENT_REFRESH_REF_SHARED_H_ */
|
||||
|
|
Loading…
Reference in a new issue