[1/6] WineD3D: Prepare only fixed function samplers for blit

Stefan Dösinger stefan at codeweavers.com
Wed Feb 28 18:46:42 CST 2007


Same patch as yesterday, but now uses GL_LIMITS(textures) as suggested by 
Henri
-------------- next part --------------
From ab95f509a1eba25f7759cb3aea243aaf225d1b5c Mon Sep 17 00:00:00 2001
From: Stefan Doesinger <stefan at codeweavers.com>
Date: Thu, 1 Mar 2007 01:21:47 +0100
Subject: [PATCH] WineD3D: Prepare only fixed function samplers for blit

First I thought it is a driver bug, but the macos ATI driver is perfectly right when it complains that it can't
glDisable(GL_TEXTURE_2D) on unit 8+. This is only a fixed function thing. The higher samplers aren't interesting for the blitting
code, so do not touch them.
---
 dlls/wined3d/context.c |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index d087a4c..6b00120 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -472,11 +472,13 @@ static inline void SetupForBlit(IWineD3DDeviceImpl *This, WineD3DContext *contex
         checkGLcall("glDisable(GL_REGISTER_COMBINERS_NV)");
     }
     if (GL_SUPPORT(ARB_MULTITEXTURE)) {
-        for(i = GL_LIMITS(samplers) - 1; i > 0 ; i--) {
-            if (GL_SUPPORT(ARB_MULTITEXTURE)) {
-                GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB + i));
-                checkGLcall("glActiveTextureARB");
-            }
+        /* The blitting code uses (for now) the fixed function pipeline, so make sure to reset all fixed
+         * function texture unit. No need to care for higher samplers
+         */
+        for(i = GL_LIMITS(textures) - 1; i > 0 ; i--) {
+            GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB + i));
+            checkGLcall("glActiveTextureARB");
+
             glDisable(GL_TEXTURE_CUBE_MAP_ARB);
             checkGLcall("glDisable GL_TEXTURE_CUBE_MAP_ARB");
             glDisable(GL_TEXTURE_3D);
@@ -486,9 +488,10 @@ static inline void SetupForBlit(IWineD3DDeviceImpl *This, WineD3DContext *contex
             glDisable(GL_TEXTURE_1D);
             checkGLcall("glDisable GL_TEXTURE_1D");
 
-            if(i < MAX_TEXTURES) {
-                Context_MarkStateDirty(context, STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP));
-            }
+            glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+            checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);");
+
+            Context_MarkStateDirty(context, STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP));
             Context_MarkStateDirty(context, STATE_SAMPLER(i));
         }
         GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB));
-- 
1.4.4.3



More information about the wine-patches mailing list