1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #include "gl/GrGLInterface.h" 11 #include "gl/GrGLAssembleInterface.h" 12 13 #include <dlfcn.h> 14 15 class GLLoader { 16 public: 17 GLLoader() { 18 fLibrary = dlopen( 19 "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib", 20 RTLD_LAZY); 21 } 22 23 ~GLLoader() { 24 if (fLibrary) { 25 dlclose(fLibrary); 26 } 27 } 28 29 void* handle() const { 30 return NULL == fLibrary ? RTLD_DEFAULT : fLibrary; 31 } 32 33 private: 34 void* fLibrary; 35 }; 36 37 class GLProcGetter { 38 public: 39 GLProcGetter() {} 40 41 GrGLFuncPtr getProc(const char name[]) const { 42 return (GrGLFuncPtr) dlsym(fLoader.handle(), name); 43 } 44 45 private: 46 GLLoader fLoader; 47 }; 48 49 static GrGLFuncPtr mac_get_gl_proc(void* ctx, const char name[]) { 50 SkASSERT(ctx); 51 const GLProcGetter* getter = (const GLProcGetter*) ctx; 52 return getter->getProc(name); 53 } 54 55 const GrGLInterface* GrGLCreateNativeInterface() { 56 GLProcGetter getter; 57 return GrGLAssembleGLInterface(&getter, mac_get_gl_proc); 58 } 59