Make GrGLInterface a per-GrContext refcounted object rather than a global

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



git-svn-id: http://skia.googlecode.com/svn/trunk@2140 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGpuFactory.cpp b/gpu/src/GrGpuFactory.cpp
index e1205cd..c3b0242 100644
--- a/gpu/src/GrGpuFactory.cpp
+++ b/gpu/src/GrGpuFactory.cpp
@@ -22,18 +22,21 @@
 
 GrGpu* GrGpu::Create(GrEngine engine, GrPlatform3DContext context3D) {
 
+    const GrGLInterface* glInterface;
+
     if (kOpenGL_Shaders_GrEngine == engine ||
         kOpenGL_Fixed_GrEngine == engine) {
-        // If no GL bindings have been installed, fall-back to calling the
-        // GL functions that have been linked with the executable.
-        if (!GrGLGetGLInterface()) {
-            GrGLSetDefaultGLInterface();
-            // If there is no platform-default then just fail.
-            if (!GrGLGetGLInterface()) {
-                return NULL;
-            }
+        glInterface = reinterpret_cast<const GrGLInterface*>(context3D);
+        if (NULL == glInterface) {
+            glInterface = GrGLGetDefaultGLInterface();
         }
-        if (!GrGLGetGLInterface()->validate(engine)) {
+        if (NULL == glInterface) {
+#if GR_DEBUG
+            GrPrintf("No GL interface provided!");
+#endif
+            return NULL;
+        }
+        if (!glInterface->validate(engine)) {
 #if GR_DEBUG
             GrPrintf("Failed GL interface validation!");
 #endif
@@ -45,24 +48,12 @@
 
     switch (engine) {
         case kOpenGL_Shaders_GrEngine:
-            GrAssert(NULL == (void*)context3D);
-            {
-#if 0 // old code path, will be removed soon
-                gpu = new GrGpuGLShaders2;
-#else
-                gpu = new GrGpuGLShaders;
-#endif
-            }
+            GrAssert(NULL != glInterface);
+            gpu = new GrGpuGLShaders(glInterface);
             break;
         case kOpenGL_Fixed_GrEngine:
-            GrAssert(NULL == (void*)context3D);
-            gpu = new GrGpuGLFixed;
-            break;
-        case kDirect3D9_GrEngine:
-            GrAssert(NULL != (void*)context3D);
-#if GR_WIN32_BUILD
-//            gpu = new GrGpuD3D9((IDirect3DDevice9*)context3D);
-#endif
+            GrAssert(NULL != glInterface);
+            gpu = new GrGpuGLFixed(glInterface);
             break;
         default:
             GrAssert(!"unknown engine");