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