Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f0d5669 authored by Jesse Hall's avatar Jesse Hall Committed by Gerrit Code Review
Browse files

Merge "Expose core EGL entry points to eglGetProcAddress"

parents 85085cd6 c0ec5e23
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -188,12 +188,17 @@ void* Loader::open(egl_connection_t* cnx)
    LOG_ALWAYS_FATAL_IF(!hnd, "couldn't find an OpenGL ES implementation");
    LOG_ALWAYS_FATAL_IF(!hnd, "couldn't find an OpenGL ES implementation");


#if defined(__LP64__)
#if defined(__LP64__)
    cnx->libEgl   = load_wrapper("/system/lib64/libEGL.so");
    cnx->libGles2 = load_wrapper("/system/lib64/libGLESv2.so");
    cnx->libGles2 = load_wrapper("/system/lib64/libGLESv2.so");
    cnx->libGles1 = load_wrapper("/system/lib64/libGLESv1_CM.so");
    cnx->libGles1 = load_wrapper("/system/lib64/libGLESv1_CM.so");
#else
#else
    cnx->libEgl   = load_wrapper("/system/lib/libEGL.so");
    cnx->libGles2 = load_wrapper("/system/lib/libGLESv2.so");
    cnx->libGles2 = load_wrapper("/system/lib/libGLESv2.so");
    cnx->libGles1 = load_wrapper("/system/lib/libGLESv1_CM.so");
    cnx->libGles1 = load_wrapper("/system/lib/libGLESv1_CM.so");
#endif
#endif
    LOG_ALWAYS_FATAL_IF(!cnx->libEgl,
            "couldn't load system EGL wrapper libraries");

    LOG_ALWAYS_FATAL_IF(!cnx->libGles2 || !cnx->libGles1,
    LOG_ALWAYS_FATAL_IF(!cnx->libGles2 || !cnx->libGles1,
            "couldn't load system OpenGL ES wrapper libraries");
            "couldn't load system OpenGL ES wrapper libraries");


+5 −2
Original line number Original line Diff line number Diff line
@@ -877,11 +877,14 @@ EGLint eglGetError(void)
    return err;
    return err;
}
}


static __eglMustCastToProperFunctionPointerType findBuiltinGLWrapper(
static __eglMustCastToProperFunctionPointerType findBuiltinWrapper(
        const char* procname) {
        const char* procname) {
    const egl_connection_t* cnx = &gEGLImpl;
    const egl_connection_t* cnx = &gEGLImpl;
    void* proc = NULL;
    void* proc = NULL;


    proc = dlsym(cnx->libEgl, procname);
    if (proc) return (__eglMustCastToProperFunctionPointerType)proc;

    proc = dlsym(cnx->libGles2, procname);
    proc = dlsym(cnx->libGles2, procname);
    if (proc) return (__eglMustCastToProperFunctionPointerType)proc;
    if (proc) return (__eglMustCastToProperFunctionPointerType)proc;


@@ -912,7 +915,7 @@ __eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
    addr = findProcAddress(procname, sExtensionMap, NELEM(sExtensionMap));
    addr = findProcAddress(procname, sExtensionMap, NELEM(sExtensionMap));
    if (addr) return addr;
    if (addr) return addr;


    addr = findBuiltinGLWrapper(procname);
    addr = findBuiltinWrapper(procname);
    if (addr) return addr;
    if (addr) return addr;


    // this protects accesses to sGLExtentionMap and sGLExtentionSlot
    // this protects accesses to sGLExtentionMap and sGLExtentionSlot
+1 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ struct egl_connection_t {
    EGLint              minor;
    EGLint              minor;
    egl_t               egl;
    egl_t               egl;


    void*               libEgl;
    void*               libGles1;
    void*               libGles1;
    void*               libGles2;
    void*               libGles2;
};
};