summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2011-11-03 15:49:07 +0800
committerChia-I Wu <olvaffe@gmail.com>2011-11-03 16:04:09 +0800
commit0b1348000e1cedc6d87005df690c1758ba59aba6 (patch)
treeef0374a23ce97fa9a13f574005e16b5c0cf0e704
parent5a1e31e1edff21c4cebeabaa6a8354e9933ee6d4 (diff)
es1/t-f-p: use GL_OES_EGL_image_external when available
-rw-r--r--src/egl/opengles1/texture_from_pixmap.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/egl/opengles1/texture_from_pixmap.c b/src/egl/opengles1/texture_from_pixmap.c
index cecf4fe7..eeb6ee77 100644
--- a/src/egl/opengles1/texture_from_pixmap.c
+++ b/src/egl/opengles1/texture_from_pixmap.c
@@ -60,6 +60,7 @@ struct app_data {
EGLImageKHR img;
/* OpenGL ES */
+ GLenum target;
GLuint texture;
PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;
@@ -167,7 +168,7 @@ app_redraw(struct app_data *data)
* must be re-attached.
*/
eglWaitNative(EGL_CORE_NATIVE_ENGINE);
- data->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D,
+ data->glEGLImageTargetTexture2DOES(data->target,
(GLeglImageOES) data->img);
}
@@ -319,11 +320,11 @@ app_init_gl(struct app_data *data)
glGenTextures(1, &data->texture);
- glBindTexture(GL_TEXTURE_2D, data->texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glBindTexture(data->target, data->texture);
+ glTexParameteri(data->target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(data->target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glEnable(GL_TEXTURE_2D);
+ glEnable(data->target);
glEnable(GL_DEPTH_TEST);
}
@@ -343,12 +344,22 @@ app_init_exts(struct app_data *data)
return False;
}
+ data->target = 0;
exts = (const char *) glGetString(GL_EXTENSIONS);
data->glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)
eglGetProcAddress("glEGLImageTargetTexture2DOES");
- if (!exts || !strstr(exts, "GL_OES_EGL_image") ||
- !data->glEGLImageTargetTexture2DOES) {
- printf("OpenGL ES does not support GL_OES_EGL_image\n");
+ if (exts && data->glEGLImageTargetTexture2DOES) {
+ if (strstr(exts, "GL_OES_EGL_image"))
+ data->target = GL_TEXTURE_2D;
+#ifdef GL_OES_EGL_image_external
+ /* prefer external texture */
+ if (strstr(exts, "GL_OES_EGL_image_external"))
+ data->target = GL_TEXTURE_EXTERNAL_OES;
+#endif
+ }
+
+ if (!data->target) {
+ printf("OpenGL ES does not support sampling from an EGLImage\n");
return False;
}