/* * Copyright 2011 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" #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 mac_get_gl_proc(void* ctx, const char name[]) { SkASSERT(NULL != ctx); const GLProcGetter* getter = (const GLProcGetter*) ctx; return getter->getProc(name); } const GrGLInterface* GrGLCreateNativeInterface() { GLProcGetter getter; return GrGLAssembleGLInterface(&getter, mac_get_gl_proc); }