Restored legacy way to collect OpenGL extensions

This commit is contained in:
alexey.lysiuk 2016-08-28 10:21:20 +03:00
parent 6c5109ec99
commit 9b91a13487

View file

@ -2447,11 +2447,49 @@ static void LoadExtByName(const char *extensionName)
} }
} }
/* BEGINNING OF MANUAL CHANGES, DO NOT REMOVE! */
static void ProcExtsFromExtList(void) static void ProcExtsFromExtString(const char *strExtList)
{
size_t iExtListLen = strlen(strExtList);
const char *strExtListEnd = strExtList + iExtListLen;
const char *strCurrPos = strExtList;
char strWorkBuff[256];
while (*strCurrPos)
{
/*Get the extension at our position.*/
int iStrLen = 0;
const char *strEndStr = strchr(strCurrPos, ' ');
int iStop = 0;
if (strEndStr == NULL)
{
strEndStr = strExtListEnd;
iStop = 1;
}
iStrLen = (int)((ptrdiff_t)strEndStr - (ptrdiff_t)strCurrPos);
if (iStrLen > 255)
return;
strncpy(strWorkBuff, strCurrPos, iStrLen);
strWorkBuff[iStrLen] = '\0';
LoadExtByName(strWorkBuff);
strCurrPos = strEndStr + 1;
if (iStop) break;
}
}
static int ProcExtsFromExtList(void)
{ {
GLint iLoop; GLint iLoop;
GLint iNumExtensions = 0; GLint iNumExtensions = 0;
if (_ptrc_glGetStringi == NULL) return 0;
_ptrc_glGetIntegerv(GL_NUM_EXTENSIONS, &iNumExtensions); _ptrc_glGetIntegerv(GL_NUM_EXTENSIONS, &iNumExtensions);
for(iLoop = 0; iLoop < iNumExtensions; iLoop++) for(iLoop = 0; iLoop < iNumExtensions; iLoop++)
@ -2459,6 +2497,8 @@ static void ProcExtsFromExtList(void)
const char *strExtensionName = (const char *)_ptrc_glGetStringi(GL_EXTENSIONS, iLoop); const char *strExtensionName = (const char *)_ptrc_glGetStringi(GL_EXTENSIONS, iLoop);
LoadExtByName(strExtensionName); LoadExtByName(strExtensionName);
} }
return iNumExtensions;
} }
int ogl_LoadFunctions() int ogl_LoadFunctions()
@ -2469,9 +2509,15 @@ int ogl_LoadFunctions()
_ptrc_glGetIntegerv = (void (CODEGEN_FUNCPTR *)(GLenum, GLint *))IntGetProcAddress("glGetIntegerv"); _ptrc_glGetIntegerv = (void (CODEGEN_FUNCPTR *)(GLenum, GLint *))IntGetProcAddress("glGetIntegerv");
if(!_ptrc_glGetIntegerv) return ogl_LOAD_FAILED; if(!_ptrc_glGetIntegerv) return ogl_LOAD_FAILED;
_ptrc_glGetStringi = (const GLubyte * (CODEGEN_FUNCPTR *)(GLenum, GLuint))IntGetProcAddress("glGetStringi"); _ptrc_glGetStringi = (const GLubyte * (CODEGEN_FUNCPTR *)(GLenum, GLuint))IntGetProcAddress("glGetStringi");
if(!_ptrc_glGetStringi) return ogl_LOAD_FAILED;
ProcExtsFromExtList(); if (0 == ProcExtsFromExtList())
{
_ptrc_glGetString = (const GLubyte * (CODEGEN_FUNCPTR *)(GLenum))IntGetProcAddress("glGetString");
if (!_ptrc_glGetString) return ogl_LOAD_FAILED;
ProcExtsFromExtString((const char *)_ptrc_glGetString(GL_EXTENSIONS));
}
numFailed = Load_Version_3_3(); numFailed = Load_Version_3_3();
if(numFailed == 0) if(numFailed == 0)
@ -2480,6 +2526,8 @@ int ogl_LoadFunctions()
return ogl_LOAD_SUCCEEDED + numFailed; return ogl_LOAD_SUCCEEDED + numFailed;
} }
/* END OF MANUAL CHANGES, DO NOT REMOVE! */
static int g_major_version = 0; static int g_major_version = 0;
static int g_minor_version = 0; static int g_minor_version = 0;