Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp

Issue 500153002: Remove reliance on linked in GL functions for assembling GLES interfaces (Closed) Base URL: https://skia.googlesource.com/skia.git@gmcfg
Patch Set: cleanup Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp
diff --git a/src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp b/src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp
index 04089656946a97c17fed308794fa7bb4b30b644d..024a631acc7a102fe66478731528e26b92776bbc 100644
--- a/src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp
+++ b/src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp
@@ -1,174 +1,56 @@
/*
- * Copyright 2011 Google Inc.
+ * Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "gl/GrGLInterface.h"
-
-#import <OpenGLES/ES2/gl.h>
-#import <OpenGLES/ES2/glext.h>
+#include "gl/GrGLAssembleInterface.h"
+#include <dlfcn.h>
+
+class GLLoader {
+public:
+ GLLoader() {
+ fLibrary = dlopen(
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib",
+ RTLD_LAZY);
+ }
+
+ ~GLLoader() {
+ if (NULL != fLibrary) {
+ dlclose(fLibrary);
+ }
+ }
+
+ void* handle() const {
+ return NULL == fLibrary ? RTLD_DEFAULT : fLibrary;
+ }
+
+private:
+ void* fLibrary;
+};
+
+class GLProcGetter {
+public:
+ GLProcGetter() {}
+
+ GrGLFuncPtr getProc(const char name[]) const {
+ return (GrGLFuncPtr) dlsym(fLoader.handle(), name);
+ }
+
+private:
+ GLLoader fLoader;
+};
+
+static GrGLFuncPtr ios_get_gl_proc(void* ctx, const char name[]) {
+ SkASSERT(NULL != ctx);
+ const GLProcGetter* getter = (const GLProcGetter*) ctx;
+ return getter->getProc(name);
+}
const GrGLInterface* GrGLCreateNativeInterface() {
- GrGLInterface* interface = SkNEW(GrGLInterface);
-
- GrGLInterface::Functions* functions = &interface->fFunctions;
-
- functions->fActiveTexture = glActiveTexture;
- functions->fAttachShader = glAttachShader;
- functions->fBindAttribLocation = glBindAttribLocation;
- functions->fBindBuffer = glBindBuffer;
- functions->fBindTexture = glBindTexture;
- functions->fBlendColor = glBlendColor;
- functions->fBlendFunc = glBlendFunc;
- functions->fBufferData = (GrGLBufferDataProc)glBufferData;
- functions->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData;
- functions->fClear = glClear;
- functions->fClearColor = glClearColor;
- functions->fClearStencil = glClearStencil;
- functions->fColorMask = glColorMask;
- functions->fCompileShader = glCompileShader;
- functions->fCompressedTexImage2D = glCompressedTexImage2D;
- functions->fCompressedTexSubImage2D = glCompressedTexSubImage2D;
- functions->fCopyTexSubImage2D = glCopyTexSubImage2D;
- functions->fCreateProgram = glCreateProgram;
- functions->fCreateShader = glCreateShader;
- functions->fCullFace = glCullFace;
- functions->fDeleteBuffers = glDeleteBuffers;
- functions->fDeleteProgram = glDeleteProgram;
- functions->fDeleteShader = glDeleteShader;
- functions->fDeleteTextures = glDeleteTextures;
- functions->fDepthMask = glDepthMask;
- functions->fDisable = glDisable;
- functions->fDisableVertexAttribArray = glDisableVertexAttribArray;
- functions->fDrawArrays = glDrawArrays;
- functions->fDrawBuffer = NULL;
- functions->fDrawBuffers = NULL;
- functions->fDrawElements = glDrawElements;
- functions->fEnable = glEnable;
- functions->fEnableVertexAttribArray = glEnableVertexAttribArray;
- functions->fFinish = glFinish;
- functions->fFlush = glFlush;
- functions->fFrontFace = glFrontFace;
- functions->fGenBuffers = glGenBuffers;
- functions->fGenerateMipmap = glGenerateMipmap;
- functions->fGetBufferParameteriv = glGetBufferParameteriv;
- functions->fGetError = glGetError;
- functions->fGetIntegerv = glGetIntegerv;
- functions->fGetProgramInfoLog = glGetProgramInfoLog;
- functions->fGetProgramiv = glGetProgramiv;
- functions->fGetShaderInfoLog = glGetShaderInfoLog;
- functions->fGetShaderiv = glGetShaderiv;
- functions->fGetString = glGetString;
- functions->fGenTextures = glGenTextures;
- functions->fGetUniformLocation = glGetUniformLocation;
- functions->fLineWidth = glLineWidth;
- functions->fLinkProgram = glLinkProgram;
- functions->fPixelStorei = glPixelStorei;
- functions->fReadBuffer = NULL;
- functions->fReadPixels = glReadPixels;
- functions->fScissor = glScissor;
- functions->fShaderSource = (GrGLShaderSourceProc) glShaderSource;
- functions->fStencilFunc = glStencilFunc;
- functions->fStencilFuncSeparate = glStencilFuncSeparate;
- functions->fStencilMask = glStencilMask;
- functions->fStencilMaskSeparate = glStencilMaskSeparate;
- functions->fStencilOp = glStencilOp;
- functions->fStencilOpSeparate = glStencilOpSeparate;
- // mac uses GLenum for internalFormat param (non-standard)
- // amounts to int vs. uint.
- functions->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D;
-#if GL_ARB_texture_storage
- functions->fTexStorage2D = glTexStorage2D;
-#elif GL_EXT_texture_storage
- functions->fTexStorage2D = glTexStorage2DEXT;
-#endif
-#if GL_EXT_discard_framebuffer
- functions->fDiscardFramebuffer = glDiscardFramebufferEXT;
-#endif
- functions->fTexParameteri = glTexParameteri;
- functions->fTexParameteriv = glTexParameteriv;
- functions->fTexSubImage2D = glTexSubImage2D;
- functions->fUniform1f = glUniform1f;
- functions->fUniform1i = glUniform1i;
- functions->fUniform1fv = glUniform1fv;
- functions->fUniform1iv = glUniform1iv;
- functions->fUniform2f = glUniform2f;
- functions->fUniform2i = glUniform2i;
- functions->fUniform2fv = glUniform2fv;
- functions->fUniform2iv = glUniform2iv;
- functions->fUniform3f = glUniform3f;
- functions->fUniform3i = glUniform3i;
- functions->fUniform3fv = glUniform3fv;
- functions->fUniform3iv = glUniform3iv;
- functions->fUniform4f = glUniform4f;
- functions->fUniform4i = glUniform4i;
- functions->fUniform4fv = glUniform4fv;
- functions->fUniform4iv = glUniform4iv;
- functions->fUniform4fv = glUniform4fv;
- functions->fUniformMatrix2fv = glUniformMatrix2fv;
- functions->fUniformMatrix3fv = glUniformMatrix3fv;
- functions->fUniformMatrix4fv = glUniformMatrix4fv;
- functions->fUseProgram = glUseProgram;
- functions->fVertexAttrib4fv = glVertexAttrib4fv;
- functions->fVertexAttribPointer = glVertexAttribPointer;
- functions->fViewport = glViewport;
- functions->fGenFramebuffers = glGenFramebuffers;
- functions->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
- functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
- functions->fBindFramebuffer = glBindFramebuffer;
- functions->fFramebufferTexture2D = glFramebufferTexture2D;
- functions->fCheckFramebufferStatus = glCheckFramebufferStatus;
- functions->fDeleteFramebuffers = glDeleteFramebuffers;
- functions->fRenderbufferStorage = glRenderbufferStorage;
- functions->fGenRenderbuffers = glGenRenderbuffers;
- functions->fDeleteRenderbuffers = glDeleteRenderbuffers;
- functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
- functions->fBindRenderbuffer = glBindRenderbuffer;
-
-#if GL_OES_mapbuffer
- functions->fMapBuffer = glMapBufferOES;
- functions->fUnmapBuffer = glUnmapBufferOES;
-#endif
-
-#if GL_EXT_map_buffer_range || GL_ES_VERSION_3_0
- functions->fMapBufferRange = glMapBufferRangeEXT;
- functions->fFlushMappedBufferRange = glFlushMappedBufferRangeEXT;
-#endif
-
-#if GL_APPLE_framebuffer_multisample
- functions->fRenderbufferStorageMultisampleES2APPLE = glRenderbufferStorageMultisampleAPPLE;
- functions->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE;
-#endif
-
-#if GL_OES_vertex_array_object
- functions->fBindVertexArray = glBindVertexArrayOES;
- functions->fDeleteVertexArrays = glDeleteVertexArraysOES;
- functions->fGenVertexArrays = glGenVertexArraysOES;
-#endif
-
-#if GL_EXT_debug_marker
- functions->fInsertEventMarker = glInsertEventMarkerEXT;
- functions->fPushGroupMarker = glPushGroupMarkerEXT;
- functions->fPopGroupMarker = glPopGroupMarkerEXT;
-#endif
-
-#if GL_ES_VERSION_3_0 || GL_ARB_invalidate_subdata
- functions->fInvalidateFramebuffer = glInvalidateFramebuffer;
- functions->fInvalidateSubFramebuffer = glInvalidateSubFramebuffer;
-#endif
-
-#if GL_ARB_invalidate_subdata
- functions->fInvalidateBufferData = glInvalidateBufferData;
- functions->fInvalidateBufferSubData = glInvalidateBufferSubData;
- functions->fInvalidateTexImage = glInvalidateTexImage;
- functions->fInvalidateTexSubImage = glInvalidateTexSubImage;
-#endif
-
- interface->fStandard = kGLES_GrGLStandard;
- interface->fExtensions.init(kGLES_GrGLStandard, glGetString, NULL, glGetIntegerv);
-
- return interface;
+ GLProcGetter getter;
+ return GrGLAssembleGLESInterface(&getter, ios_get_gl_proc);
}

Powered by Google App Engine
This is Rietveld 408576698