gboolean has_extension;
/* GLX_EXT_texture_from_pixmap */
+ gl_vtable->glx_create_pixmap = (PFNGLXCREATEPIXMAPPROC)
+ get_proc_address("glXCreatePixmap");
+ if (!gl_vtable->glx_create_pixmap)
+ return NULL;
+ gl_vtable->glx_destroy_pixmap = (PFNGLXDESTROYPIXMAPPROC)
+ get_proc_address("glXDestroyPixmap");
+ if (!gl_vtable->glx_destroy_pixmap)
+ return NULL;
gl_vtable->glx_bind_tex_image = (PFNGLXBINDTEXIMAGEEXTPROC)
get_proc_address("glXBindTexImageEXT");
if (!gl_vtable->glx_bind_tex_image)
*attr++ = GL_NONE;
x11_trap_errors();
- pixo->glx_pixmap = glXCreatePixmap(dpy, fbconfig[0], pixo->pixmap, pixmap_attrs);
+ pixo->glx_pixmap = gl_vtable->glx_create_pixmap(
+ dpy,
+ fbconfig[0],
+ pixo->pixmap,
+ pixmap_attrs
+ );
free(fbconfig);
if (x11_untrap_errors() != 0)
goto error;
void
gl_destroy_pixmap_object(GLPixmapObject *pixo)
{
+ GLVTable * const gl_vtable = gl_get_vtable();
+
if (!pixo)
return;
}
if (pixo->glx_pixmap) {
- glXDestroyPixmap(pixo->dpy, pixo->glx_pixmap);
+ gl_vtable->glx_destroy_pixmap(pixo->dpy, pixo->glx_pixmap);
pixo->glx_pixmap = None;
}
typedef void (*PFNGLXRELEASETEXIMAGEEXTPROC)(Display *, GLXDrawable, int);
#endif
+#if GLX_GLXEXT_VERSION < 27
+/* XXX: this is not exactly that version but this is the only means to
+ make sure we have the correct <GL/glx.h> with those signatures */
+typedef GLXPixmap (*PFNGLXCREATEPIXMAPPROC)(Display *, GLXFBConfig, Pixmap, const int *);
+typedef void (*PFNGLXDESTROYPIXMAPPROC)(Display *, GLXPixmap);
+#endif
+
#ifndef GL_FRAMEBUFFER_BINDING
#define GL_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING_EXT
#endif
typedef struct _GLVTable GLVTable;
struct _GLVTable {
+ PFNGLXCREATEPIXMAPPROC glx_create_pixmap;
+ PFNGLXDESTROYPIXMAPPROC glx_destroy_pixmap;
PFNGLXBINDTEXIMAGEEXTPROC glx_bind_tex_image;
PFNGLXRELEASETEXIMAGEEXTPROC glx_release_tex_image;
PFNGLGENFRAMEBUFFERSEXTPROC gl_gen_framebuffers;