#endif
#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
typedef void (*_eng_fn) (void);
-_eng_fn (*glsym_glXGetProcAddress) (const char *a) = NULL;
-void (*glsym_glXBindTexImage) (Display *a, GLXDrawable b, int c, int *d) = NULL;
-void (*glsym_glXReleaseTexImage) (Display *a, GLXDrawable b, int c) = NULL;
+_eng_fn (*glsym_glXGetProcAddress) (const char *a) = NULL;
+void (*glsym_glXBindTexImage) (Display *a, GLXDrawable b, int c, int *d) = NULL;
+void (*glsym_glXReleaseTexImage) (Display *a, GLXDrawable b, int c) = NULL;
#endif
static void
if (done) return;
#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, "eglBindTexImageEXT");
FINDSYM(glsym_eglBindTexImage, "eglBindTexImageARB");
+ FINDSYM(glsym_eglBindTexImage, "eglBindTexImageKHR");
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImage");
FINDSYM(glsym_eglReleaseTexImage, "eglReleaseTexImageEXT");
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
#define FINDSYM(dst, sym) \
if ((!dst) && (glsym_glXGetProcAddress)) dst = glsym_glXGetProcAddress(sym); \
Visual *visual;
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
- EGLSurface egl_surface;
+ void *egl_surface;
#else
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
GLXFBConfig fbc;
Native *n = im->native.data;
#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
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
if (glsym_glXBindTexImage)
GLX_TEXTURE_TARGET_EXT,
GLX_TEXTURE_2D_EXT,
GLX_TEXTURE_FORMAT_EXT,
- GLX_TEXTURE_FORMAT_RGBA_EXT,
+// GLX_TEXTURE_FORMAT_RGBA_EXT,
+ GLX_TEXTURE_FORMAT_RGB_EXT,
0
};
Native *n = im->native.data;
#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
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
if (glsym_glXReleaseTexImage)
Native *n = im->native.data;
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
+# if 0 // old texfrompixmap
if (n->egl_surface)
{
eglDestroySurface(re->win->egl_disp, n->egl_surface);
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
# ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT
if (n->glx_pixmap)
im->native.func.bind = _native_bind_cb;
im->native.func.unbind = _native_unbind_cb;
im->native.func.free = _native_free_cb;
+#if 0 // old texfrompixmap
n->egl_surface = eglCreatePixmapSurface(re->win->egl_disp,
egl_config, pm,
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)
{
printf("ERROR: eglCreatePixmapSurface() for 0x%x failed\n", pm);
GLX_TEXTURE_TARGET_EXT,
GLX_TEXTURE_2D_EXT,
GLX_TEXTURE_FORMAT_EXT,
- GLX_TEXTURE_FORMAT_RGBA_EXT,
+// GLX_TEXTURE_FORMAT_RGBA_EXT,
+ GLX_TEXTURE_FORMAT_RGB_EXT,
0
};
#endif