Chris Robinson : wined3d: state_pointsprite should apply to all texture units.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 4 15:09:33 CST 2007


Module: wine
Branch: master
Commit: d8c67c34155e83aa80fa482f3447afcb2da74d8a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d8c67c34155e83aa80fa482f3447afcb2da74d8a

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Wed Jan  3 00:17:24 2007 -0800

wined3d: state_pointsprite should apply to all texture units.

---

 dlls/wined3d/state.c |   30 ++++++++++++++++++++++--------
 1 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 9d608c3..9e84877 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -1053,6 +1053,9 @@ static void state_lastpixel(DWORD state,
 }
 
 static void state_pointsprite(DWORD state, IWineD3DStateBlockImpl *stateblock) {
+    unsigned int i;
+    int val;
+
     /* TODO: NV_POINT_SPRITE */
     if (!GL_SUPPORT(ARB_POINT_SPRITE)) {
         TRACE("Point sprites not supported\n");
@@ -1060,15 +1063,26 @@ static void state_pointsprite(DWORD stat
     }
 
     if (stateblock->renderState[WINED3DRS_POINTSPRITEENABLE]) {
-        glEnable(GL_POINT_SPRITE_ARB);
-        checkGLcall("glEnable(GL_POINT_SPRITE_ARB)");
-        glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, TRUE);
-        checkGLcall("glTexEnvf(GL_POINT_SPRITE, GL_COORD_REPLACE, TRUE)");
+        val = GL_TRUE;
     } else {
-        glDisable(GL_POINT_SPRITE_ARB);
-        checkGLcall("glDisable(GL_POINT_SPRITE_ARB)");
-        glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, FALSE);
-        checkGLcall("glTexEnvf(GL_POINT_SPRITE, GL_COORD_REPLACE, FALSE)");
+        val = GL_FALSE;
+    }
+
+    for (i = 0; i < GL_LIMITS(texture_stages); i++) {
+        /* Note the WINED3DRS value applies to all textures, but GL has one
+         * per texture, so apply it now ready to be used!
+         */
+        if (GL_SUPPORT(ARB_MULTITEXTURE)) {
+            GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0_ARB + i));
+            checkGLcall("glActiveTextureARB");
+        } else if (i==1) {
+            FIXME("Program using multiple concurrent textures which this opengl implementation doesn't support\n");
+            break;
+        }
+
+        glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, val);
+        checkGLcall((val?"glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE)":
+                         "glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_FALSE)"));
     }
 }
 




More information about the wine-cvs mailing list