mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2024-12-02 08:51:57 +00:00
Patched GLEW to get the extensions with OpenGL >= 3.2 for the case that glGetString(GL_EXTENSIONS) fails
This commit is contained in:
parent
f72d98a1eb
commit
5c0fedf190
3 changed files with 85 additions and 15 deletions
|
@ -9468,15 +9468,75 @@ static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT)
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
// RB: use this instead of glGetString(GL_EXTENSIONS) for OpenGL >= 3.0
|
||||||
|
static const GLubyte* _glewGetExtensions(void) {
|
||||||
|
static int s_init = 0;
|
||||||
|
static GLubyte s_array[16384];
|
||||||
|
static const GLubyte* s_ret = 0;
|
||||||
|
|
||||||
|
if (s_init == 0) {
|
||||||
|
PFNGLGETSTRINGIPROC localGetStringi = 0;
|
||||||
|
|
||||||
|
s_init = 1;
|
||||||
|
|
||||||
|
localGetStringi = (PFNGLGETSTRINGIPROC)glewGetProcAddress((const GLubyte*)"glGetStringi");
|
||||||
|
|
||||||
|
if (localGetStringi) {
|
||||||
|
GLint num_extensions = 0;
|
||||||
|
GLint extension_idx = 0;
|
||||||
|
GLuint arr_idx = 0;
|
||||||
|
|
||||||
|
glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
|
||||||
|
|
||||||
|
for ( ; extension_idx < num_extensions; ++extension_idx) {
|
||||||
|
const GLubyte* extension = localGetStringi(GL_EXTENSIONS, extension_idx);
|
||||||
|
|
||||||
|
if (!extension) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (arr_idx < sizeof(s_array) && *extension != '\0') {
|
||||||
|
s_array[arr_idx++] = *extension++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arr_idx < sizeof(s_array)) {
|
||||||
|
s_array[arr_idx++] = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arr_idx < sizeof(s_array)) {
|
||||||
|
s_array[arr_idx++] = '\0';
|
||||||
|
s_ret = s_array;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
s_ret = glGetString(GL_EXTENSIONS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s_ret;
|
||||||
|
}
|
||||||
|
// RB end
|
||||||
|
|
||||||
GLboolean GLEWAPIENTRY glewGetExtension (const char* name)
|
GLboolean GLEWAPIENTRY glewGetExtension (const char* name)
|
||||||
{
|
{
|
||||||
const GLubyte* start;
|
const GLubyte* start;
|
||||||
const GLubyte* end;
|
const GLubyte* end;
|
||||||
start = (const GLubyte*)glGetString(GL_EXTENSIONS);
|
start = (const GLubyte*)glGetString(GL_EXTENSIONS);
|
||||||
if (start == 0)
|
// RB begin
|
||||||
return GL_FALSE;
|
if( start == 0 )
|
||||||
end = start + _glewStrLen(start);
|
{
|
||||||
return _glewSearchExtension(name, start, end);
|
// clear previously generated error
|
||||||
|
glGetError();
|
||||||
|
|
||||||
|
start = _glewGetExtensions();
|
||||||
|
if( start == 0 )
|
||||||
|
{
|
||||||
|
return GL_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// RB end
|
||||||
|
end = start + _glewStrLen(start);
|
||||||
|
return _glewSearchExtension(name, start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
@ -9531,10 +9591,22 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST)
|
||||||
CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
|
CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* query opengl extensions string */
|
/* query opengl extensions string */
|
||||||
extStart = glGetString(GL_EXTENSIONS);
|
// RB begin
|
||||||
if (extStart == 0)
|
extStart = glGetString(GL_EXTENSIONS);
|
||||||
extStart = (const GLubyte*)"";
|
if( extStart == 0 )
|
||||||
|
{
|
||||||
|
// clear previously generated error
|
||||||
|
glGetError();
|
||||||
|
|
||||||
|
extStart = _glewGetExtensions();
|
||||||
|
if( extStart == 0 )
|
||||||
|
{
|
||||||
|
extStart = (const GLubyte*)"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// RB end
|
||||||
|
|
||||||
extEnd = extStart + _glewStrLen(extStart);
|
extEnd = extStart + _glewStrLen(extStart);
|
||||||
|
|
||||||
/* initialize extensions */
|
/* initialize extensions */
|
||||||
|
|
|
@ -328,7 +328,7 @@ static void R_CheckPortableExtensions()
|
||||||
}
|
}
|
||||||
|
|
||||||
// RB: Mesa support
|
// RB: Mesa support
|
||||||
//if( idStr::Icmpn( glConfig.renderer_string, "Mesa", 4 ) == 0 || idStr::Icmpn( glConfig.renderer_string, "X.org", 4 ) == 0 )
|
if( idStr::Icmpn( glConfig.renderer_string, "Mesa", 4 ) == 0 || idStr::Icmpn( glConfig.renderer_string, "X.org", 4 ) == 0 )
|
||||||
{
|
{
|
||||||
glConfig.driverType = GLDRV_OPENGL_MESA;
|
glConfig.driverType = GLDRV_OPENGL_MESA;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1352,8 +1352,7 @@ bool GLimp_Init( glimpParms_t parms )
|
||||||
glConfig.physicalScreenWidthInCentimeters = 0.1f * mmWide;
|
glConfig.physicalScreenWidthInCentimeters = 0.1f * mmWide;
|
||||||
}
|
}
|
||||||
|
|
||||||
// RB begin
|
// RB: we probably have a new OpenGL 3.2 core context so reinitialize GLEW
|
||||||
/*
|
|
||||||
GLenum glewResult = glewInit();
|
GLenum glewResult = glewInit();
|
||||||
if( GLEW_OK != glewResult )
|
if( GLEW_OK != glewResult )
|
||||||
{
|
{
|
||||||
|
@ -1364,7 +1363,6 @@ bool GLimp_Init( glimpParms_t parms )
|
||||||
{
|
{
|
||||||
common->Printf( "Using GLEW %s\n", glewGetString( GLEW_VERSION ) );
|
common->Printf( "Using GLEW %s\n", glewGetString( GLEW_VERSION ) );
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
// RB end
|
// RB end
|
||||||
|
|
||||||
// wglSwapinterval, etc
|
// wglSwapinterval, etc
|
||||||
|
|
Loading…
Reference in a new issue