From 86325709af0f3bf49aaec9bcac154339edd9c95e Mon Sep 17 00:00:00 2001 From: aba Date: Fri, 30 Nov 2012 15:40:17 +0400 Subject: [PATCH] 0023418: Crash on the object displaying when running DRAW on remote station. OpenGL version determination was corrected Small style changes Comments were corrected --- src/OpenGl/OpenGl_Context.cxx | 466 +++++++++++++++++----------------- 1 file changed, 236 insertions(+), 230 deletions(-) diff --git a/src/OpenGl/OpenGl_Context.cxx b/src/OpenGl/OpenGl_Context.cxx index 74747aa076..2de3bc927f 100644 --- a/src/OpenGl/OpenGl_Context.cxx +++ b/src/OpenGl/OpenGl_Context.cxx @@ -397,10 +397,15 @@ void OpenGl_Context::readGlVersion() myGlVerMinor = 0; // available since OpenGL 3.0 - GLint aMajor, aMinor; + GLint aMajor = 0, aMinor = 0; glGetIntegerv (GL_MAJOR_VERSION, &aMajor); glGetIntegerv (GL_MINOR_VERSION, &aMinor); - if (glGetError() == GL_NO_ERROR) + // glGetError() sometimes does not report an error here even if + // GL does not know GL_MAJOR_VERSION and GL_MINOR_VERSION constants. + // This happens on some rendereres like e.g. Cygwin MESA. + // Thus checking additionally if GL has put anything to + // the output variables. + if (glGetError() == GL_NO_ERROR && aMajor != 0 && aMinor != 0) { myGlVerMajor = aMajor; myGlVerMinor = aMinor; @@ -436,18 +441,18 @@ void OpenGl_Context::readGlVersion() aMajorStr[aMajIter] = '\0'; // parse string for minor number - size_t aMinIter = aMajIter + 1; + aVerStr += aMajIter + 1; + size_t aMinIter = 0; while (aVerStr[aMinIter] >= '0' && aVerStr[aMinIter] <= '9') { ++aMinIter; } - size_t aMinLen = aMinIter - aMajIter - 1; - if (aMinLen == 0 || aMinLen >= sizeof(aMinorStr)) + if (aMinIter == 0 || aMinIter >= sizeof(aMinorStr)) { return; } - memcpy (aMinorStr, aVerStr, aMinLen); - aMinorStr[aMinLen] = '\0'; + memcpy (aMinorStr, aVerStr, aMinIter); + aMinorStr[aMinIter] = '\0'; // read numbers myGlVerMajor = atoi (aMajorStr); @@ -548,239 +553,240 @@ void OpenGl_Context::init() myGlCore20 = new OpenGl_GlCore20(); memset (myGlCore20, 0, sizeof(OpenGl_GlCore20)); // nullify whole structure - // initialize OpenGL 1.2 core functionality - if (IsGlGreaterEqual (1, 2)) - { - if (!FindProcShort (myGlCore20, glBlendColor) - || !FindProcShort (myGlCore20, glBlendEquation) - || !FindProcShort (myGlCore20, glDrawRangeElements) - || !FindProcShort (myGlCore20, glTexImage3D) - || !FindProcShort (myGlCore20, glTexSubImage3D) - || !FindProcShort (myGlCore20, glCopyTexSubImage3D)) - { - myGlVerMajor = 1; - myGlVerMinor = 1; - } + // Check if OpenGL 1.2 core functionality is actually present + Standard_Boolean hasGlCore12 = IsGlGreaterEqual (1, 2) + && FindProcShort (myGlCore20, glBlendColor) + && FindProcShort (myGlCore20, glBlendEquation) + && FindProcShort (myGlCore20, glDrawRangeElements) + && FindProcShort (myGlCore20, glTexImage3D) + && FindProcShort (myGlCore20, glTexSubImage3D) + && FindProcShort (myGlCore20, glCopyTexSubImage3D); + + // Check if OpenGL 1.3 core functionality is actually present + Standard_Boolean hasGlCore13 = IsGlGreaterEqual (1, 3) + && FindProcShort (myGlCore20, glActiveTexture) + && FindProcShort (myGlCore20, glSampleCoverage) + && FindProcShort (myGlCore20, glCompressedTexImage3D) + && FindProcShort (myGlCore20, glCompressedTexImage2D) + && FindProcShort (myGlCore20, glCompressedTexImage1D) + && FindProcShort (myGlCore20, glCompressedTexSubImage3D) + && FindProcShort (myGlCore20, glCompressedTexSubImage2D) + && FindProcShort (myGlCore20, glCompressedTexSubImage1D) + && FindProcShort (myGlCore20, glGetCompressedTexImage) + // deprecated + && FindProcShort (myGlCore20, glClientActiveTexture) + && FindProcShort (myGlCore20, glMultiTexCoord1d) + && FindProcShort (myGlCore20, glMultiTexCoord1dv) + && FindProcShort (myGlCore20, glMultiTexCoord1f) + && FindProcShort (myGlCore20, glMultiTexCoord1fv) + && FindProcShort (myGlCore20, glMultiTexCoord1i) + && FindProcShort (myGlCore20, glMultiTexCoord1iv) + && FindProcShort (myGlCore20, glMultiTexCoord1s) + && FindProcShort (myGlCore20, glMultiTexCoord1sv) + && FindProcShort (myGlCore20, glMultiTexCoord2d) + && FindProcShort (myGlCore20, glMultiTexCoord2dv) + && FindProcShort (myGlCore20, glMultiTexCoord2f) + && FindProcShort (myGlCore20, glMultiTexCoord2fv) + && FindProcShort (myGlCore20, glMultiTexCoord2i) + && FindProcShort (myGlCore20, glMultiTexCoord2iv) + && FindProcShort (myGlCore20, glMultiTexCoord2s) + && FindProcShort (myGlCore20, glMultiTexCoord2sv) + && FindProcShort (myGlCore20, glMultiTexCoord3d) + && FindProcShort (myGlCore20, glMultiTexCoord3dv) + && FindProcShort (myGlCore20, glMultiTexCoord3f) + && FindProcShort (myGlCore20, glMultiTexCoord3fv) + && FindProcShort (myGlCore20, glMultiTexCoord3i) + && FindProcShort (myGlCore20, glMultiTexCoord3iv) + && FindProcShort (myGlCore20, glMultiTexCoord3s) + && FindProcShort (myGlCore20, glMultiTexCoord3sv) + && FindProcShort (myGlCore20, glMultiTexCoord4d) + && FindProcShort (myGlCore20, glMultiTexCoord4dv) + && FindProcShort (myGlCore20, glMultiTexCoord4f) + && FindProcShort (myGlCore20, glMultiTexCoord4fv) + && FindProcShort (myGlCore20, glMultiTexCoord4i) + && FindProcShort (myGlCore20, glMultiTexCoord4iv) + && FindProcShort (myGlCore20, glMultiTexCoord4s) + && FindProcShort (myGlCore20, glMultiTexCoord4sv) + && FindProcShort (myGlCore20, glLoadTransposeMatrixf) + && FindProcShort (myGlCore20, glLoadTransposeMatrixd) + && FindProcShort (myGlCore20, glMultTransposeMatrixf) + && FindProcShort (myGlCore20, glMultTransposeMatrixd); + + // Check if OpenGL 1.4 core functionality is actually present + Standard_Boolean hasGlCore14 = IsGlGreaterEqual (1, 4) + && FindProcShort (myGlCore20, glBlendFuncSeparate) + && FindProcShort (myGlCore20, glMultiDrawArrays) + && FindProcShort (myGlCore20, glMultiDrawElements) + && FindProcShort (myGlCore20, glPointParameterf) + && FindProcShort (myGlCore20, glPointParameterfv) + && FindProcShort (myGlCore20, glPointParameteri) + && FindProcShort (myGlCore20, glPointParameteriv); + + // Check if OpenGL 1.5 core functionality is actually present + Standard_Boolean hasGlCore15 = IsGlGreaterEqual (1, 5) + && FindProcShort (myGlCore20, glGenQueries) + && FindProcShort (myGlCore20, glDeleteQueries) + && FindProcShort (myGlCore20, glIsQuery) + && FindProcShort (myGlCore20, glBeginQuery) + && FindProcShort (myGlCore20, glEndQuery) + && FindProcShort (myGlCore20, glGetQueryiv) + && FindProcShort (myGlCore20, glGetQueryObjectiv) + && FindProcShort (myGlCore20, glGetQueryObjectuiv) + && FindProcShort (myGlCore20, glBindBuffer) + && FindProcShort (myGlCore20, glDeleteBuffers) + && FindProcShort (myGlCore20, glGenBuffers) + && FindProcShort (myGlCore20, glIsBuffer) + && FindProcShort (myGlCore20, glBufferData) + && FindProcShort (myGlCore20, glBufferSubData) + && FindProcShort (myGlCore20, glGetBufferSubData) + && FindProcShort (myGlCore20, glMapBuffer) + && FindProcShort (myGlCore20, glUnmapBuffer) + && FindProcShort (myGlCore20, glGetBufferParameteriv) + && FindProcShort (myGlCore20, glGetBufferPointerv); + + // Check if OpenGL 2.0 core functionality is actually present + Standard_Boolean hasGlCore20 = IsGlGreaterEqual (2, 0) + && FindProcShort (myGlCore20, glBlendEquationSeparate) + && FindProcShort (myGlCore20, glDrawBuffers) + && FindProcShort (myGlCore20, glStencilOpSeparate) + && FindProcShort (myGlCore20, glStencilFuncSeparate) + && FindProcShort (myGlCore20, glStencilMaskSeparate) + && FindProcShort (myGlCore20, glAttachShader) + && FindProcShort (myGlCore20, glBindAttribLocation) + && FindProcShort (myGlCore20, glCompileShader) + && FindProcShort (myGlCore20, glCreateProgram) + && FindProcShort (myGlCore20, glCreateShader) + && FindProcShort (myGlCore20, glDeleteProgram) + && FindProcShort (myGlCore20, glDeleteShader) + && FindProcShort (myGlCore20, glDetachShader) + && FindProcShort (myGlCore20, glDisableVertexAttribArray) + && FindProcShort (myGlCore20, glEnableVertexAttribArray) + && FindProcShort (myGlCore20, glGetActiveAttrib) + && FindProcShort (myGlCore20, glGetActiveUniform) + && FindProcShort (myGlCore20, glGetAttachedShaders) + && FindProcShort (myGlCore20, glGetAttribLocation) + && FindProcShort (myGlCore20, glGetProgramiv) + && FindProcShort (myGlCore20, glGetProgramInfoLog) + && FindProcShort (myGlCore20, glGetShaderiv) + && FindProcShort (myGlCore20, glGetShaderInfoLog) + && FindProcShort (myGlCore20, glGetShaderSource) + && FindProcShort (myGlCore20, glGetUniformLocation) + && FindProcShort (myGlCore20, glGetUniformfv) + && FindProcShort (myGlCore20, glGetUniformiv) + && FindProcShort (myGlCore20, glGetVertexAttribdv) + && FindProcShort (myGlCore20, glGetVertexAttribfv) + && FindProcShort (myGlCore20, glGetVertexAttribiv) + && FindProcShort (myGlCore20, glGetVertexAttribPointerv) + && FindProcShort (myGlCore20, glIsProgram) + && FindProcShort (myGlCore20, glIsShader) + && FindProcShort (myGlCore20, glLinkProgram) + && FindProcShort (myGlCore20, glShaderSource) + && FindProcShort (myGlCore20, glUseProgram) + && FindProcShort (myGlCore20, glUniform1f) + && FindProcShort (myGlCore20, glUniform2f) + && FindProcShort (myGlCore20, glUniform3f) + && FindProcShort (myGlCore20, glUniform4f) + && FindProcShort (myGlCore20, glUniform1i) + && FindProcShort (myGlCore20, glUniform2i) + && FindProcShort (myGlCore20, glUniform3i) + && FindProcShort (myGlCore20, glUniform4i) + && FindProcShort (myGlCore20, glUniform1fv) + && FindProcShort (myGlCore20, glUniform2fv) + && FindProcShort (myGlCore20, glUniform3fv) + && FindProcShort (myGlCore20, glUniform4fv) + && FindProcShort (myGlCore20, glUniform1iv) + && FindProcShort (myGlCore20, glUniform2iv) + && FindProcShort (myGlCore20, glUniform3iv) + && FindProcShort (myGlCore20, glUniform4iv) + && FindProcShort (myGlCore20, glUniformMatrix2fv) + && FindProcShort (myGlCore20, glUniformMatrix3fv) + && FindProcShort (myGlCore20, glUniformMatrix4fv) + && FindProcShort (myGlCore20, glValidateProgram) + && FindProcShort (myGlCore20, glVertexAttrib1d) + && FindProcShort (myGlCore20, glVertexAttrib1dv) + && FindProcShort (myGlCore20, glVertexAttrib1f) + && FindProcShort (myGlCore20, glVertexAttrib1fv) + && FindProcShort (myGlCore20, glVertexAttrib1s) + && FindProcShort (myGlCore20, glVertexAttrib1sv) + && FindProcShort (myGlCore20, glVertexAttrib2d) + && FindProcShort (myGlCore20, glVertexAttrib2dv) + && FindProcShort (myGlCore20, glVertexAttrib2f) + && FindProcShort (myGlCore20, glVertexAttrib2fv) + && FindProcShort (myGlCore20, glVertexAttrib2s) + && FindProcShort (myGlCore20, glVertexAttrib2sv) + && FindProcShort (myGlCore20, glVertexAttrib3d) + && FindProcShort (myGlCore20, glVertexAttrib3dv) + && FindProcShort (myGlCore20, glVertexAttrib3f) + && FindProcShort (myGlCore20, glVertexAttrib3fv) + && FindProcShort (myGlCore20, glVertexAttrib3s) + && FindProcShort (myGlCore20, glVertexAttrib3sv) + && FindProcShort (myGlCore20, glVertexAttrib4Nbv) + && FindProcShort (myGlCore20, glVertexAttrib4Niv) + && FindProcShort (myGlCore20, glVertexAttrib4Nsv) + && FindProcShort (myGlCore20, glVertexAttrib4Nub) + && FindProcShort (myGlCore20, glVertexAttrib4Nubv) + && FindProcShort (myGlCore20, glVertexAttrib4Nuiv) + && FindProcShort (myGlCore20, glVertexAttrib4Nusv) + && FindProcShort (myGlCore20, glVertexAttrib4bv) + && FindProcShort (myGlCore20, glVertexAttrib4d) + && FindProcShort (myGlCore20, glVertexAttrib4dv) + && FindProcShort (myGlCore20, glVertexAttrib4f) + && FindProcShort (myGlCore20, glVertexAttrib4fv) + && FindProcShort (myGlCore20, glVertexAttrib4iv) + && FindProcShort (myGlCore20, glVertexAttrib4s) + && FindProcShort (myGlCore20, glVertexAttrib4sv) + && FindProcShort (myGlCore20, glVertexAttrib4ubv) + && FindProcShort (myGlCore20, glVertexAttrib4uiv) + && FindProcShort (myGlCore20, glVertexAttrib4usv) + && FindProcShort (myGlCore20, glVertexAttribPointer); + + if (!hasGlCore12) + { + myGlVerMajor = 1; + myGlVerMinor = 1; + return; } - - // initialize OpenGL 1.3 core functionality - if (IsGlGreaterEqual (1, 3)) + else { - if (!FindProcShort (myGlCore20, glActiveTexture) - || !FindProcShort (myGlCore20, glSampleCoverage) - || !FindProcShort (myGlCore20, glCompressedTexImage3D) - || !FindProcShort (myGlCore20, glCompressedTexImage2D) - || !FindProcShort (myGlCore20, glCompressedTexImage1D) - || !FindProcShort (myGlCore20, glCompressedTexSubImage3D) - || !FindProcShort (myGlCore20, glCompressedTexSubImage2D) - || !FindProcShort (myGlCore20, glCompressedTexSubImage1D) - || !FindProcShort (myGlCore20, glGetCompressedTexImage) - // deprecated - || !FindProcShort (myGlCore20, glClientActiveTexture) - || !FindProcShort (myGlCore20, glMultiTexCoord1d) - || !FindProcShort (myGlCore20, glMultiTexCoord1dv) - || !FindProcShort (myGlCore20, glMultiTexCoord1f) - || !FindProcShort (myGlCore20, glMultiTexCoord1fv) - || !FindProcShort (myGlCore20, glMultiTexCoord1i) - || !FindProcShort (myGlCore20, glMultiTexCoord1iv) - || !FindProcShort (myGlCore20, glMultiTexCoord1s) - || !FindProcShort (myGlCore20, glMultiTexCoord1sv) - || !FindProcShort (myGlCore20, glMultiTexCoord2d) - || !FindProcShort (myGlCore20, glMultiTexCoord2dv) - || !FindProcShort (myGlCore20, glMultiTexCoord2f) - || !FindProcShort (myGlCore20, glMultiTexCoord2fv) - || !FindProcShort (myGlCore20, glMultiTexCoord2i) - || !FindProcShort (myGlCore20, glMultiTexCoord2iv) - || !FindProcShort (myGlCore20, glMultiTexCoord2s) - || !FindProcShort (myGlCore20, glMultiTexCoord2sv) - || !FindProcShort (myGlCore20, glMultiTexCoord3d) - || !FindProcShort (myGlCore20, glMultiTexCoord3dv) - || !FindProcShort (myGlCore20, glMultiTexCoord3f) - || !FindProcShort (myGlCore20, glMultiTexCoord3fv) - || !FindProcShort (myGlCore20, glMultiTexCoord3i) - || !FindProcShort (myGlCore20, glMultiTexCoord3iv) - || !FindProcShort (myGlCore20, glMultiTexCoord3s) - || !FindProcShort (myGlCore20, glMultiTexCoord3sv) - || !FindProcShort (myGlCore20, glMultiTexCoord4d) - || !FindProcShort (myGlCore20, glMultiTexCoord4dv) - || !FindProcShort (myGlCore20, glMultiTexCoord4f) - || !FindProcShort (myGlCore20, glMultiTexCoord4fv) - || !FindProcShort (myGlCore20, glMultiTexCoord4i) - || !FindProcShort (myGlCore20, glMultiTexCoord4iv) - || !FindProcShort (myGlCore20, glMultiTexCoord4s) - || !FindProcShort (myGlCore20, glMultiTexCoord4sv) - || !FindProcShort (myGlCore20, glLoadTransposeMatrixf) - || !FindProcShort (myGlCore20, glLoadTransposeMatrixd) - || !FindProcShort (myGlCore20, glMultTransposeMatrixf) - || !FindProcShort (myGlCore20, glMultTransposeMatrixd)) - { - myGlVerMajor = 1; - myGlVerMinor = 2; - core12 = myGlCore20; - } + core12 = myGlCore20; } - - // initialize OpenGL 1.4 core functionality - if (IsGlGreaterEqual (1, 4)) + if (!hasGlCore13) { - if (!FindProcShort (myGlCore20, glBlendFuncSeparate) - || !FindProcShort (myGlCore20, glMultiDrawArrays) - || !FindProcShort (myGlCore20, glMultiDrawElements) - || !FindProcShort (myGlCore20, glPointParameterf) - || !FindProcShort (myGlCore20, glPointParameterfv) - || !FindProcShort (myGlCore20, glPointParameteri) - || !FindProcShort (myGlCore20, glPointParameteriv)) - { - myGlVerMajor = 1; - myGlVerMinor = 3; - core12 = myGlCore20; - core13 = myGlCore20; - } + myGlVerMajor = 1; + myGlVerMinor = 2; + return; } - - // initialize OpenGL 1.5 core functionality - if (IsGlGreaterEqual (1, 5)) - { - if (!FindProcShort (myGlCore20, glGenQueries) - || !FindProcShort (myGlCore20, glDeleteQueries) - || !FindProcShort (myGlCore20, glIsQuery) - || !FindProcShort (myGlCore20, glBeginQuery) - || !FindProcShort (myGlCore20, glEndQuery) - || !FindProcShort (myGlCore20, glGetQueryiv) - || !FindProcShort (myGlCore20, glGetQueryObjectiv) - || !FindProcShort (myGlCore20, glGetQueryObjectuiv) - || !FindProcShort (myGlCore20, glBindBuffer) - || !FindProcShort (myGlCore20, glDeleteBuffers) - || !FindProcShort (myGlCore20, glGenBuffers) - || !FindProcShort (myGlCore20, glIsBuffer) - || !FindProcShort (myGlCore20, glBufferData) - || !FindProcShort (myGlCore20, glBufferSubData) - || !FindProcShort (myGlCore20, glGetBufferSubData) - || !FindProcShort (myGlCore20, glMapBuffer) - || !FindProcShort (myGlCore20, glUnmapBuffer) - || !FindProcShort (myGlCore20, glGetBufferParameteriv) - || !FindProcShort (myGlCore20, glGetBufferPointerv)) - { - myGlVerMajor = 1; - myGlVerMinor = 4; - core12 = myGlCore20; - core13 = myGlCore20; - core14 = myGlCore20; - } + else + { + core13 = myGlCore20; } - - // initialize OpenGL 2.0 core functionality - if (IsGlGreaterEqual (2, 0)) - { - if (!FindProcShort (myGlCore20, glBlendEquationSeparate) - || !FindProcShort (myGlCore20, glDrawBuffers) - || !FindProcShort (myGlCore20, glStencilOpSeparate) - || !FindProcShort (myGlCore20, glStencilFuncSeparate) - || !FindProcShort (myGlCore20, glStencilMaskSeparate) - || !FindProcShort (myGlCore20, glAttachShader) - || !FindProcShort (myGlCore20, glBindAttribLocation) - || !FindProcShort (myGlCore20, glCompileShader) - || !FindProcShort (myGlCore20, glCreateProgram) - || !FindProcShort (myGlCore20, glCreateShader) - || !FindProcShort (myGlCore20, glDeleteProgram) - || !FindProcShort (myGlCore20, glDeleteShader) - || !FindProcShort (myGlCore20, glDetachShader) - || !FindProcShort (myGlCore20, glDisableVertexAttribArray) - || !FindProcShort (myGlCore20, glEnableVertexAttribArray) - || !FindProcShort (myGlCore20, glGetActiveAttrib) - || !FindProcShort (myGlCore20, glGetActiveUniform) - || !FindProcShort (myGlCore20, glGetAttachedShaders) - || !FindProcShort (myGlCore20, glGetAttribLocation) - || !FindProcShort (myGlCore20, glGetProgramiv) - || !FindProcShort (myGlCore20, glGetProgramInfoLog) - || !FindProcShort (myGlCore20, glGetShaderiv) - || !FindProcShort (myGlCore20, glGetShaderInfoLog) - || !FindProcShort (myGlCore20, glGetShaderSource) - || !FindProcShort (myGlCore20, glGetUniformLocation) - || !FindProcShort (myGlCore20, glGetUniformfv) - || !FindProcShort (myGlCore20, glGetUniformiv) - || !FindProcShort (myGlCore20, glGetVertexAttribdv) - || !FindProcShort (myGlCore20, glGetVertexAttribfv) - || !FindProcShort (myGlCore20, glGetVertexAttribiv) - || !FindProcShort (myGlCore20, glGetVertexAttribPointerv) - || !FindProcShort (myGlCore20, glIsProgram) - || !FindProcShort (myGlCore20, glIsShader) - || !FindProcShort (myGlCore20, glLinkProgram) - || !FindProcShort (myGlCore20, glShaderSource) - || !FindProcShort (myGlCore20, glUseProgram) - || !FindProcShort (myGlCore20, glUniform1f) - || !FindProcShort (myGlCore20, glUniform2f) - || !FindProcShort (myGlCore20, glUniform3f) - || !FindProcShort (myGlCore20, glUniform4f) - || !FindProcShort (myGlCore20, glUniform1i) - || !FindProcShort (myGlCore20, glUniform2i) - || !FindProcShort (myGlCore20, glUniform3i) - || !FindProcShort (myGlCore20, glUniform4i) - || !FindProcShort (myGlCore20, glUniform1fv) - || !FindProcShort (myGlCore20, glUniform2fv) - || !FindProcShort (myGlCore20, glUniform3fv) - || !FindProcShort (myGlCore20, glUniform4fv) - || !FindProcShort (myGlCore20, glUniform1iv) - || !FindProcShort (myGlCore20, glUniform2iv) - || !FindProcShort (myGlCore20, glUniform3iv) - || !FindProcShort (myGlCore20, glUniform4iv) - || !FindProcShort (myGlCore20, glUniformMatrix2fv) - || !FindProcShort (myGlCore20, glUniformMatrix3fv) - || !FindProcShort (myGlCore20, glUniformMatrix4fv) - || !FindProcShort (myGlCore20, glValidateProgram) - || !FindProcShort (myGlCore20, glVertexAttrib1d) - || !FindProcShort (myGlCore20, glVertexAttrib1dv) - || !FindProcShort (myGlCore20, glVertexAttrib1f) - || !FindProcShort (myGlCore20, glVertexAttrib1fv) - || !FindProcShort (myGlCore20, glVertexAttrib1s) - || !FindProcShort (myGlCore20, glVertexAttrib1sv) - || !FindProcShort (myGlCore20, glVertexAttrib2d) - || !FindProcShort (myGlCore20, glVertexAttrib2dv) - || !FindProcShort (myGlCore20, glVertexAttrib2f) - || !FindProcShort (myGlCore20, glVertexAttrib2fv) - || !FindProcShort (myGlCore20, glVertexAttrib2s) - || !FindProcShort (myGlCore20, glVertexAttrib2sv) - || !FindProcShort (myGlCore20, glVertexAttrib3d) - || !FindProcShort (myGlCore20, glVertexAttrib3dv) - || !FindProcShort (myGlCore20, glVertexAttrib3f) - || !FindProcShort (myGlCore20, glVertexAttrib3fv) - || !FindProcShort (myGlCore20, glVertexAttrib3s) - || !FindProcShort (myGlCore20, glVertexAttrib3sv) - || !FindProcShort (myGlCore20, glVertexAttrib4Nbv) - || !FindProcShort (myGlCore20, glVertexAttrib4Niv) - || !FindProcShort (myGlCore20, glVertexAttrib4Nsv) - || !FindProcShort (myGlCore20, glVertexAttrib4Nub) - || !FindProcShort (myGlCore20, glVertexAttrib4Nubv) - || !FindProcShort (myGlCore20, glVertexAttrib4Nuiv) - || !FindProcShort (myGlCore20, glVertexAttrib4Nusv) - || !FindProcShort (myGlCore20, glVertexAttrib4bv) - || !FindProcShort (myGlCore20, glVertexAttrib4d) - || !FindProcShort (myGlCore20, glVertexAttrib4dv) - || !FindProcShort (myGlCore20, glVertexAttrib4f) - || !FindProcShort (myGlCore20, glVertexAttrib4fv) - || !FindProcShort (myGlCore20, glVertexAttrib4iv) - || !FindProcShort (myGlCore20, glVertexAttrib4s) - || !FindProcShort (myGlCore20, glVertexAttrib4sv) - || !FindProcShort (myGlCore20, glVertexAttrib4ubv) - || !FindProcShort (myGlCore20, glVertexAttrib4uiv) - || !FindProcShort (myGlCore20, glVertexAttrib4usv) - || !FindProcShort (myGlCore20, glVertexAttribPointer)) - { - myGlVerMajor = 1; - myGlVerMinor = 5; - core12 = myGlCore20; - core13 = myGlCore20; - core14 = myGlCore20; - core15 = myGlCore20; - } + if(!hasGlCore14) + { + myGlVerMajor = 1; + myGlVerMinor = 3; + return; } - - if (IsGlGreaterEqual (2, 0)) + else { - core12 = myGlCore20; - core13 = myGlCore20; core14 = myGlCore20; + } + if(!hasGlCore15) + { + myGlVerMajor = 1; + myGlVerMinor = 4; + return; + } + else + { core15 = myGlCore20; + } + if(!hasGlCore20) + { + myGlVerMajor = 1; + myGlVerMinor = 5; + } + else + { core20 = myGlCore20; } } -- 2.39.5