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/ios/GrGLDefaultInterface_iOS.cpp b/gpu/src/ios/GrGLDefaultInterface_iOS.cpp
index 8755299..7be40db 100644
--- a/gpu/src/ios/GrGLDefaultInterface_iOS.cpp
+++ b/gpu/src/ios/GrGLDefaultInterface_iOS.cpp
@@ -15,135 +15,138 @@
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>
-void GrGLInitializeDefaultGLInterface() {
- GrGLInterface* defaultInterface = new GrGLInterface();
+const GrGLInterface* GrGLDefaultInterface() {
+ static SkAutoTUnref<GrGLInterface> glInterface;
+ if (!glInterface.get()) {
+ GrGLInteface* interface = new GrGLInterface;
+ glInterface.reset(interface);
- defaultInterface->fNPOTRenderTargetSupport = kProbe_GrGLCapability;
- defaultInterface->fMinRenderTargetHeight = kProbe_GrGLCapability;
- defaultInterface->fMinRenderTargetWidth = kProbe_GrGLCapability;
- defaultInterface->fActiveTexture = glActiveTexture;
- defaultInterface->fAttachShader = glAttachShader;
- defaultInterface->fBindAttribLocation = glBindAttribLocation;
- defaultInterface->fBindBuffer = glBindBuffer;
- defaultInterface->fBindTexture = glBindTexture;
- defaultInterface->fBlendColor = glBlendColor;
- defaultInterface->fBlendFunc = glBlendFunc;
- defaultInterface->fBufferData = (GrGLBufferDataProc)glBufferData;
- defaultInterface->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData;
- defaultInterface->fClear = glClear;
- defaultInterface->fClearColor = glClearColor;
- defaultInterface->fClearStencil = glClearStencil;
- defaultInterface->fClientActiveTexture = glClientActiveTexture;
- defaultInterface->fColorMask = glColorMask;
- defaultInterface->fColorPointer = glColorPointer;
- defaultInterface->fColor4ub = glColor4ub;
- defaultInterface->fCompileShader = glCompileShader;
- defaultInterface->fCompressedTexImage2D = glCompressedTexImage2D;
- defaultInterface->fCreateProgram = glCreateProgram;
- defaultInterface->fCreateShader = glCreateShader;
- defaultInterface->fCullFace = glCullFace;
- defaultInterface->fDeleteBuffers = glDeleteBuffers;
- defaultInterface->fDeleteProgram = glDeleteProgram;
- defaultInterface->fDeleteShader = glDeleteShader;
- defaultInterface->fDeleteTextures = glDeleteTextures;
- defaultInterface->fDepthMask = glDepthMask;
- defaultInterface->fDisable = glDisable;
- defaultInterface->fDisableClientState = glDisableClientState;
- defaultInterface->fDisableVertexAttribArray =
- glDisableVertexAttribArray;
- defaultInterface->fDrawArrays = glDrawArrays;
- defaultInterface->fDrawBuffer = NULL;
- defaultInterface->fDrawBuffers = NULL;
- defaultInterface->fDrawElements = glDrawElements;
- defaultInterface->fEnable = glEnable;
- defaultInterface->fEnableClientState = glEnableClientState;
- defaultInterface->fEnableVertexAttribArray = glEnableVertexAttribArray;
- defaultInterface->fFrontFace = glFrontFace;
- defaultInterface->fGenBuffers = glGenBuffers;
- defaultInterface->fGetBufferParameteriv = glGetBufferParameteriv;
- defaultInterface->fGetError = glGetError;
- defaultInterface->fGetIntegerv = glGetIntegerv;
- defaultInterface->fGetProgramInfoLog = glGetProgramInfoLog;
- defaultInterface->fGetProgramiv = glGetProgramiv;
- defaultInterface->fGetShaderInfoLog = glGetShaderInfoLog;
- defaultInterface->fGetShaderiv = glGetShaderiv;
- defaultInterface->fGetString = glGetString;
- defaultInterface->fGenTextures = glGenTextures;
- defaultInterface->fGetUniformLocation = glGetUniformLocation;
- defaultInterface->fLineWidth = glLineWidth;
- defaultInterface->fLinkProgram = glLinkProgram;
- defaultInterface->fLoadMatrixf = glLoadMatrixf;
- defaultInterface->fMatrixMode = glMatrixMode;
- defaultInterface->fPointSize = glPointSize;
- defaultInterface->fPixelStorei = glPixelStorei;
- defaultInterface->fReadBuffer = NULL;
- defaultInterface->fReadPixels = glReadPixels;
- defaultInterface->fScissor = glScissor;
- defaultInterface->fShadeModel = glShadeModel;
- defaultInterface->fShaderSource = glShaderSource;
- defaultInterface->fStencilFunc = glStencilFunc;
- defaultInterface->fStencilFuncSeparate = glStencilFuncSeparate;
- defaultInterface->fStencilMask = glStencilMask;
- defaultInterface->fStencilMaskSeparate = glStencilMaskSeparate;
- defaultInterface->fStencilOp = glStencilOp;
- defaultInterface->fStencilOpSeparate = glStencilOpSeparate;
- defaultInterface->fTexCoordPointer = glTexCoordPointer;
- defaultInterface->fTexEnvi = glTexEnvi;
- // mac uses GLenum for internalFormat param (non-standard)
- // amounts to int vs. uint.
- defaultInterface->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D;
- defaultInterface->fTexParameteri = glTexParameteri;
- defaultInterface->fTexSubImage2D = glTexSubImage2D;
- defaultInterface->fUniform1f = glUniform1f;
- defaultInterface->fUniform1i = glUniform1i;
- defaultInterface->fUniform1fv = glUniform1fv;
- defaultInterface->fUniform1iv = glUniform1iv;
- defaultInterface->fUniform2f = glUniform2f;
- defaultInterface->fUniform2i = glUniform2i;
- defaultInterface->fUniform2fv = glUniform2fv;
- defaultInterface->fUniform2iv = glUniform2iv;
- defaultInterface->fUniform3f = glUniform3f;
- defaultInterface->fUniform3i = glUniform3i;
- defaultInterface->fUniform3fv = glUniform3fv;
- defaultInterface->fUniform3iv = glUniform3iv;
- defaultInterface->fUniform4f = glUniform4f;
- defaultInterface->fUniform4i = glUniform4i;
- defaultInterface->fUniform4fv = glUniform4fv;
- defaultInterface->fUniform4iv = glUniform4iv;
- defaultInterface->fUniform4fv = glUniform4fv;
- defaultInterface->fUniformMatrix2fv = glUniformMatrix2fv;
- defaultInterface->fUniformMatrix3fv = glUniformMatrix3fv;
- defaultInterface->fUniformMatrix4fv = glUniformMatrix4fv;
- defaultInterface->fUseProgram = glUseProgram;
- defaultInterface->fVertexAttrib4fv = glVertexAttrib4fv;
- defaultInterface->fVertexAttribPointer = glVertexAttribPointer;
- defaultInterface->fVertexPointer = glVertexPointer;
- defaultInterface->fViewport = glViewport;
- defaultInterface->fGenFramebuffers = glGenFramebuffers;
- defaultInterface->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
- defaultInterface->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
- defaultInterface->fBindFramebuffer = glBindFramebuffer;
- defaultInterface->fFramebufferTexture2D = glFramebufferTexture2D;
- defaultInterface->fCheckFramebufferStatus = glCheckFramebufferStatus;
- defaultInterface->fDeleteFramebuffers = glDeleteFramebuffers;
- defaultInterface->fRenderbufferStorage = glRenderbufferStorage;
- defaultInterface->fGenRenderbuffers = glGenRenderbuffers;
- defaultInterface->fDeleteRenderbuffers = glDeleteRenderbuffers;
- defaultInterface->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
- defaultInterface->fBindRenderbuffer = glBindRenderbuffer;
+ interface->fNPOTRenderTargetSupport = kProbe_GrGLCapability;
+ interface->fMinRenderTargetHeight = kProbe_GrGLCapability;
+ interface->fMinRenderTargetWidth = kProbe_GrGLCapability;
+ interface->fActiveTexture = glActiveTexture;
+ interface->fAttachShader = glAttachShader;
+ interface->fBindAttribLocation = glBindAttribLocation;
+ interface->fBindBuffer = glBindBuffer;
+ interface->fBindTexture = glBindTexture;
+ interface->fBlendColor = glBlendColor;
+ interface->fBlendFunc = glBlendFunc;
+ interface->fBufferData = (GrGLBufferDataProc)glBufferData;
+ interface->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData;
+ interface->fClear = glClear;
+ interface->fClearColor = glClearColor;
+ interface->fClearStencil = glClearStencil;
+ interface->fClientActiveTexture = glClientActiveTexture;
+ interface->fColorMask = glColorMask;
+ interface->fColorPointer = glColorPointer;
+ interface->fColor4ub = glColor4ub;
+ interface->fCompileShader = glCompileShader;
+ interface->fCompressedTexImage2D = glCompressedTexImage2D;
+ interface->fCreateProgram = glCreateProgram;
+ interface->fCreateShader = glCreateShader;
+ interface->fCullFace = glCullFace;
+ interface->fDeleteBuffers = glDeleteBuffers;
+ interface->fDeleteProgram = glDeleteProgram;
+ interface->fDeleteShader = glDeleteShader;
+ interface->fDeleteTextures = glDeleteTextures;
+ interface->fDepthMask = glDepthMask;
+ interface->fDisable = glDisable;
+ interface->fDisableClientState = glDisableClientState;
+ interface->fDisableVertexAttribArray = glDisableVertexAttribArray;
+ interface->fDrawArrays = glDrawArrays;
+ interface->fDrawBuffer = NULL;
+ interface->fDrawBuffers = NULL;
+ interface->fDrawElements = glDrawElements;
+ interface->fEnable = glEnable;
+ interface->fEnableClientState = glEnableClientState;
+ interface->fEnableVertexAttribArray = glEnableVertexAttribArray;
+ interface->fFrontFace = glFrontFace;
+ interface->fGenBuffers = glGenBuffers;
+ interface->fGetBufferParameteriv = glGetBufferParameteriv;
+ interface->fGetError = glGetError;
+ interface->fGetIntegerv = glGetIntegerv;
+ interface->fGetProgramInfoLog = glGetProgramInfoLog;
+ interface->fGetProgramiv = glGetProgramiv;
+ interface->fGetShaderInfoLog = glGetShaderInfoLog;
+ interface->fGetShaderiv = glGetShaderiv;
+ interface->fGetString = glGetString;
+ interface->fGenTextures = glGenTextures;
+ interface->fGetUniformLocation = glGetUniformLocation;
+ interface->fLineWidth = glLineWidth;
+ interface->fLinkProgram = glLinkProgram;
+ interface->fLoadMatrixf = glLoadMatrixf;
+ interface->fMatrixMode = glMatrixMode;
+ interface->fPointSize = glPointSize;
+ interface->fPixelStorei = glPixelStorei;
+ interface->fReadBuffer = NULL;
+ interface->fReadPixels = glReadPixels;
+ interface->fScissor = glScissor;
+ interface->fShadeModel = glShadeModel;
+ interface->fShaderSource = glShaderSource;
+ interface->fStencilFunc = glStencilFunc;
+ interface->fStencilFuncSeparate = glStencilFuncSeparate;
+ interface->fStencilMask = glStencilMask;
+ interface->fStencilMaskSeparate = glStencilMaskSeparate;
+ interface->fStencilOp = glStencilOp;
+ interface->fStencilOpSeparate = glStencilOpSeparate;
+ interface->fTexCoordPointer = glTexCoordPointer;
+ interface->fTexEnvi = glTexEnvi;
+ // mac uses GLenum for internalFormat param (non-standard)
+ // amounts to int vs. uint.
+ interface->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D;
+ interface->fTexParameteri = glTexParameteri;
+ interface->fTexSubImage2D = glTexSubImage2D;
+ interface->fUniform1f = glUniform1f;
+ interface->fUniform1i = glUniform1i;
+ interface->fUniform1fv = glUniform1fv;
+ interface->fUniform1iv = glUniform1iv;
+ interface->fUniform2f = glUniform2f;
+ interface->fUniform2i = glUniform2i;
+ interface->fUniform2fv = glUniform2fv;
+ interface->fUniform2iv = glUniform2iv;
+ interface->fUniform3f = glUniform3f;
+ interface->fUniform3i = glUniform3i;
+ interface->fUniform3fv = glUniform3fv;
+ interface->fUniform3iv = glUniform3iv;
+ interface->fUniform4f = glUniform4f;
+ interface->fUniform4i = glUniform4i;
+ interface->fUniform4fv = glUniform4fv;
+ interface->fUniform4iv = glUniform4iv;
+ interface->fUniform4fv = glUniform4fv;
+ interface->fUniformMatrix2fv = glUniformMatrix2fv;
+ interface->fUniformMatrix3fv = glUniformMatrix3fv;
+ interface->fUniformMatrix4fv = glUniformMatrix4fv;
+ interface->fUseProgram = glUseProgram;
+ interface->fVertexAttrib4fv = glVertexAttrib4fv;
+ interface->fVertexAttribPointer = glVertexAttribPointer;
+ interface->fVertexPointer = glVertexPointer;
+ interface->fViewport = glViewport;
+ interface->fGenFramebuffers = glGenFramebuffers;
+ interface->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
+ interface->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
+ interface->fBindFramebuffer = glBindFramebuffer;
+ interface->fFramebufferTexture2D = glFramebufferTexture2D;
+ interface->fCheckFramebufferStatus = glCheckFramebufferStatus;
+ interface->fDeleteFramebuffers = glDeleteFramebuffers;
+ interface->fRenderbufferStorage = glRenderbufferStorage;
+ interface->fGenRenderbuffers = glGenRenderbuffers;
+ interface->fDeleteRenderbuffers = glDeleteRenderbuffers;
+ interface->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
+ interface->fBindRenderbuffer = glBindRenderbuffer;
-#if GL_OES_mapbuffer
- defaultInterface->fMapBuffer = glMapBufferOES;
- defaultInterface->fUnmapBuffer = glUnmapBufferOES;
-#endif
+ #if GL_OES_mapbuffer
+ interface->fMapBuffer = glMapBufferOES;
+ interface->fUnmapBuffer = glUnmapBufferOES;
+ #endif
-#if GL_APPLE_framebuffer_multisample
- defaultInterface->fRenderbufferStorageMultisample = glRenderbufferStorageMultisampleAPPLE;
- defaultInterface->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE;
-#endif
- defaultInterface->fBindFragDataLocationIndexed = NULL;
+ #if GL_APPLE_framebuffer_multisample
+ interface->fRenderbufferStorageMultisample = glRenderbufferStorageMultisampleAPPLE;
+ interface->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE;
+ #endif
+ interface->fBindFragDataLocationIndexed = NULL;
- defaultInterface->fBindingsExported = (GrGLBinding)(kES2_GrGLBinding | kES1_GrGLBinding);
-
- GrGLSetDefaultGLInterface(defaultInterface)->unref();
-}
\ No newline at end of file
+ interface->fBindingsExported = (GrGLBinding)(kES2_GrGLBinding | kES1_GrGLBinding);
+ }
+ glInterface.get()->ref();
+ return glInterface.get();
+}