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 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 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