• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2012 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 #include "gl/GrGLInterface.h"
10 #include "gl/GrGLAssembleInterface.h"
11 #include "../ports/SkOSLibrary.h"
12 
13 #include <EGL/egl.h>
14 
15 namespace {
16 struct Libs {
17     void* fGLLib;
18     void* fEGLLib;
19 };
20 }
21 
angle_get_gl_proc(void * ctx,const char name[])22 static GrGLFuncPtr angle_get_gl_proc(void* ctx, const char name[]) {
23     const Libs* libs = reinterpret_cast<const Libs*>(ctx);
24     GrGLFuncPtr proc = (GrGLFuncPtr) GetProcedureAddress(libs->fGLLib, name);
25     if (proc) {
26         return proc;
27     }
28     proc = (GrGLFuncPtr) GetProcedureAddress(libs->fEGLLib, name);
29     if (proc) {
30         return proc;
31     }
32     return eglGetProcAddress(name);
33 }
34 
GrGLCreateANGLEInterface()35 const GrGLInterface* GrGLCreateANGLEInterface() {
36     static Libs gLibs = { nullptr, nullptr };
37 
38     if (nullptr == gLibs.fGLLib) {
39         // We load the ANGLE library and never let it go
40 #if defined _WIN32
41         gLibs.fGLLib = DynamicLoadLibrary("libGLESv2.dll");
42         gLibs.fEGLLib = DynamicLoadLibrary("libEGL.dll");
43 #elif defined SK_BUILD_FOR_MAC
44         gLibs.fGLLib = DynamicLoadLibrary("libGLESv2.dylib");
45         gLibs.fEGLLib = DynamicLoadLibrary("libEGL.dylib");
46 #else
47         gLibs.fGLLib = DynamicLoadLibrary("libGLESv2.so");
48         gLibs.fEGLLib = DynamicLoadLibrary("libEGL.so");
49 #endif
50     }
51 
52     if (nullptr == gLibs.fGLLib || nullptr == gLibs.fEGLLib) {
53         // We can't setup the interface correctly w/o the so
54         return nullptr;
55     }
56 
57     return GrGLAssembleGLESInterface(&gLibs, angle_get_gl_proc);
58 }
59