/* ------------------------------------------------------------------------- */ /* * Search for name in the extensions string. Use of strstr() * is not sufficient because extension names can be prefixes of * other extension names. Could use strtok() but the constant * string returned by glGetString might be in read-only memory. */ GLboolean glewGetExtension (const char* name) { GLubyte* p; GLubyte* end; GLuint len = _glewStrLen((const GLubyte*)name); p = (GLubyte*)glGetString(GL_EXTENSIONS); if (0 == p) return GL_FALSE; end = p + _glewStrLen(p); while (p < end) { GLuint n = _glewStrCLen(p, ' '); if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; p += n+1; } return GL_FALSE; } /* ------------------------------------------------------------------------- */ #ifndef GLEW_MX static #endif GLenum glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) { const GLubyte* s; GLuint dot, major, minor; /* query opengl version */ s = glGetString(GL_VERSION); dot = _glewStrCLen(s, '.'); major = dot-1; minor = dot+1; if (dot == 0 || s[minor] == '\0') return GLEW_ERROR_NO_GL_VERSION; if (s[major] == '1' && s[minor] == '0') { return GLEW_ERROR_GL_VERSION_10_ONLY; } else { CONST_CAST(GLEW_VERSION_1_1) = GL_TRUE; if (s[major] >= '2') { CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_5) = GL_TRUE; CONST_CAST(GLEW_VERSION_2_0) = GL_TRUE; if (s[minor] >= '1') { CONST_CAST(GLEW_VERSION_2_1) = GL_TRUE; } } else { if (s[minor] >= '5') { CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_5) = GL_TRUE; CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; } if (s[minor] == '4') { CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_4) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; } if (s[minor] == '3') { CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_3) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; } if (s[minor] == '2') { CONST_CAST(GLEW_VERSION_1_2) = GL_TRUE; CONST_CAST(GLEW_VERSION_1_3) = GL_FALSE; CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; } if (s[minor] < '2') { CONST_CAST(GLEW_VERSION_1_2) = GL_FALSE; CONST_CAST(GLEW_VERSION_1_3) = GL_FALSE; CONST_CAST(GLEW_VERSION_1_4) = GL_FALSE; CONST_CAST(GLEW_VERSION_1_5) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_0) = GL_FALSE; CONST_CAST(GLEW_VERSION_2_1) = GL_FALSE; } } } /* initialize extensions */