mirror of
https://github.com/nigels-com/glew.git
synced 2025-04-20 23:52:55 +00:00
Get GL extension strings via glGetStringi() if GL version is >= 3.0.
This commit is contained in:
parent
f64f38f5bb
commit
a862219acb
@ -1,15 +1,58 @@
|
|||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static
|
||||||
|
GLboolean glewGetVersion(GLint *major, GLint *minor)
|
||||||
|
{
|
||||||
|
const GLubyte* s;
|
||||||
|
GLuint dot;
|
||||||
|
|
||||||
|
s = glGetString(GL_VERSION);
|
||||||
|
dot = _glewStrCLen(s, '.');
|
||||||
|
if (dot == 0)
|
||||||
|
return GL_FALSE;
|
||||||
|
|
||||||
|
*major = s[dot-1]-'0';
|
||||||
|
*minor = s[dot+1]-'0';
|
||||||
|
|
||||||
|
if (*minor < 0 || *minor > 9)
|
||||||
|
*minor = 0;
|
||||||
|
if (*major<0 || *major>9)
|
||||||
|
return GL_FALSE;
|
||||||
|
|
||||||
|
return GL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
GLboolean GLEWAPIENTRY glewGetExtension (const char* name)
|
GLboolean GLEWAPIENTRY glewGetExtension (const char* name)
|
||||||
{
|
{
|
||||||
|
GLint major, minor;
|
||||||
const GLubyte* start;
|
const GLubyte* start;
|
||||||
const GLubyte* end;
|
const GLubyte* end;
|
||||||
|
GLint numExts, ext;
|
||||||
|
|
||||||
|
if (!glewGetVersion(&major, &minor))
|
||||||
|
return GL_FALSE;
|
||||||
|
|
||||||
|
if (major < 3)
|
||||||
|
{
|
||||||
start = (const GLubyte*)glGetString(GL_EXTENSIONS);
|
start = (const GLubyte*)glGetString(GL_EXTENSIONS);
|
||||||
if (start == 0)
|
if (start == 0)
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
end = start + _glewStrLen(start);
|
end = start + _glewStrLen(start);
|
||||||
return _glewSearchExtension(name, start, end);
|
return _glewSearchExtension(name, start, end);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glGetIntegerv(GL_NUM_EXTENSIONS, &numExts);
|
||||||
|
for (ext = 0; ext < numExts; ext++)
|
||||||
|
{
|
||||||
|
start = (const GLubyte *)glGetStringi(GL_EXTENSIONS, ext);
|
||||||
|
end = start + _glewStrLen(start);
|
||||||
|
if (_glewSearchExtension(name, start, end))
|
||||||
|
return GL_TRUE;
|
||||||
|
}
|
||||||
|
return GL_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
@ -18,27 +61,15 @@ static
|
|||||||
#endif
|
#endif
|
||||||
GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST)
|
GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST)
|
||||||
{
|
{
|
||||||
const GLubyte* s;
|
|
||||||
GLuint dot;
|
|
||||||
GLint major, minor;
|
GLint major, minor;
|
||||||
const GLubyte* extStart;
|
const GLubyte* extStart;
|
||||||
const GLubyte* extEnd;
|
const GLubyte* extEnd;
|
||||||
|
GLint numExts, ext;
|
||||||
|
|
||||||
/* query opengl version */
|
/* query opengl version */
|
||||||
s = glGetString(GL_VERSION);
|
if (!glewGetVersion(&major, &minor))
|
||||||
dot = _glewStrCLen(s, '.');
|
|
||||||
if (dot == 0)
|
|
||||||
return GLEW_ERROR_NO_GL_VERSION;
|
return GLEW_ERROR_NO_GL_VERSION;
|
||||||
|
|
||||||
major = s[dot-1]-'0';
|
|
||||||
minor = s[dot+1]-'0';
|
|
||||||
|
|
||||||
if (minor < 0 || minor > 9)
|
|
||||||
minor = 0;
|
|
||||||
if (major<0 || major>9)
|
|
||||||
return GLEW_ERROR_NO_GL_VERSION;
|
|
||||||
|
|
||||||
|
|
||||||
if (major == 1 && minor == 0)
|
if (major == 1 && minor == 0)
|
||||||
{
|
{
|
||||||
return GLEW_ERROR_GL_VERSION_10_ONLY;
|
return GLEW_ERROR_GL_VERSION_10_ONLY;
|
||||||
|
@ -1,5 +1,29 @@
|
|||||||
|
|
||||||
/* query opengl extensions string */
|
/* query opengl extensions string(s) */
|
||||||
|
if(GLEW_VERSION_3_0)
|
||||||
|
{
|
||||||
|
GLuint len;
|
||||||
|
struct initflag *ptr;
|
||||||
|
|
||||||
|
glGetIntegerv(GL_NUM_EXTENSIONS, &numExts);
|
||||||
|
for (ext = 0; ext < numExts; ext++)
|
||||||
|
{
|
||||||
|
extStart = glGetStringi(GL_EXTENSIONS, ext);
|
||||||
|
len = _glewStrLen(extStart);
|
||||||
|
ptr = in_word_set(extStart, len);
|
||||||
|
|
||||||
|
if (ptr != NULL && ptr->flag != NULL) {
|
||||||
|
#ifdef GLEW_MX
|
||||||
|
*(GLboolean *)((char *)ctx + (size_t)(ptr->flag)) = GL_TRUE;
|
||||||
|
#else
|
||||||
|
*ptr->flag = GL_TRUE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
extStart += len + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
extStart = glGetString(GL_EXTENSIONS);
|
extStart = glGetString(GL_EXTENSIONS);
|
||||||
if (extStart == 0)
|
if (extStart == 0)
|
||||||
extStart = (const GLubyte*)"";
|
extStart = (const GLubyte*)"";
|
||||||
@ -19,5 +43,6 @@
|
|||||||
}
|
}
|
||||||
extStart += len + 1;
|
extStart += len + 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* initialize extensions */
|
/* initialize extensions */
|
||||||
|
Loading…
Reference in New Issue
Block a user