Demos (master): egl: add compile-time extension checking, use eglGetProcAddress
Brian Paul
brianp at kemper.freedesktop.org
Tue Jan 18 22:36:21 UTC 2011
Module: Demos
Branch: master
Commit: 37abe2d093f455b593d113e0c26ff4fe961efd96
URL: http://cgit.freedesktop.org/mesa/demos/commit/?id=37abe2d093f455b593d113e0c26ff4fe961efd96
Author: Brian Paul <brianp at vmware.com>
Date: Tue Jan 18 15:33:45 2011 -0700
egl: add compile-time extension checking, use eglGetProcAddress
The GL_OES_EGL_image extension is not defined in all gl.h or glext.h
files so we need a compile-time check. Also, use eglGetProcAddress()
to get the function pointer at runtime in case libGL doesn't define it.
---
src/egl/opengl/eglkms.c | 16 ++++++++++++++++
src/egl/opengl/xeglgears.c | 15 ++++++++++++++-
2 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/src/egl/opengl/eglkms.c b/src/egl/opengl/eglkms.c
index 4e398b7..54936cb 100644
--- a/src/egl/opengl/eglkms.c
+++ b/src/egl/opengl/eglkms.c
@@ -14,6 +14,10 @@
#include <unistd.h>
#include <string.h>
+#ifdef GL_OES_EGL_image
+static PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glEGLImageTargetRenderbufferStorageOES_func;
+#endif
+
struct kms {
drmModeConnector *connector;
drmModeEncoder *encoder;
@@ -179,6 +183,14 @@ int main(int argc, char *argv[])
eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, ctx);
+#ifdef GL_OES_EGL_image
+ glEGLImageTargetRenderbufferStorageOES_func =
+ (PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)
+ eglGetProcAddress("glEGLImageTargetRenderbufferStorageOES");
+#else
+ fprintf(stderr, "GL_OES_EGL_image not supported at compile time\n");
+#endif
+
glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER_EXT, fb);
@@ -190,7 +202,11 @@ int main(int argc, char *argv[])
glGenRenderbuffers(1, &color_rb);
glBindRenderbuffer(GL_RENDERBUFFER_EXT, color_rb);
+#ifdef GL_OES_EGL_image
glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, image);
+#else
+ fprintf(stderr, "GL_OES_EGL_image was not found at compile time\n");
+#endif
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT,
diff --git a/src/egl/opengl/xeglgears.c b/src/egl/opengl/xeglgears.c
index 2401d07..65cf513 100644
--- a/src/egl/opengl/xeglgears.c
+++ b/src/egl/opengl/xeglgears.c
@@ -47,6 +47,10 @@
#include <EGL/eglext.h>
+#ifdef GL_OES_EGL_image
+static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES_func;
+#endif
+
#define BENCHMARK
@@ -396,6 +400,11 @@ egl_manager_new(EGLNativeDisplayType xdpy, const EGLint *attrib_list,
return NULL;
}
+#ifdef GL_OES_EGL_image
+ glEGLImageTargetTexture2DOES_func = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)
+ eglGetProcAddress("glEGLImageTargetTexture2DOES");
+#endif
+
return eman;
}
@@ -913,7 +922,11 @@ main(int argc, char *argv[])
case GEARS_RENDERBUFFER:
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
- glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, eman->image);
+#ifdef GL_OES_EGL_image
+ glEGLImageTargetTexture2DOES_func(GL_TEXTURE_2D, eman->image);
+#else
+ fprintf(stderr, "GL_OES_EGL_image not found at compile time.\n");
+#endif
break;
case GEARS_PBUFFER_TEXTURE:
glGenTextures(1, &texture);
More information about the mesa-commit
mailing list