Reduce gets of ext string and check validity of stencil format enums

Review URL: http://codereview.appspot.com/4678043/



git-svn-id: http://skia.googlecode.com/svn/trunk@1801 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGLInterface.cpp b/gpu/src/GrGLInterface.cpp
index 5ecf8eb..2237474 100644
--- a/gpu/src/GrGLInterface.cpp
+++ b/gpu/src/GrGLInterface.cpp
@@ -54,6 +54,25 @@
     }
 }
 
+float gl_version_as_float_from_string(const char* versionString) {
+    int major, minor;
+    gl_version_from_string(&major, &minor, versionString);
+    GrAssert(minor >= 0);
+    // AFAIK there are only single digit minor numbers
+    if (minor < 10) {
+        return major + minor / 10.f;
+    } else if (minor < 100) {
+        return major + minor / 100.f;
+    } else if (minor < 1000) {
+        return major + minor / 1000.f;
+    } else {
+        GrAssert(!"Why so many digits in minor revision number?");
+        char temp[32];
+        sprintf(temp, "%d.%d", major, minor);
+        return (float) atof(temp);
+    }
+}
+
 bool has_gl_extension_from_string(const char* ext,
                                   const char* extensionString) {
     int extLength = strlen(ext);
@@ -72,7 +91,6 @@
     return false;
 }
 
-
 GR_API void GrGLSetGLInterface(GrGLInterface* gl_interface) {
     gGLInterface = gl_interface;
 }
@@ -94,6 +112,12 @@
     gl_version_from_string(major, minor, v);
 }
 
+float gl_version_as_float() {
+    const char* v = reinterpret_cast<const char*>(
+                GrGLGetGLInterface()->fGetString(GR_GL_VERSION));
+    return gl_version_as_float_from_string(v);
+}
+
 bool GrGLInterface::validateShaderFunctions() const {
     // required for GrGpuGLShaders
     if (NULL == fAttachShader ||