[D3D8] Implemented some texture operations using ATI_texture_env_combine3

Christian Costa titan.costa at wanadoo.fr
Thu May 27 16:30:29 CDT 2004


Hi,

Changelog:
Implemented some texture operations using ATI_texture_env_combine3.
Fixed D3DTOP_LERP.
Fixed some checkGLcall error messages.

Christian Costa   titan.costa at wanadoo.fr

-------------- next part --------------
Index: d3dcore_gl.h
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/d3dcore_gl.h,v
retrieving revision 1.17
diff -u -r1.17 d3dcore_gl.h
--- d3dcore_gl.h	27 May 2004 01:56:56 -0000	1.17
+++ d3dcore_gl.h	27 May 2004 19:05:11 -0000
@@ -594,6 +594,15 @@
 #define GL_SIGNED_HILO8_NV                0x885F
 #define GL_FORCE_BLUE_TO_ONE_NV           0x8860
 #endif
+/* GL_ATI_texture_env_combine3 */
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI               0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI        0x8745
+#define GL_MODULATE_SUBTRACT_ATI          0x8746
+//#define ONE
+//#define ZERO
+#endif
 
 /*******
  * OpenGL Official Version 
Index: utils.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/utils.c,v
retrieving revision 1.21
diff -u -r1.21 utils.c
--- utils.c	27 May 2004 01:56:56 -0000	1.21
+++ utils.c	27 May 2004 19:05:16 -0000
@@ -1360,9 +1360,9 @@
                 glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);
                 checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");
                 glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT);
-                checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
+                checkGLcall("GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT");
                 glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA);
-                checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");
+                checkGLcall("GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA");
                 glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
                 checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
                 break;
@@ -1562,10 +1562,10 @@
 		checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
 		break;
         case D3DTOP_DOTPRODUCT3: 
-	       if (GL_SUPPORT(ARB_TEXTURE_ENV_DOT3)) {
+		if (GL_SUPPORT(ARB_TEXTURE_ENV_DOT3)) {
 		  glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_DOT3_RGBA_ARB);
 		  checkGLcall("GL_TEXTURE_ENV, comb_target, GL_DOT3_RGBA_ARB");
-	       } else if (GL_SUPPORT(EXT_TEXTURE_ENV_DOT3)) {
+		} else if (GL_SUPPORT(EXT_TEXTURE_ENV_DOT3)) {
 		  glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_DOT3_RGBA_EXT);
 		  checkGLcall("GL_TEXTURE_ENV, comb_target, GL_DOT3_RGBA_EXT");
 		} else {
@@ -1586,19 +1586,172 @@
 		glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_INTERPOLATE));
 		checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_INTERPOLATE)");
 		glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);
-		checkGLcall("GL_TEXTURE_ENV, src0_target, src2");
+		checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
 		glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);
-		checkGLcall("GL_TEXTURE_ENV, opr0_target, opr2");
+		checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");
 		glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);
-		checkGLcall("GL_TEXTURE_ENV, src1_target, src3");
+		checkGLcall("GL_TEXTURE_ENV, src1_target, src2");
 		glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);
-		checkGLcall("GL_TEXTURE_ENV, opr1_target, opr3");
+		checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");
 		glTexEnvi(GL_TEXTURE_ENV, src2_target, src3);
-		checkGLcall("GL_TEXTURE_ENV, src2_target, src1");
-		glTexEnvi(GL_TEXTURE_ENV, opr2_target, src3);
-		checkGLcall("GL_TEXTURE_ENV, opr2_target, src1");
-		glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
-		checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		checkGLcall("GL_TEXTURE_ENV, src2_target, src3");
+		glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr3);
+		checkGLcall("GL_TEXTURE_ENV, opr2_target, opr3");
+		glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		break;
+	case D3DTOP_ADDSMOOTH:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
+		  switch (opr1) {
+		  case GL_SRC_COLOR: opr = GL_ONE_MINUS_SRC_COLOR; break;
+		  case GL_ONE_MINUS_SRC_COLOR: opr = GL_SRC_COLOR; break;
+		  case GL_SRC_ALPHA: opr = GL_ONE_MINUS_SRC_ALPHA; break;
+		  case GL_ONE_MINUS_SRC_ALPHA: opr = GL_SRC_ALPHA; break;
+		  }
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
+		break;
+	case D3DTOP_BLENDTEXTUREALPHAPM:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_TEXTURE);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, GL_TEXTURE");
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_ONE_MINUS_SRC_ALPHA);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, GL_ONE_MINUS_SRC_APHA");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
+		break;
+	case D3DTOP_MODULATEALPHA_ADDCOLOR:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, GL_SRC_APHA");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
+		break;
+	case D3DTOP_MODULATECOLOR_ADDALPHA:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
+		break;
+	case D3DTOP_MODULATEINVALPHA_ADDCOLOR:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_ONE_MINUS_SRC_ALPHA);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, GL_ONE_MINUS_SRC_APHA");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
+		break;
+	case D3DTOP_MODULATEINVCOLOR_ADDALPHA:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_ONE_MINUS_SRC_ALPHA);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, GL_ONE_MINUS_SRC_ALPHA");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
+		break;
+	case D3DTOP_MULTIPLYADD:
+		if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {
+		  glTexEnvi(GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI));
+		  checkGLcall("GL_TEXTURE_ENV, comb_target, useext(GL_MODULATE_ADD_ATI)");
+		  glTexEnvi(GL_TEXTURE_ENV, src0_target, src3);
+		  checkGLcall("GL_TEXTURE_ENV, src0_target, src3");
+		  glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr3);
+		  checkGLcall("GL_TEXTURE_ENV, opr0_target, opr3");
+		  glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);
+		  checkGLcall("GL_TEXTURE_ENV, src1_target, src1");
+		  glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);
+		  checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");
+		  glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);
+		  checkGLcall("GL_TEXTURE_ENV, src2_target, src2");
+		  glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);
+		  checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");
+		  glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);
+		  checkGLcall("GL_TEXTURE_ENV, scal_target, 1");
+		} else
+		  Handled = FALSE;
 		break;
 	default:
 		Handled = FALSE;


More information about the wine-patches mailing list