forked from enlightenment/efl
parent
d71885ab87
commit
dcd3b345e5
|
@ -12,14 +12,24 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
void (*glsym_eglBindTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
|
|
||||||
void (*glsym_eglReleaseTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
|
#ifndef EGL_NATIVE_PIXMAP_KHR
|
||||||
|
# define EGL_NATIVE_PIXMAP_KHR 0x30b0
|
||||||
|
#endif
|
||||||
|
typedef void (*_eng_fn) (void);
|
||||||
|
|
||||||
|
_eng_fn (*glsym_eglGetProcAddress) (const char *a) = NULL;
|
||||||
|
void (*glsym_eglBindTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
|
||||||
|
void (*glsym_eglReleaseTexImage) (EGLDisplay a, EGLSurface b, int c) = NULL;
|
||||||
|
void *(*glsym_eglCreateImage) (EGLDisplay a, EGLContext b, EGLenum c, EGLClientBuffer d, const int *e) = NULL;
|
||||||
|
void (*glsym_eglDestroyImage) (EGLDisplay a, void *b) = NULL;
|
||||||
|
void (*glsym_glEGLImageTargetTexture2DOES) (int a, void *b) = NULL;
|
||||||
#else
|
#else
|
||||||
typedef void (*_eng_fn) (void);
|
typedef void (*_eng_fn) (void);
|
||||||
|
|
||||||
_eng_fn (*glsym_glXGetProcAddress) (const char *a) = NULL;
|
_eng_fn (*glsym_glXGetProcAddress) (const char *a) = NULL;
|
||||||
void (*glsym_glXBindTexImage) (Display *a, GLXDrawable b, int c, int *d) = NULL;
|
void (*glsym_glXBindTexImage) (Display *a, GLXDrawable b, int c, int *d) = NULL;
|
||||||
void (*glsym_glXReleaseTexImage) (Display *a, GLXDrawable b, int c) = NULL;
|
void (*glsym_glXReleaseTexImage) (Display *a, GLXDrawable b, int c) = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -31,14 +41,35 @@ _sym_init(void)
|
||||||
if (done) return;
|
if (done) return;
|
||||||
|
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
#define FINDSYM(dst, sym) if (!dst) dst = dlsym(RTLD_DEFAULT, sym)
|
#define FINDSYM(dst, sym) \
|
||||||
|
if ((!dst) && (glsym_eglGetProcAddress)) dst = glsym_eglGetProcAddress(sym); \
|
||||||
|
if (!dst) dst = dlsym(RTLD_DEFAULT, sym)
|
||||||
|
|
||||||
|
FINDSYM(glsym_eglGetProcAddress, "glXGetProcAddress");
|
||||||
|
FINDSYM(glsym_eglGetProcAddress, "glXGetProcAddressEXT");
|
||||||
|
FINDSYM(glsym_eglGetProcAddress, "glXGetProcAddressARB");
|
||||||
|
|
||||||
FINDSYM(glsym_eglBindTexImage, "eglBindTexImage");
|
FINDSYM(glsym_eglBindTexImage, "eglBindTexImage");
|
||||||
FINDSYM(glsym_eglBindTexImage, "eglBindTexImageEXT");
|
FINDSYM(glsym_eglBindTexImage, "eglBindTexImageEXT");
|
||||||
FINDSYM(glsym_eglBindTexImage, "eglBindTexImageARB");
|
FINDSYM(glsym_eglBindTexImage, "eglBindTexImageARB");
|
||||||
|
FINDSYM(glsym_eglBindTexImage, "eglBindTexImageKHR");
|
||||||
|
|
||||||
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImage");
|
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImage");
|
||||||
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageEXT");
|
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageEXT");
|
||||||
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageARB");
|
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageARB");
|
||||||
|
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageKHR");
|
||||||
|
|
||||||
|
FINDSYM(glsym_eglCreateImage, "eglCreateImage");
|
||||||
|
FINDSYM(glsym_eglCreateImage, "eglCreateImageEXT");
|
||||||
|
FINDSYM(glsym_eglCreateImage, "eglCreateImageARB");
|
||||||
|
FINDSYM(glsym_eglCreateImage, "eglCreateImageKHR");
|
||||||
|
|
||||||
|
FINDSYM(glsym_eglDestroyImage, "eglDestroyImage");
|
||||||
|
FINDSYM(glsym_eglDestroyImage, "eglDestroyImageEXT");
|
||||||
|
FINDSYM(glsym_eglDestroyImage, "eglDestroyImageARB");
|
||||||
|
FINDSYM(glsym_eglDestroyImage, "eglDestroyImageKHR");
|
||||||
|
|
||||||
|
FINDSYM(glsym_glEGLImageTargetTexture2DOES, "glEGLImageTargetTexture2DOES");
|
||||||
#else
|
#else
|
||||||
#define FINDSYM(dst, sym) \
|
#define FINDSYM(dst, sym) \
|
||||||
if ((!dst) && (glsym_glXGetProcAddress)) dst = glsym_glXGetProcAddress(sym); \
|
if ((!dst) && (glsym_glXGetProcAddress)) dst = glsym_glXGetProcAddress(sym); \
|
||||||
|
@ -1028,7 +1059,7 @@ struct _Native
|
||||||
Visual *visual;
|
Visual *visual;
|
||||||
|
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
EGLSurface egl_surface;
|
void *egl_surface;
|
||||||
#else
|
#else
|
||||||
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
||||||
GLXFBConfig fbc;
|
GLXFBConfig fbc;
|
||||||
|
@ -1054,10 +1085,19 @@ _native_bind_cb(void *data, void *image)
|
||||||
Native *n = im->native.data;
|
Native *n = im->native.data;
|
||||||
|
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
if (glsym_eglBindTexImage)
|
# if 0 // old texfrompixmap
|
||||||
|
if (n->egl_surface)
|
||||||
{
|
{
|
||||||
glsym_eglBindTexImage(re->win->egl_disp, n->egl_surface, EGL_SINGLE_BUFFER);
|
if (glsym_eglBindTexImage)
|
||||||
|
glsym_eglBindTexImage(re->win->egl_disp, n->egl_surface, EGL_SINGLE_BUFFER);
|
||||||
}
|
}
|
||||||
|
# else
|
||||||
|
if (n->egl_surface)
|
||||||
|
{
|
||||||
|
if (glsym_glEGLImageTargetTexture2DOES)
|
||||||
|
glsym_glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, n->egl_surface);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
||||||
if (glsym_glXBindTexImage)
|
if (glsym_glXBindTexImage)
|
||||||
|
@ -1068,7 +1108,8 @@ _native_bind_cb(void *data, void *image)
|
||||||
GLX_TEXTURE_TARGET_EXT,
|
GLX_TEXTURE_TARGET_EXT,
|
||||||
GLX_TEXTURE_2D_EXT,
|
GLX_TEXTURE_2D_EXT,
|
||||||
GLX_TEXTURE_FORMAT_EXT,
|
GLX_TEXTURE_FORMAT_EXT,
|
||||||
GLX_TEXTURE_FORMAT_RGBA_EXT,
|
// GLX_TEXTURE_FORMAT_RGBA_EXT,
|
||||||
|
GLX_TEXTURE_FORMAT_RGB_EXT,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1091,10 +1132,13 @@ _native_unbind_cb(void *data, void *image)
|
||||||
Native *n = im->native.data;
|
Native *n = im->native.data;
|
||||||
|
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
if (glsym_eglReleaseTexImage)
|
# if 0 // old texfrompixmap
|
||||||
|
if (n->egl_surface)
|
||||||
{
|
{
|
||||||
glsym_eglReleaseTexImage(re->win->egl_disp, n->egl_surface, EGL_SINGLE_BUFFER);
|
if (glsym_eglReleaseTexImage)
|
||||||
|
glsym_eglReleaseTexImage(re->win->egl_disp, n->egl_surface, EGL_SINGLE_BUFFER);
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
||||||
if (glsym_glXReleaseTexImage)
|
if (glsym_glXReleaseTexImage)
|
||||||
|
@ -1119,11 +1163,20 @@ _native_free_cb(void *data, void *image)
|
||||||
Native *n = im->native.data;
|
Native *n = im->native.data;
|
||||||
|
|
||||||
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
|
# if 0 // old texfrompixmap
|
||||||
if (n->egl_surface)
|
if (n->egl_surface)
|
||||||
{
|
{
|
||||||
eglDestroySurface(re->win->egl_disp, n->egl_surface);
|
eglDestroySurface(re->win->egl_disp, n->egl_surface);
|
||||||
n->egl_surface = 0;
|
n->egl_surface = 0;
|
||||||
}
|
}
|
||||||
|
# else
|
||||||
|
if (n->egl_surface)
|
||||||
|
{
|
||||||
|
if (glsym_eglDestroyImage)
|
||||||
|
n->egl_surface = glsym_eglDestroyImage(re->win->egl_disp,
|
||||||
|
n->egl_surface);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
|
||||||
if (n->glx_pixmap)
|
if (n->glx_pixmap)
|
||||||
|
@ -1223,9 +1276,17 @@ eng_image_native_set(void *data, void *image, void *native)
|
||||||
im->native.func.bind = _native_bind_cb;
|
im->native.func.bind = _native_bind_cb;
|
||||||
im->native.func.unbind = _native_unbind_cb;
|
im->native.func.unbind = _native_unbind_cb;
|
||||||
im->native.func.free = _native_free_cb;
|
im->native.func.free = _native_free_cb;
|
||||||
|
#if 0 // old texfrompixmap
|
||||||
n->egl_surface = eglCreatePixmapSurface(re->win->egl_disp,
|
n->egl_surface = eglCreatePixmapSurface(re->win->egl_disp,
|
||||||
egl_config, pm,
|
egl_config, pm,
|
||||||
NULL);
|
NULL);
|
||||||
|
#else
|
||||||
|
if (glsym_eglCreateImage)
|
||||||
|
n->egl_surface = glsym_eglCreateImage(re->win->egl_disp,
|
||||||
|
EGL_NO_CONTEXT,
|
||||||
|
EGL_NATIVE_PIXMAP_KHR,
|
||||||
|
NULL);
|
||||||
|
#endif
|
||||||
if (!n->egl_surface)
|
if (!n->egl_surface)
|
||||||
{
|
{
|
||||||
printf("ERROR: eglCreatePixmapSurface() for 0x%x failed\n", pm);
|
printf("ERROR: eglCreatePixmapSurface() for 0x%x failed\n", pm);
|
||||||
|
@ -1303,7 +1364,8 @@ eng_image_native_set(void *data, void *image, void *native)
|
||||||
GLX_TEXTURE_TARGET_EXT,
|
GLX_TEXTURE_TARGET_EXT,
|
||||||
GLX_TEXTURE_2D_EXT,
|
GLX_TEXTURE_2D_EXT,
|
||||||
GLX_TEXTURE_FORMAT_EXT,
|
GLX_TEXTURE_FORMAT_EXT,
|
||||||
GLX_TEXTURE_FORMAT_RGBA_EXT,
|
// GLX_TEXTURE_FORMAT_RGBA_EXT,
|
||||||
|
GLX_TEXTURE_FORMAT_RGB_EXT,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue