const GrGLInterface* GrGLCreateCommandBufferInterface() { LoadCommandBufferOnce(); if (!gfFunctionsLoadedSuccessfully) { return nullptr; } return GrGLAssembleGLESInterface(ghLibrary, command_buffer_get_gl_proc); }
static const GrGLInterface* get_angle_gl_interface() { ANGLEAssembleContext context; if (!context.isValid()) { return nullptr; } return GrGLAssembleGLESInterface(&context, angle_get_gl_proc); }
const GrGLInterface* GrGLAssembleInterface(void* ctx, GrGLGetProc get) { GET_PROC_LOCAL(GetString); if (nullptr == GetString) { return nullptr; } const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION)); if (nullptr == verStr) { return nullptr; } GrGLStandard standard = GrGLGetStandardInUseFromString(verStr); if (kGLES_GrGLStandard == standard) { return GrGLAssembleGLESInterface(ctx, get); } else if (kGL_GrGLStandard == standard) { return GrGLAssembleGLInterface(ctx, get); } return nullptr; }
const GrGLInterface* GrGLCreateANGLEInterface() { static Libs gLibs = { nullptr, nullptr }; if (nullptr == gLibs.fGLLib) { // We load the ANGLE library and never let it go #if defined _WIN32 gLibs.fGLLib = DynamicLoadLibrary("libGLESv2.dll"); gLibs.fEGLLib = DynamicLoadLibrary("libEGL.dll"); #elif defined SK_BUILD_FOR_MAC gLibs.fGLLib = DynamicLoadLibrary("libGLESv2.dylib"); gLibs.fEGLLib = DynamicLoadLibrary("libEGL.dylib"); #else gLibs.fGLLib = DynamicLoadLibrary("libGLESv2.so"); gLibs.fGLLib = DynamicLoadLibrary("libEGL.so"); #endif } if (nullptr == gLibs.fGLLib || nullptr == gLibs.fEGLLib) { // We can't setup the interface correctly w/o the so return nullptr; } return GrGLAssembleGLESInterface(&gLibs, angle_get_gl_proc); }