Form Jorge Ciges, improved GL version detection code.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user