Add common OpenGL version parsing + OpenGL 3 fixes
- Parse OpenGL version in sdl_glimp.c to share with both renderers. - Add GL_VERSION_ATLEAST(major, minor) macro. - Get address of glGetStringi if using OpenGL 3. - Fix glConfig.extensions_string when using GL3 core context in opengl2 renderer. - Make opengl1 renderer's gfxinfo support qglGetStringi too.
This commit is contained in:
parent
20573bce43
commit
c9d12aa3f3
6 changed files with 89 additions and 25 deletions
|
@ -53,6 +53,8 @@ cvar_t *r_allowResize; // make window resizable
|
|||
cvar_t *r_centerWindow;
|
||||
cvar_t *r_sdlDriver;
|
||||
|
||||
int qglMajorVersion, qglMinorVersion;
|
||||
|
||||
void (APIENTRYP qglActiveTextureARB) (GLenum texture);
|
||||
void (APIENTRYP qglClientActiveTextureARB) (GLenum texture);
|
||||
void (APIENTRYP qglMultiTexCoord2fARB) (GLenum target, GLfloat s, GLfloat t);
|
||||
|
@ -63,6 +65,7 @@ void (APIENTRYP qglUnlockArraysEXT) (void);
|
|||
#define GLE(ret, name, ...) name##proc * qgl##name;
|
||||
QGL_1_0_PROCS;
|
||||
QGL_1_1_PROCS;
|
||||
QGL_3_0_PROCS;
|
||||
#undef GLE
|
||||
|
||||
/*
|
||||
|
@ -224,6 +227,7 @@ Get addresses for OpenGL functions.
|
|||
*/
|
||||
static qboolean GLimp_GetProcAddresses( void ) {
|
||||
qboolean success = qtrue;
|
||||
const char *version;
|
||||
|
||||
#ifdef __SDL_NOGETPROCADDR__
|
||||
#define GLE( ret, name, ... ) qgl##name = gl#name;
|
||||
|
@ -235,8 +239,32 @@ static qboolean GLimp_GetProcAddresses( void ) {
|
|||
}
|
||||
#endif
|
||||
|
||||
QGL_1_0_PROCS;
|
||||
QGL_1_1_PROCS;
|
||||
// OpenGL 1.0
|
||||
GLE(const GLubyte *, GetString, GLenum name)
|
||||
|
||||
if ( !qglGetString ) {
|
||||
Com_Error( ERR_FATAL, "glGetString is NULL" );
|
||||
}
|
||||
|
||||
version = (const char *)qglGetString( GL_VERSION );
|
||||
|
||||
if ( !version ) {
|
||||
Com_Error( ERR_FATAL, "GL_VERSION is NULL\n" );
|
||||
}
|
||||
|
||||
sscanf( version, "%d.%d", &qglMajorVersion, &qglMinorVersion );
|
||||
|
||||
// require OpenGL 1.1
|
||||
if ( QGL_VERSION_ATLEAST( 1, 1 ) ) {
|
||||
QGL_1_0_PROCS;
|
||||
QGL_1_1_PROCS;
|
||||
} else {
|
||||
Com_Error( ERR_FATAL, "Unsupported OpenGL Version: %s\n", version );
|
||||
}
|
||||
|
||||
if ( QGL_VERSION_ATLEAST( 3, 0 ) ) {
|
||||
QGL_3_0_PROCS;
|
||||
}
|
||||
|
||||
#undef GLE
|
||||
|
||||
|
@ -253,8 +281,12 @@ Clear addresses for OpenGL functions.
|
|||
static void GLimp_ClearProcAddresses( void ) {
|
||||
#define GLE( ret, name, ... ) qgl##name = NULL;
|
||||
|
||||
qglMajorVersion = 0;
|
||||
qglMinorVersion = 0;
|
||||
|
||||
QGL_1_0_PROCS;
|
||||
QGL_1_1_PROCS;
|
||||
QGL_3_0_PROCS;
|
||||
|
||||
#undef GLE
|
||||
}
|
||||
|
@ -921,10 +953,37 @@ success:
|
|||
if (*glConfig.renderer_string && glConfig.renderer_string[strlen(glConfig.renderer_string) - 1] == '\n')
|
||||
glConfig.renderer_string[strlen(glConfig.renderer_string) - 1] = 0;
|
||||
Q_strncpyz( glConfig.version_string, (char *) qglGetString (GL_VERSION), sizeof( glConfig.version_string ) );
|
||||
if (qglGetString(GL_EXTENSIONS))
|
||||
Q_strncpyz( glConfig.extensions_string, (char *) qglGetString (GL_EXTENSIONS), sizeof( glConfig.extensions_string ) );
|
||||
|
||||
// manually create extension list if using OpenGL 3
|
||||
if ( qglGetStringi )
|
||||
{
|
||||
int i, numExtensions, extensionLength, listLength;
|
||||
const char *extension;
|
||||
|
||||
qglGetIntegerv( GL_NUM_EXTENSIONS, &numExtensions );
|
||||
listLength = 0;
|
||||
|
||||
for ( i = 0; i < numExtensions; i++ )
|
||||
{
|
||||
extension = (char *) qglGetStringi( GL_EXTENSIONS, i );
|
||||
extensionLength = strlen( extension );
|
||||
|
||||
if ( ( listLength + extensionLength + 1 ) >= sizeof( glConfig.extensions_string ) )
|
||||
break;
|
||||
|
||||
if ( i > 0 ) {
|
||||
Q_strcat( glConfig.extensions_string, sizeof( glConfig.extensions_string ), " " );
|
||||
listLength++;
|
||||
}
|
||||
|
||||
Q_strcat( glConfig.extensions_string, sizeof( glConfig.extensions_string ), extension );
|
||||
listLength += extensionLength;
|
||||
}
|
||||
}
|
||||
else
|
||||
Q_strncpyz( glConfig.extensions_string, "Not available (core context, fixme)", sizeof( glConfig.extensions_string ) );
|
||||
{
|
||||
Q_strncpyz( glConfig.extensions_string, (char *) qglGetString (GL_EXTENSIONS), sizeof( glConfig.extensions_string ) );
|
||||
}
|
||||
|
||||
// initialize extensions
|
||||
GLimp_InitExtensions( );
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue