Remove the compile-time selection of the GL implementation based on the
GR_SUPPORT_GLDESKTOP family of macros.  

Support for the platform is configured dynamically, by querying the
fBindingsExported member of active GrGLInterface instance.

Review: http://codereview.appspot.com/4298048/ 



git-svn-id: http://skia.googlecode.com/svn/trunk@960 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGpuGLShaders2.cpp b/gpu/src/GrGpuGLShaders2.cpp
index 972d8a3..a56e511 100644
--- a/gpu/src/GrGpuGLShaders2.cpp
+++ b/gpu/src/GrGpuGLShaders2.cpp
@@ -17,8 +17,6 @@
 
 #include "GrGLConfig.h"
 
-#if GR_SUPPORT_GLES2 || GR_SUPPORT_GLDESKTOP
-
 #include "GrGpuGLShaders2.h"
 #include "GrGpuVertex.h"
 #include "GrMemory.h"
@@ -31,15 +29,6 @@
 
 #define SKIP_CACHE_CHECK    true
 
-#if GR_SUPPORT_GLES2
-    #define GR_PRECISION                "mediump"
-    const char GR_SHADER_PRECISION[] =  "precision mediump float;\n";
-#else
-    #define GR_PRECISION                ""
-    const char GR_SHADER_PRECISION[] =  "";
-#endif
-
-
 #define POS_ATTR_LOCATION 0
 #define TEX_ATTR_LOCATION(X) (1 + X)
 #define COL_ATTR_LOCATION (2 + GrDrawTarget::kMaxTexCoords)
@@ -51,6 +40,26 @@
 
 #define GR_UINT32_MAX   static_cast<uint32_t>(-1)
 
+namespace {
+
+const char* GrPrecision() {
+    if (GR_GL_SUPPORT_ES2) {
+        return "mediump";
+    } else {
+        return "";
+    }
+}
+
+const char* GrShaderPrecision() {
+    if (GR_GL_SUPPORT_ES2) {
+        return "precision mediump float;\n";
+    } else {
+        return "";
+    }
+}
+
+}  // namespace
+
 struct GrGpuGLShaders2::StageUniLocations {
     GrGLint fTextureMatrixUni;
     GrGLint fSamplerUni;
@@ -501,11 +510,15 @@
 
     if (StageDesc::kRadial2Gradient_CoordMapping == desc.fCoordMapping) {
 
-        segments->fVSUnis += "uniform " GR_PRECISION " float ";
+        segments->fVSUnis += "uniform ";
+        segments->fVSUnis += GrPrecision();
+        segments->fVSUnis += " float ";
         segments->fVSUnis += radial2ParamsName;
         segments->fVSUnis += "[6];\n";
 
-        segments->fFSUnis += "uniform " GR_PRECISION " float ";
+        segments->fFSUnis += "uniform ";
+        segments->fFSUnis += GrPrecision();
+        segments->fFSUnis += " float ";
         segments->fFSUnis += radial2ParamsName;
         segments->fFSUnis += "[6];\n";
         locations->fRadial2Uni = 1;
@@ -821,9 +834,9 @@
 
     stringCnt = 0;
 
-    if (GR_ARRAY_COUNT(GR_SHADER_PRECISION) > 1) {
-        strings[stringCnt] = GR_SHADER_PRECISION;
-        lengths[stringCnt] = GR_ARRAY_COUNT(GR_SHADER_PRECISION) - 1;
+    if (strlen(GrShaderPrecision()) > 1) {
+        strings[stringCnt] = GrShaderPrecision();
+        lengths[stringCnt] = strlen(GrShaderPrecision());
         ++stringCnt;
     }
     if (segments.fFSUnis.length()) {
@@ -844,7 +857,7 @@
 
 #if PRINT_SHADERS
     GrPrintf("%s%s%s%s\n",
-             GR_SHADER_PRECISION,
+             GrShaderPrecision(),
              segments.fFSUnis.cstr(),
              segments.fVaryings.cstr(),
              segments.fFSCode.cstr());
@@ -1401,6 +1414,3 @@
     fHWGeometryState.fVertexLayout = fGeometrySrc.fVertexLayout;
     fHWGeometryState.fArrayPtrsDirty = false;
 }
-#endif
-
-