diff options
author | Gwenole Beauchesne <gbeauchesne@splitted-desktop.com> | 2010-07-01 08:07:23 +0200 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2010-07-07 14:53:15 +0800 |
commit | 8428600c94857d53ba83da174215cd589c0fbda0 (patch) | |
tree | 1a46b3ffc252fe1420335adc9e40a0788bc74943 /va | |
parent | 4b53862d7411ce913fd80aab469e5b4a8ef5eb28 (diff) | |
download | libva-8428600c94857d53ba83da174215cd589c0fbda0.tar.gz |
Call GLX Pixmap related functions through the vtable.
Diffstat (limited to 'va')
-rw-r--r-- | va/glx/va_glx_impl.c | 33 | ||||
-rw-r--r-- | va/glx/va_glx_private.h | 10 |
2 files changed, 32 insertions, 11 deletions
diff --git a/va/glx/va_glx_impl.c b/va/glx/va_glx_impl.c index 497b64e..c28da91 100644 --- a/va/glx/va_glx_impl.c +++ b/va/glx/va_glx_impl.c @@ -222,6 +222,14 @@ static int load_tfp_extensions(VADriverContextP ctx) { VAOpenGLVTableP pOpenGLVTable = gl_get_vtable(ctx); + pOpenGLVTable->glx_create_pixmap = (PFNGLXCREATEPIXMAPPROC) + get_proc_address("glXCreatePixmap"); + if (!pOpenGLVTable->glx_create_pixmap) + return 0; + pOpenGLVTable->glx_destroy_pixmap = (PFNGLXDESTROYPIXMAPPROC) + get_proc_address("glXDestroyPixmap"); + if (!pOpenGLVTable->glx_destroy_pixmap) + return 0; pOpenGLVTable->glx_bind_tex_image = (PFNGLXBINDTEXIMAGEEXTPROC) get_proc_address("glXBindTexImageEXT"); if (!pOpenGLVTable->glx_bind_tex_image) @@ -451,15 +459,16 @@ struct VASurfaceGLX { // Create Pixmaps for GLX texture-from-pixmap extension static int create_tfp_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) { - const unsigned int width = pSurfaceGLX->width; - const unsigned int height = pSurfaceGLX->height; - Pixmap pixmap = None; - GLXFBConfig *fbconfig = NULL; - GLXPixmap glx_pixmap = None; - Window root_window; - XWindowAttributes wattr; - int *attrib; - int n_fbconfig_attrs; + VAOpenGLVTableP const pOpenGLVTable = gl_get_vtable(ctx); + const unsigned int width = pSurfaceGLX->width; + const unsigned int height = pSurfaceGLX->height; + Pixmap pixmap = None; + GLXFBConfig *fbconfig = NULL; + GLXPixmap glx_pixmap = None; + Window root_window; + XWindowAttributes wattr; + int *attrib; + int n_fbconfig_attrs; root_window = RootWindow((Display *)ctx->native_dpy, ctx->x11_screen); XGetWindowAttributes((Display *)ctx->native_dpy, root_window, &wattr); @@ -523,7 +532,7 @@ static int create_tfp_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) *attrib++ = GL_NONE; x11_trap_errors(); - glx_pixmap = glXCreatePixmap( + glx_pixmap = pOpenGLVTable->glx_create_pixmap( (Display *)ctx->native_dpy, fbconfig[0], pixmap, @@ -544,13 +553,15 @@ static int create_tfp_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) // Destroy Pixmaps used for TFP static void destroy_tfp_surface(VADriverContextP ctx, VASurfaceGLXP pSurfaceGLX) { + VAOpenGLVTableP const pOpenGLVTable = gl_get_vtable(ctx); + if (pSurfaceGLX->pix_texture) { glDeleteTextures(1, &pSurfaceGLX->pix_texture); pSurfaceGLX->pix_texture = 0; } if (pSurfaceGLX->glx_pixmap) { - glXDestroyPixmap((Display *)ctx->native_dpy, pSurfaceGLX->glx_pixmap); + pOpenGLVTable->glx_destroy_pixmap((Display *)ctx->native_dpy, pSurfaceGLX->glx_pixmap); pSurfaceGLX->glx_pixmap = None; } diff --git a/va/glx/va_glx_private.h b/va/glx/va_glx_private.h index 6667de9..eb1185c 100644 --- a/va/glx/va_glx_private.h +++ b/va/glx/va_glx_private.h @@ -31,15 +31,25 @@ #include "va_x11.h" #include "va_glx.h" #include "va_backend_glx.h" +#include <GL/glxext.h> #if GLX_GLXEXT_VERSION < 18 typedef void (*PFNGLXBINDTEXIMAGEEXTPROC)(Display *, GLXDrawable, int, const int *); 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 + typedef struct VAOpenGLVTable *VAOpenGLVTableP; struct VAOpenGLVTable { + PFNGLXCREATEPIXMAPPROC glx_create_pixmap; + PFNGLXDESTROYPIXMAPPROC glx_destroy_pixmap; PFNGLXBINDTEXIMAGEEXTPROC glx_bind_tex_image; PFNGLXRELEASETEXIMAGEEXTPROC glx_release_tex_image; PFNGLGENFRAMEBUFFERSEXTPROC gl_gen_framebuffers; |