Home | History | Annotate | Download | only in angle
      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