diff --git a/configure.ac b/configure.ac index 2cbd713c4..4d1e81164 100644 --- a/configure.ac +++ b/configure.ac @@ -196,6 +196,15 @@ CAIRO_ENABLE_SURFACE_BACKEND(gl, gl, no, [ gl_REQUIRES="gl" PKG_CHECK_MODULES(gl, $gl_REQUIRES, , [AC_MSG_RESULT(no) use_gl="no (requires gl.pc)"]) + + AC_CHECK_LIB(GLEW, glewInit, [ + AC_CHECK_HEADER(GL/glew.h, [], [ + have_gl="no (requires glew http://glew.sourceforge.net/)" + ]) + ], [ + have_gl="no (requires glew http://glew.sourceforge.net/)" + ]) + gl_NONPKGCONFIG_LIBS="-lGLEW" ]) dnl =========================================================================== diff --git a/src/cairo-gl-surface.c b/src/cairo-gl-surface.c index bf931ed92..a36f4bb8f 100644 --- a/src/cairo-gl-surface.c +++ b/src/cairo-gl-surface.c @@ -38,6 +38,7 @@ #include +#include #define GL_GLEXT_PROTOTYPES #include #include @@ -127,6 +128,7 @@ cairo_gl_context_t * cairo_gl_glx_context_create (Display *dpy, GLXContext gl_ctx) { cairo_gl_context_t *ctx; + GLenum err; ctx = calloc (1, sizeof(cairo_gl_context_t)); if (ctx == NULL) @@ -143,6 +145,17 @@ cairo_gl_glx_context_create (Display *dpy, GLXContext gl_ctx) */ glXMakeCurrent(dpy, RootWindow (dpy, DefaultScreen (dpy)), gl_ctx); + err = glewInit(); + if (err != GLEW_OK) { + free(ctx); + return NULL; + } + + if (!GLEW_EXT_framebuffer_object || !GLEW_ARB_texture_env_combine) { + free(ctx); + return NULL; + } + /* Set up the dummy texture for tex_env_combine with constant color. */ glGenTextures (1, &ctx->dummy_tex); glBindTexture (GL_TEXTURE_2D, ctx->dummy_tex);