Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / gpu / gl / mac / GrGLCreateNativeInterface_mac.cpp
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 }