Huw Davies : winex11:
Introduce a function to retrieve the glx drawable and have
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jun 26 07:11:22 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: f4e8169e9acb59b340b2a8f521d44a9f012267bc
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f4e8169e9acb59b340b2a8f521d44a9f012267bc
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Jun 23 12:13:55 2006 +0100
winex11: Introduce a function to retrieve the glx drawable and have
both the GET_GLX_DRAWABLE Escape and SwapBuffers call it.
---
dlls/winex11.drv/init.c | 13 +------
dlls/winex11.drv/opengl.c | 89 ++++++++++++++++++++++++++++-----------------
dlls/winex11.drv/x11drv.h | 2 +
3 files changed, 58 insertions(+), 46 deletions(-)
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index 0aa38a4..651b2b4 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -410,18 +410,7 @@ INT X11DRV_ExtEscape( X11DRV_PDEVICE *ph
case X11DRV_GET_GLX_DRAWABLE:
if (out_count >= sizeof(Drawable))
{
- if(physDev->bitmap)
- {
- if (physDev->bitmap->hbitmap == BITMAP_stock_phys_bitmap.hbitmap)
- *(Drawable *)out_data = physDev->drawable; /* PBuffer */
- else {
- if(!physDev->bitmap->glxpixmap)
- physDev->bitmap->glxpixmap = create_glxpixmap(physDev);
- *(Drawable *)out_data = physDev->bitmap->glxpixmap;
- }
- }
- else
- *(Drawable *)out_data = physDev->drawable;
+ *(Drawable *)out_data = get_glxdrawable(physDev);
return TRUE;
}
break;
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 60ebcce..2fe6c9d 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -523,12 +523,64 @@ BOOL X11DRV_SetPixelFormat(X11DRV_PDEVIC
return TRUE;
}
+static XID create_glxpixmap(X11DRV_PDEVICE *physDev)
+{
+ GLXPixmap ret;
+ XVisualInfo *vis;
+ XVisualInfo template;
+ int num;
+ GLXFBConfig *cfgs;
+
+ wine_tsx11_lock();
+ cfgs = pglXGetFBConfigs(gdi_display, DefaultScreen(gdi_display), &num);
+ pglXGetFBConfigAttrib(gdi_display, cfgs[physDev->current_pf - 1], GLX_VISUAL_ID, (int *)&template.visualid);
+
+ vis = XGetVisualInfo(gdi_display, VisualIDMask, &template, &num);
+
+ ret = pglXCreateGLXPixmap(gdi_display, vis, physDev->bitmap->pixmap);
+ XFree(vis);
+ XFree(cfgs);
+ wine_tsx11_unlock();
+ TRACE("return %lx\n", ret);
+ return ret;
+}
+
+Drawable get_glxdrawable(X11DRV_PDEVICE *physDev)
+{
+ Drawable ret;
+
+ if(physDev->bitmap)
+ {
+ if (physDev->bitmap->hbitmap == BITMAP_stock_phys_bitmap.hbitmap)
+ ret = physDev->drawable; /* PBuffer */
+ else
+ {
+ if(!physDev->bitmap->glxpixmap)
+ physDev->bitmap->glxpixmap = create_glxpixmap(physDev);
+ ret = physDev->bitmap->glxpixmap;
+ }
+ }
+ else
+ ret = physDev->drawable;
+ return ret;
+}
+
+BOOL destroy_glxpixmap(XID glxpixmap)
+{
+ wine_tsx11_lock();
+ pglXDestroyGLXPixmap(gdi_display, glxpixmap);
+ wine_tsx11_unlock();
+ return TRUE;
+}
+
/**
* X11DRV_SwapBuffers
*
* Swap the buffers of this DC
*/
-BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev) {
+BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev)
+{
+ GLXDrawable drawable;
if (!has_opengl()) {
ERR("No libGL on this box - disabling OpenGL support !\n");
return 0;
@@ -536,8 +588,9 @@ BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE *
TRACE_(opengl)("(%p)\n", physDev);
+ drawable = get_glxdrawable(physDev);
wine_tsx11_lock();
- pglXSwapBuffers(gdi_display, physDev->drawable);
+ pglXSwapBuffers(gdi_display, drawable);
wine_tsx11_unlock();
return TRUE;
@@ -587,36 +640,6 @@ XVisualInfo *X11DRV_setup_opengl_visual(
return visual;
}
-XID create_glxpixmap(X11DRV_PDEVICE *physDev)
-{
- GLXPixmap ret;
- XVisualInfo *vis;
- XVisualInfo template;
- int num;
- GLXFBConfig *cfgs;
-
- wine_tsx11_lock();
- cfgs = pglXGetFBConfigs(gdi_display, DefaultScreen(gdi_display), &num);
- pglXGetFBConfigAttrib(gdi_display, cfgs[physDev->current_pf - 1], GLX_VISUAL_ID, (int *)&template.visualid);
-
- vis = XGetVisualInfo(gdi_display, VisualIDMask, &template, &num);
-
- ret = pglXCreateGLXPixmap(gdi_display, vis, physDev->bitmap->pixmap);
- XFree(vis);
- XFree(cfgs);
- wine_tsx11_unlock();
- TRACE("return %lx\n", ret);
- return ret;
-}
-
-BOOL destroy_glxpixmap(XID glxpixmap)
-{
- wine_tsx11_lock();
- pglXDestroyGLXPixmap(gdi_display, glxpixmap);
- wine_tsx11_unlock();
- return TRUE;
-}
-
#else /* no OpenGL includes */
void X11DRV_OpenGL_Init(Display *display)
@@ -679,7 +702,7 @@ XVisualInfo *X11DRV_setup_opengl_visual(
return NULL;
}
-XID create_glxpixmap(X11DRV_PDEVICE *physDev)
+Drawable get_glxdrawable(X11DRV_PDEVICE *physDev)
{
return 0;
}
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index adbb1f7..9537b77 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -272,7 +272,7 @@ extern BOOL X11DRV_XRender_ExtTextOut(X1
extern void X11DRV_XRender_UpdateDrawable(X11DRV_PDEVICE *physDev);
extern XVisualInfo *X11DRV_setup_opengl_visual(Display *display);
-extern XID create_glxpixmap(X11DRV_PDEVICE *physDev);
+extern Drawable get_glxdrawable(X11DRV_PDEVICE *physDev);
extern BOOL destroy_glxpixmap(XID glxpixmap);
/* XIM support */
More information about the wine-cvs
mailing list