const GrGLInterface* GrGLCreateNativeInterface() {

    GrGLGetStringiProc getStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi");

    const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VERSION));
    GrGLVersion version = GrGLGetVersionFromString(verStr);
    GrGLStandard standard = GrGLGetStandardInUseFromString(verStr);

    GrGLExtensions extensions;
    if (!extensions.init(standard, glGetString, getStringi, glGetIntegerv)) {
        return NULL;
    }

    GrGLInterface* interface = NULL;
    if (kGLES_GrGLStandard == standard) {
        interface = create_es_interface(version, &extensions);
    } else if (kGL_GrGLStandard == standard) {
        interface = create_desktop_interface(version, extensions);
    }

    if (NULL != interface) {
        interface->fExtensions.swap(&extensions);
    }

    return interface;
}
Пример #2
0
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;
}