Form Jorge Ciges, improved GL version detection code.

This commit is contained in:
Robert Osfield
2011-05-26 16:52:08 +00:00
parent 3fa1f2ed5a
commit e3f7d802e4
4 changed files with 28 additions and 13 deletions

View File

@@ -241,7 +241,14 @@ extern OSG_EXPORT double asciiToDouble(const char* str);
/** Convert a ascii number to a float, ignoring locale settings.*/
inline float asciiToFloat(const char* str) { return static_cast<float>(asciiToDouble(str)); }
/** Detect first ascii POSITIVE number in string and convert to double.*/
extern OSG_EXPORT double findAsciiToDouble(const char* str);
/** Detect first ascii POSITIVE number in string and convert to double.*/
inline float findAsciiToFloat(const char* str) { return static_cast<float>(findAsciiToDouble(str)); }
}
#endif // __OSG_MATH

View File

@@ -517,7 +517,7 @@ void GL2Extensions::setupGL2Extensions(unsigned int contextID)
return;
}
_glVersion = asciiToFloat( version );
_glVersion = findAsciiToFloat( version );
_glslLanguageVersion = 0.0f;
bool shadersBuiltIn = OSG_GLES2_FEATURES || OSG_GL3_FEATURES;
@@ -540,12 +540,7 @@ void GL2Extensions::setupGL2Extensions(unsigned int contextID)
const char* langVerStr = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION);
if( (glGetError() == GL_NO_ERROR) && langVerStr )
{
std::string glslvs( langVerStr );
#if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE)
_glslLanguageVersion = ( asciiToFloat( glslvs.substr( glslvs.find( "GLSL ES " )+8 ).c_str() ) );
#else
_glslLanguageVersion = ( asciiToFloat( glslvs.substr( glslvs.find( "GLSL "+5 ) ).c_str() ) );
#endif
_glslLanguageVersion = (findAsciiToFloat(langVerStr));
}
else
_glslLanguageVersion = 1.0f;

View File

@@ -66,12 +66,7 @@ float osg::getGLVersionNumber()
char *versionstring = (char*) glGetString( GL_VERSION );
if (!versionstring) return 0.0;
std::string vs( versionstring );
#if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE)
return( asciiToFloat( vs.substr( vs.find( "ES " )+3 ).c_str() ) );
#else
return( asciiToFloat( vs.substr( vs.find( " " )+1 ).c_str() ) );
#endif
return (findAsciiToFloat(versionstring));
}
bool osg::isExtensionInExtensionString(const char *extension, const char *extensionString)

View File

@@ -15,6 +15,7 @@
#include <string.h>
double osg::asciiToDouble(const char* str)
{
const char* ptr = str;
@@ -112,3 +113,20 @@ double osg::asciiToDouble(const char* str)
}
}
double osg::findAsciiToDouble(const char* str)
{
const char* ptr = str;
double value = 0.0;
while(*ptr != 0) {
if(*ptr>='0' && *ptr<='9') {
value = asciiToDouble(ptr);
return value;
}
++ptr;
}
return 0.0;
}