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/android/GrGLDefaultInterface_android.cpp b/gpu/src/android/GrGLDefaultInterface_android.cpp
index 033a93c..1976cdf 100644
--- a/gpu/src/android/GrGLDefaultInterface_android.cpp
+++ b/gpu/src/android/GrGLDefaultInterface_android.cpp
@@ -12,134 +12,104 @@
#include "gl2.h"
#include "gl2ext.h"
-/*
-#include "gpu/GLES2/gl2.h"
-#include "gpu/GLES2/gl2ext.h"
-*/
-void GrGLSetDefaultGLInterface() {
- static GrGLInterface cmd_buffer_interface = {
- kES2_GrGLBinding,
- kProbe_GrGLCapability, // fNPOTRenderTargetSupport
- kProbe_GrGLCapability, // fMinRenderTargetHeight
- kProbe_GrGLCapability, // fMinRenderTargetWidth
- glActiveTexture,
- glAttachShader,
- glBindAttribLocation,
- glBindBuffer,
- glBindTexture,
- glBlendColor,
- glBlendFunc,
- glBufferData,
- glBufferSubData,
- glClear,
- glClearColor,
- glClearStencil,
- NULL, // glClientActiveTexture
- NULL, // glColor4ub
- glColorMask,
- NULL, // glColorPointer
- glCompileShader,
- glCompressedTexImage2D,
- glCreateProgram,
- glCreateShader,
- glCullFace,
- glDeleteBuffers,
- glDeleteProgram,
- glDeleteShader,
- glDeleteTextures,
- glDepthMask,
- glDisable,
- NULL, // glDisableClientState
- glDisableVertexAttribArray,
- glDrawArrays,
- NULL, // glDrawBuffer
- NULL, // glDrawBuffers
- glDrawElements,
- glEnable,
- NULL, // glEnableClientState
- glEnableVertexAttribArray,
- glFrontFace,
- glGenBuffers,
- glGenTextures,
- glGetBufferParameteriv,
- glGetError,
- glGetIntegerv,
- glGetProgramInfoLog,
- glGetProgramiv,
- glGetShaderInfoLog,
- glGetShaderiv,
- glGetString,
- NULL, // glGetTexLevelParameteriv
- glGetUniformLocation,
- glLineWidth,
- glLinkProgram,
- NULL, // glLoadMatrixf
- NULL, // glMatrixMode
- glPixelStorei,
- NULL, // glPointSize
- NULL, // glReadBuffer
- glReadPixels,
- glScissor,
- NULL, // glShadeModel
- glShaderSource,
- glStencilFunc,
- glStencilFuncSeparate,
- glStencilMask,
- glStencilMaskSeparate,
- glStencilOp,
- glStencilOpSeparate,
- NULL, // glTexCoordPointer
- NULL, // glTexEnvi
- glTexImage2D,
- glTexParameteri,
- glTexSubImage2D,
- glUniform1f,
- glUniform1i,
- glUniform1fv,
- glUniform1iv,
- glUniform2f,
- glUniform2i,
- glUniform2fv,
- glUniform2iv,
- glUniform3f,
- glUniform3i,
- glUniform3fv,
- glUniform3iv,
- glUniform4f,
- glUniform4i,
- glUniform4fv,
- glUniform4iv,
- glUniformMatrix2fv,
- glUniformMatrix3fv,
- glUniformMatrix4fv,
- glUseProgram,
- glVertexAttrib4fv,
- glVertexAttribPointer,
- NULL, // glVertexPointer
- glViewport,
- glBindFramebuffer,
- glBindRenderbuffer,
- glCheckFramebufferStatus,
- glDeleteFramebuffers,
- glDeleteRenderbuffers,
- glFramebufferRenderbuffer,
- glFramebufferTexture2D,
- glGenFramebuffers,
- glGenRenderbuffers,
- glGetFramebufferAttachmentParameteriv,
- glGetRenderbufferParameteriv,
- glRenderbufferStorage,
- NULL, // glRenderbufferStorageMultisampleEXT,
- NULL, // glBlitFramebufferEXT,
- NULL, // glResolveMultisampleFramebuffer
- glMapBufferOES,
- glUnmapBufferOES,
- NULL, // glBindFragDataLocationIndexed
- GrGLInterface::kStaticInitEndGuard
- };
- static bool host_StubGL_initialized = false;
- if (!host_StubGL_initialized) {
- GrGLSetGLInterface(&cmd_buffer_interface);
- host_StubGL_initialized = true;
- }
+
+void GrGLInitializeDefaultGLInterface() {
+ GrGLSetGLInterface* glInterface = new GrGLInterface;
+
+ glInterface->fBindingsExported = kES2_GrGLBinding;
+ glInterface->fActiveTexture = glActiveTexture;
+ glInterface->fAttachShader = glAttachShader;
+ glInterface->fBindAttribLocation = glBindAttribLocation;
+ glInterface->fBindBuffer = glBindBuffer;
+ glInterface->fBindTexture = glBindTexture;
+ glInterface->fBlendColor = glBlendColor;
+ glInterface->fBlendFunc = glBlendFunc;
+ glInterface->fBufferData = glBufferData;
+ glInterface->fBufferSubData = glBufferSubData;
+ glInterface->fClear = glClear;
+ glInterface->fClearColor = glClearColor;
+ glInterface->fClearStencil = glClearStencil;
+ glInterface->fColorMask = glColorMask;
+ glInterface->fCompileShader = glCompileShader;
+ glInterface->fCompressedTexImage2D = glCompressedTexImage2D;
+ glInterface->fCreateProgram = glCreateProgram;
+ glInterface->fCreateShader = glCreateShader;
+ glInterface->fCullFace = glCullFace;
+ glInterface->fDeleteBuffers = glDeleteBuffers;
+ glInterface->fDeleteProgram = glDeleteProgram;
+ glInterface->fDeleteShader = glDeleteShader;
+ glInterface->fDeleteTextures = glDeleteTextures;
+ glInterface->fDepthMask = glDepthMask;
+ glInterface->fDisable = glDisable;
+ glInterface->fDisableVertexAttribArray = glDisableVertexAttribArray;
+ glInterface->fDrawArrays = glDrawArrays;
+ glInterface->fDrawElements = glDrawElements;
+ glInterface->fEnable = glEnable;
+ glInterface->fEnableVertexAttribArray = glEnableVertexAttribArray;
+ glInterface->fFrontFace = glFrontFace;
+ glInterface->fGenBuffers = glGenBuffers;
+ glInterface->fGenTextures = glGenTextures;
+ glInterface->fGetBufferParameteriv = glGetBufferParameteriv;
+ glInterface->fGetError = glGetError;
+ glInterface->fGetIntegerv = glGetIntegerv;
+ glInterface->fGetProgramInfoLog = glGetProgramInfoLog;
+ glInterface->fGetProgramiv = glGetProgramiv;
+ glInterface->fGetShaderInfoLog = glGetShaderInfoLog;
+ glInterface->fGetShaderiv = glGetShaderiv;
+ glInterface->fGetString = glGetString;
+ glInterface->fGetUniformLocation = glGetUniformLocation;
+ glInterface->fLineWidth = glLineWidth;
+ glInterface->fLinkProgram = glLinkProgram;
+ glInterface->fPixelStorei = glPixelStorei;
+ glInterface->fReadPixels = glReadPixels;
+ glInterface->fScissor = glScissor;
+ glInterface->fShaderSource = glShaderSource;
+ glInterface->fStencilFunc = glStencilFunc;
+ glInterface->fStencilFuncSeparate = glStencilFuncSeparate;
+ glInterface->fStencilMask = glStencilMask;
+ glInterface->fStencilMaskSeparate = glStencilMaskSeparate;
+ glInterface->fStencilOp = glStencilOp;
+ glInterface->fStencilOpSeparate = glStencilOpSeparate;
+ glInterface->fTexImage2D = glTexImage2D;
+ glInterface->fTexParameteri = glTexParameteri;
+ glInterface->fTexSubImage2D = glTexSubImage2D;
+ glInterface->fUniform1f = glUniform1f;
+ glInterface->fUniform1i = glUniform1i;
+ glInterface->fUniform1fv = glUniform1fv;
+ glInterface->fUniform1iv = glUniform1iv;
+ glInterface->fUniform2f = glUniform2f;
+ glInterface->fUniform2i = glUniform2i;
+ glInterface->fUniform2fv = glUniform2fv;
+ glInterface->fUniform2iv = glUniform2iv;
+ glInterface->fUniform3f = glUniform3f;
+ glInterface->fUniform3i = glUniform3i;
+ glInterface->fUniform3fv = glUniform3fv;
+ glInterface->fUniform3iv = glUniform3iv;
+ glInterface->fUniform4f = glUniform4f;
+ glInterface->fUniform4i = glUniform4i;
+ glInterface->fUniform4fv = glUniform4fv;
+ glInterface->fUniform4iv = glUniform4iv;
+ glInterface->fUniformMatrix2fv = glUniformMatrix2fv;
+ glInterface->fUniformMatrix3fv = glUniformMatrix3fv;
+ glInterface->fUniformMatrix4fv = glUniformMatrix4fv;
+ glInterface->fUseProgram = glUseProgram;
+ glInterface->fVertexAttrib4fv = glVertexAttrib4fv;
+ glInterface->fVertexAttribPointer = glVertexAttribPointer;
+ glInterface->fViewport = glViewport;
+ glInterface->fBindFramebuffer = glBindFramebuffer;
+ glInterface->fBindRenderbuffer = glBindRenderbuffer;
+ glInterface->fCheckFramebufferStatus = glCheckFramebufferStatus;
+ glInterface->fDeleteFramebuffers = glDeleteFramebuffers;
+ glInterface->fDeleteRenderbuffers = glDeleteRenderbuffers;
+ glInterface->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
+ glInterface->fFramebufferTexture2D = glFramebufferTexture2D;
+ glInterface->fGenFramebuffers = glGenFramebuffers;
+ glInterface->fGenRenderbuffers = glGenRenderbuffers;
+ glInterface->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
+ glInterface->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
+ glInterface->fRenderbufferStorage = glRenderbufferStorage;
+ glInterface->fMapBufferOES = glMapBufferOES;
+ glInterface->fUnmapBufferOES = glUnmapBufferOES;
+
+ GrGLSetDefaultInterface(glInterface)->unref();
}