Simplify specification of default interface
Review URL: http://codereview.appspot.com/5036045/



git-svn-id: http://skia.googlecode.com/svn/trunk@2276 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/unix/GrGLDefaultInterface_unix.cpp b/gpu/src/unix/GrGLDefaultInterface_unix.cpp
index 3e12ca1..fff01ed 100644
--- a/gpu/src/unix/GrGLDefaultInterface_unix.cpp
+++ b/gpu/src/unix/GrGLDefaultInterface_unix.cpp
@@ -14,12 +14,12 @@
 #include <GL/glext.h>
 #include <GL/glu.h>
 
-#define GR_GL_GET_PROC(F) defaultInterface->f ## F = (GrGL ## F ## Proc) \
+#define GR_GL_GET_PROC(F) interface->f ## F = (GrGL ## F ## Proc) \
         glXGetProcAddress(reinterpret_cast<const GLubyte*>("gl" #F));
-#define GR_GL_GET_PROC_SUFFIX(F, S) defaultInterface->f ## F = (GrGL ## F ## Proc) \
+#define GR_GL_GET_PROC_SUFFIX(F, S) interface->f ## F = (GrGL ## F ## Proc) \
         glXGetProcAddress(reinterpret_cast<const GLubyte*>("gl" #F #S));
 
-void GrGLInitializeDefaultGLInterface() {
+const GrGLInterface* GrGLDefaultInterface() {
     if (NULL != glXGetCurrentContext()) {
         int major, minor;
         const char* versionString = (const char*) glGetString(GL_VERSION);
@@ -28,87 +28,87 @@
 
         if (major == 1 && minor < 5) {
             // We must have array and element_array buffer objects.
-            return;
+            return NULL;
         }
 
-        GrGLInterface* defaultInterface = new GrGLInterface();
+        GrGLInterface* interface = new GrGLInterface();
 
-        defaultInterface->fNPOTRenderTargetSupport = kProbe_GrGLCapability;
-        defaultInterface->fMinRenderTargetHeight = kProbe_GrGLCapability;
-        defaultInterface->fMinRenderTargetWidth = kProbe_GrGLCapability;
+        interface->fNPOTRenderTargetSupport = kProbe_GrGLCapability;
+        interface->fMinRenderTargetHeight = kProbe_GrGLCapability;
+        interface->fMinRenderTargetWidth = kProbe_GrGLCapability;
 
-        defaultInterface->fActiveTexture = glActiveTexture;
+        interface->fActiveTexture = glActiveTexture;
         GR_GL_GET_PROC(AttachShader);
         GR_GL_GET_PROC(BindAttribLocation);
         GR_GL_GET_PROC(BindBuffer);
-        defaultInterface->fBindTexture = glBindTexture;
-        defaultInterface->fBlendColor = glBlendColor;
-        defaultInterface->fBlendFunc = glBlendFunc;
+        interface->fBindTexture = glBindTexture;
+        interface->fBlendColor = glBlendColor;
+        interface->fBlendFunc = glBlendFunc;
         GR_GL_GET_PROC(BufferData);
         GR_GL_GET_PROC(BufferSubData);
-        defaultInterface->fClear = glClear;
-        defaultInterface->fClearColor = glClearColor;
-        defaultInterface->fClearStencil = glClearStencil;
-        defaultInterface->fClientActiveTexture = glClientActiveTexture;
-        defaultInterface->fColorMask = glColorMask;
-        defaultInterface->fColorPointer = glColorPointer;
-        defaultInterface->fColor4ub = glColor4ub;
+        interface->fClear = glClear;
+        interface->fClearColor = glClearColor;
+        interface->fClearStencil = glClearStencil;
+        interface->fClientActiveTexture = glClientActiveTexture;
+        interface->fColorMask = glColorMask;
+        interface->fColorPointer = glColorPointer;
+        interface->fColor4ub = glColor4ub;
         GR_GL_GET_PROC(CompileShader);
-        defaultInterface->fCompressedTexImage2D = glCompressedTexImage2D;
+        interface->fCompressedTexImage2D = glCompressedTexImage2D;
         GR_GL_GET_PROC(CreateProgram);
         GR_GL_GET_PROC(CreateShader);
-        defaultInterface->fCullFace = glCullFace;
+        interface->fCullFace = glCullFace;
         GR_GL_GET_PROC(DeleteBuffers);
         GR_GL_GET_PROC(DeleteProgram);
         GR_GL_GET_PROC(DeleteShader);
-        defaultInterface->fDeleteTextures = glDeleteTextures;
-        defaultInterface->fDepthMask = glDepthMask;
-        defaultInterface->fDisable = glDisable;
-        defaultInterface->fDisableClientState = glDisableClientState;
+        interface->fDeleteTextures = glDeleteTextures;
+        interface->fDepthMask = glDepthMask;
+        interface->fDisable = glDisable;
+        interface->fDisableClientState = glDisableClientState;
         GR_GL_GET_PROC(DisableVertexAttribArray);
-        defaultInterface->fDrawArrays = glDrawArrays;
-        defaultInterface->fDrawBuffer = glDrawBuffer;
+        interface->fDrawArrays = glDrawArrays;
+        interface->fDrawBuffer = glDrawBuffer;
         GR_GL_GET_PROC(DrawBuffers);
-        defaultInterface->fDrawElements = glDrawElements;
-        defaultInterface->fEnable = glEnable;
-        defaultInterface->fEnableClientState = glEnableClientState;
+        interface->fDrawElements = glDrawElements;
+        interface->fEnable = glEnable;
+        interface->fEnableClientState = glEnableClientState;
         GR_GL_GET_PROC(EnableVertexAttribArray);
-        defaultInterface->fFrontFace = glFrontFace;
+        interface->fFrontFace = glFrontFace;
         GR_GL_GET_PROC(GenBuffers);
         GR_GL_GET_PROC(GetBufferParameteriv);
-        defaultInterface->fGetError = glGetError;
-        defaultInterface->fGetIntegerv = glGetIntegerv;
+        interface->fGetError = glGetError;
+        interface->fGetIntegerv = glGetIntegerv;
         GR_GL_GET_PROC(GetProgramInfoLog);
         GR_GL_GET_PROC(GetProgramiv);
         GR_GL_GET_PROC(GetShaderInfoLog);
         GR_GL_GET_PROC(GetShaderiv);
-        defaultInterface->fGetString = glGetString;
-        defaultInterface->fGetTexLevelParameteriv = glGetTexLevelParameteriv;
-        defaultInterface->fGenTextures = glGenTextures;
+        interface->fGetString = glGetString;
+        interface->fGetTexLevelParameteriv = glGetTexLevelParameteriv;
+        interface->fGenTextures = glGenTextures;
         GR_GL_GET_PROC(GetUniformLocation);
-        defaultInterface->fLineWidth = glLineWidth;
+        interface->fLineWidth = glLineWidth;
         GR_GL_GET_PROC(LinkProgram);
-        defaultInterface->fLoadMatrixf = glLoadMatrixf;
+        interface->fLoadMatrixf = glLoadMatrixf;
         GR_GL_GET_PROC(MapBuffer);
-        defaultInterface->fMatrixMode = glMatrixMode;
-        defaultInterface->fPointSize = glPointSize;
-        defaultInterface->fPixelStorei = glPixelStorei;
-        defaultInterface->fReadBuffer = glReadBuffer;
-        defaultInterface->fReadPixels = glReadPixels;
-        defaultInterface->fScissor = glScissor;
-        defaultInterface->fShadeModel = glShadeModel;
+        interface->fMatrixMode = glMatrixMode;
+        interface->fPointSize = glPointSize;
+        interface->fPixelStorei = glPixelStorei;
+        interface->fReadBuffer = glReadBuffer;
+        interface->fReadPixels = glReadPixels;
+        interface->fScissor = glScissor;
+        interface->fShadeModel = glShadeModel;
         GR_GL_GET_PROC(ShaderSource);
-        defaultInterface->fStencilFunc = glStencilFunc;
+        interface->fStencilFunc = glStencilFunc;
         GR_GL_GET_PROC(StencilFuncSeparate);
-        defaultInterface->fStencilMask = glStencilMask;
+        interface->fStencilMask = glStencilMask;
         GR_GL_GET_PROC(StencilMaskSeparate);
-        defaultInterface->fStencilOp = glStencilOp;
+        interface->fStencilOp = glStencilOp;
         GR_GL_GET_PROC(StencilOpSeparate);
-        defaultInterface->fTexCoordPointer = glTexCoordPointer;
-        defaultInterface->fTexEnvi = glTexEnvi;
-        defaultInterface->fTexImage2D = glTexImage2D;
-        defaultInterface->fTexParameteri = glTexParameteri;
-        defaultInterface->fTexSubImage2D = glTexSubImage2D;
+        interface->fTexCoordPointer = glTexCoordPointer;
+        interface->fTexEnvi = glTexEnvi;
+        interface->fTexImage2D = glTexImage2D;
+        interface->fTexParameteri = glTexParameteri;
+        interface->fTexSubImage2D = glTexSubImage2D;
         GR_GL_GET_PROC(Uniform1f);
         GR_GL_GET_PROC(Uniform1i);
         GR_GL_GET_PROC(Uniform1fv);
@@ -132,8 +132,8 @@
         GR_GL_GET_PROC(UseProgram);
         GR_GL_GET_PROC(VertexAttrib4fv);
         GR_GL_GET_PROC(VertexAttribPointer);
-        defaultInterface->fVertexPointer = glVertexPointer;
-        defaultInterface->fViewport = glViewport;
+        interface->fVertexPointer = glVertexPointer;
+        interface->fViewport = glViewport;
         GR_GL_GET_PROC(BindFragDataLocationIndexed);
 
         // First look for GL3.0 FBO or GL_ARB_framebuffer_object (same since
@@ -178,10 +178,13 @@
             }
         } else {
             // we must have FBOs
-            return;
+            delete interface;
+            return NULL;
         }
-        defaultInterface->fBindingsExported = kDesktop_GrGLBinding;
+        interface->fBindingsExported = kDesktop_GrGLBinding;
 
-        GrGLSetDefaultGLInterface(defaultInterface)->unref();
+        return interface;
+    } else {
+        return NULL;
     }
 }