Home | History | Annotate | Download | only in mac
      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 (NULL != 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(NULL != 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