[Wine-devel] bugs 954. Исправление поведения компаса при 3D

Иван Синицын =?iso-8859-1?q?ivan_=CE=C1_etersoft=2Eru?=
Чт Авг 21 12:34:23 MSD 2008


Этот патч исправляет проблему с отрисовкой 3D графики в Компас.

должен быть принят, вместе с патчем Игоря (Понедельник 13:57:12), который 
отменяет предыдущие изменения.


-- 
С уважением,
Синицын Иван
----------- следующая часть -----------
From afcb9f1d9f35ded8448ee93b7a0d9be6c4f27b3a Mon Sep 17 00:00:00 2001
From: Ivan Sinitsin <ivan на etersoft.ru>
Date: Thu, 21 Aug 2008 11:13:23 +0400
Subject: [PATCH] winex11.drv:opengl.c:fix bug 954. make right drawing mode? when swapbuffers, and delete render when call glFinish.

---
 dlls/winex11.drv/opengl.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index a68591d..d38676f 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -2091,6 +2091,7 @@ static void WINAPI X11DRV_wglGetIntegerv(GLenum pname, GLint* params)
 void flush_gl_drawable(X11DRV_PDEVICE *physDev)
 {
     int w, h;
+    XGCValues gcvalues;
 
     if (!physDev->gl_copy)
         return;
@@ -2106,8 +2107,15 @@ void flush_gl_drawable(X11DRV_PDEVICE *physDev)
          * flush the display make sure we copy up-to-date data */
         wine_tsx11_lock();
         XFlush(gdi_display);
+        /*Render GL always in GXcopy mode*/
+        XGetGCValues(gdi_display, physDev->gc, GCFunction, &gcvalues);
+        XSetFunction(gdi_display, physDev->gc, GXcopy);
+
         XCopyArea(gdi_display, src, physDev->drawable, physDev->gc, 0, 0, w, h,
                   physDev->dc_rect.left, physDev->dc_rect.top);
+        /*return old mode*/
+        XSetFunction(gdi_display, physDev->gc, gcvalues.function);
+
         wine_tsx11_unlock();
     }
 }
@@ -2116,13 +2124,11 @@ void flush_gl_drawable(X11DRV_PDEVICE *physDev)
 static void WINAPI X11DRV_wglFinish(void)
 {
     Wine_GLContext *ctx = NtCurrentTeb()->glContext;
-    enum x11drv_escape_codes code = X11DRV_FLUSH_GL_DRAWABLE;
 
     wine_tsx11_lock();
     sync_context(ctx);
     pglFinish();
     wine_tsx11_unlock();
-    if (ctx) ExtEscape(ctx->hdc, X11DRV_ESCAPE, sizeof(code), (LPSTR)&code, 0, NULL );
 }
 
 static void WINAPI X11DRV_wglFlush(void)
-- 
1.5.4.5.GIT



Подробная информация о списке рассылки Wine-devel