[PATCH] WineD3D: Move set_tex_op(_nvrc) to their specific files=0A=
Stefan Doesinger
stefan at codeweavers.com
Sat Jul 12 11:45:33 CDT 2008
=0A=
I don't think they have to be in utils.c=0A=
---=0A=
dlls/wined3d/nvidia_texture_shader.c | 385 +++++++++=0A=
dlls/wined3d/state.c | 1109 +++++++++++++++++++++++++=0A=
dlls/wined3d/utils.c | 1496 =
+---------------------------------=0A=
dlls/wined3d/wined3d_private.h | 3 +-=0A=
4 files changed, 1499 insertions(+), 1494 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/nvidia_texture_shader.c =
b/dlls/wined3d/nvidia_texture_shader.c=0A=
index 6844a9b..e217678 100644=0A=
--- a/dlls/wined3d/nvidia_texture_shader.c=0A=
+++ b/dlls/wined3d/nvidia_texture_shader.c=0A=
@@ -65,6 +65,391 @@ void nvts_activate_dimensions(DWORD stage, =
IWineD3DStateBlockImpl *stateblock, W=0A=
}=0A=
}=0A=
=0A=
+typedef struct {=0A=
+ GLenum input[3];=0A=
+ GLenum mapping[3];=0A=
+ GLenum component_usage[3];=0A=
+} tex_op_args;=0A=
+=0A=
+static GLenum d3dta_to_combiner_input(DWORD d3dta, DWORD stage, INT =
texture_idx) {=0A=
+ switch (d3dta) {=0A=
+ case WINED3DTA_DIFFUSE:=0A=
+ return GL_PRIMARY_COLOR_NV;=0A=
+=0A=
+ case WINED3DTA_CURRENT:=0A=
+ if (stage) return GL_SPARE0_NV;=0A=
+ else return GL_PRIMARY_COLOR_NV;=0A=
+=0A=
+ case WINED3DTA_TEXTURE:=0A=
+ if (texture_idx > -1) return GL_TEXTURE0_ARB + texture_idx;=0A=
+ else return GL_PRIMARY_COLOR_NV;=0A=
+=0A=
+ case WINED3DTA_TFACTOR:=0A=
+ return GL_CONSTANT_COLOR0_NV;=0A=
+=0A=
+ case WINED3DTA_SPECULAR:=0A=
+ return GL_SECONDARY_COLOR_NV;=0A=
+=0A=
+ case WINED3DTA_TEMP:=0A=
+ return GL_SPARE1_NV;=0A=
+=0A=
+ case WINED3DTA_CONSTANT:=0A=
+ /* TODO: Support per stage constants (WINED3DTSS_CONSTANT, =
NV_register_combiners2) */=0A=
+ FIXME("WINED3DTA_CONSTANT, not properly supported.\n");=0A=
+ return GL_CONSTANT_COLOR1_NV;=0A=
+=0A=
+ default:=0A=
+ FIXME("Unrecognized texture arg %#x\n", d3dta);=0A=
+ return GL_TEXTURE;=0A=
+ }=0A=
+}=0A=
+=0A=
+static GLenum invert_mapping(GLenum mapping) {=0A=
+ if (mapping =3D=3D GL_UNSIGNED_INVERT_NV) return =
GL_SIGNED_IDENTITY_NV;=0A=
+ else if (mapping =3D=3D GL_SIGNED_IDENTITY_NV) return =
GL_UNSIGNED_INVERT_NV;=0A=
+=0A=
+ FIXME("Unhandled mapping %#x\n", mapping);=0A=
+ return mapping;=0A=
+}=0A=
+=0A=
+static void get_src_and_opr_nvrc(DWORD stage, DWORD arg, BOOL is_alpha, =
GLenum* input, GLenum* mapping, GLenum *component_usage, INT =
texture_idx) {=0A=
+ /* The WINED3DTA_COMPLEMENT flag specifies the complement of the =
input should=0A=
+ * be used. */=0A=
+ if (arg & WINED3DTA_COMPLEMENT) *mapping =3D GL_UNSIGNED_INVERT_NV;=0A=
+ else *mapping =3D GL_SIGNED_IDENTITY_NV;=0A=
+=0A=
+ /* The WINED3DTA_ALPHAREPLICATE flag specifies the alpha component =
of the input=0A=
+ * should be used for all input components. */=0A=
+ if (is_alpha || arg & WINED3DTA_ALPHAREPLICATE) *component_usage =
=3D GL_ALPHA;=0A=
+ else *component_usage =3D GL_RGB;=0A=
+=0A=
+ *input =3D d3dta_to_combiner_input(arg & WINED3DTA_SELECTMASK, =
stage, texture_idx);=0A=
+}=0A=
+=0A=
+void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3, INT =
texture_idx, DWORD dst) {=0A=
+ IWineD3DDeviceImpl *This =3D (IWineD3DDeviceImpl*)iface;=0A=
+ tex_op_args tex_op_args =3D {{0}, {0}, {0}};=0A=
+ GLenum portion =3D is_alpha ? GL_ALPHA : GL_RGB;=0A=
+ GLenum target =3D GL_COMBINER0_NV + stage;=0A=
+ GLenum output;=0A=
+ IWineD3DStateBlockImpl *stateblock =3D This->stateBlock; /* For =
GLINFO_LOCATION */=0A=
+=0A=
+ TRACE("stage %d, is_alpha %d, op %s, arg1 %#x, arg2 %#x, arg3 %#x, =
texture_idx %d\n",=0A=
+ stage, is_alpha, debug_d3dtop(op), arg1, arg2, arg3, =
texture_idx);=0A=
+=0A=
+ /* If a texture stage references an invalid texture unit the stage =
just=0A=
+ * passes through the result from the previous stage */=0A=
+ if (is_invalid_op(This, stage, op, arg1, arg2, arg3)) {=0A=
+ arg1 =3D WINED3DTA_CURRENT;=0A=
+ op =3D WINED3DTOP_SELECTARG1;=0A=
+ }=0A=
+=0A=
+ get_src_and_opr_nvrc(stage, arg1, is_alpha, &tex_op_args.input[0],=0A=
+ &tex_op_args.mapping[0], =
&tex_op_args.component_usage[0], texture_idx);=0A=
+ get_src_and_opr_nvrc(stage, arg2, is_alpha, &tex_op_args.input[1],=0A=
+ &tex_op_args.mapping[1], =
&tex_op_args.component_usage[1], texture_idx);=0A=
+ get_src_and_opr_nvrc(stage, arg3, is_alpha, &tex_op_args.input[2],=0A=
+ &tex_op_args.mapping[2], =
&tex_op_args.component_usage[2], texture_idx);=0A=
+=0A=
+=0A=
+ if(dst =3D=3D WINED3DTA_TEMP) {=0A=
+ output =3D GL_SPARE1_NV;=0A=
+ } else {=0A=
+ output =3D GL_SPARE0_NV;=0A=
+ }=0A=
+=0A=
+ /* This is called by a state handler which has the gl lock held and =
a context for the thread */=0A=
+ switch(op)=0A=
+ {=0A=
+ case WINED3DTOP_DISABLE:=0A=
+ /* Only for alpha */=0A=
+ if (!is_alpha) ERR("Shouldn't be called for =
WINED3DTSS_COLOROP (WINED3DTOP_DISABLE)\n");=0A=
+ /* Input, prev_alpha*1 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, =
GL_ALPHA));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_ALPHA));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_SPARE0_NV, GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_SELECTARG1:=0A=
+ case WINED3DTOP_SELECTARG2:=0A=
+ /* Input, arg*1 */=0A=
+ if (op =3D=3D WINED3DTOP_SELECTARG1) {=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], =
tex_op_args.mapping[0], tex_op_args.component_usage[0]));=0A=
+ } else {=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[1], =
tex_op_args.mapping[1], tex_op_args.component_usage[1]));=0A=
+ }=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_MODULATE:=0A=
+ case WINED3DTOP_MODULATE2X:=0A=
+ case WINED3DTOP_MODULATE4X:=0A=
+ /* Input, arg1*arg2 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+=0A=
+ /* Output */=0A=
+ if (op =3D=3D WINED3DTOP_MODULATE) {=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
+ } else if (op =3D=3D WINED3DTOP_MODULATE2X) {=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_SCALE_BY_TWO_NV, GL_NONE, =
GL_FALSE, GL_FALSE, GL_FALSE));=0A=
+ } else if (op =3D=3D WINED3DTOP_MODULATE4X) {=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_SCALE_BY_FOUR_NV, GL_NONE, =
GL_FALSE, GL_FALSE, GL_FALSE));=0A=
+ }=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_ADD:=0A=
+ case WINED3DTOP_ADDSIGNED:=0A=
+ case WINED3DTOP_ADDSIGNED2X:=0A=
+ /* Input, arg1*1+arg2*1 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ if (op =3D=3D WINED3DTOP_ADD) {=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
+ } else if (op =3D=3D WINED3DTOP_ADDSIGNED) {=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, =
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV, GL_FALSE, GL_FALSE, GL_FALSE));=0A=
+ } else if (op =3D=3D WINED3DTOP_ADDSIGNED2X) {=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_SCALE_BY_TWO_NV, =
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV, GL_FALSE, GL_FALSE, GL_FALSE));=0A=
+ }=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_SUBTRACT:=0A=
+ /* Input, arg1*1+-arg2*1 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[1], GL_SIGNED_NEGATE_NV, =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_ADDSMOOTH:=0A=
+ /* Input, arg1*1+(1-arg1)*arg2 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[0], =
invert_mapping(tex_op_args.mapping[0]), tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
+ case WINED3DTOP_BLENDFACTORALPHA:=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
+ case WINED3DTOP_BLENDCURRENTALPHA:=0A=
+ {=0A=
+ GLenum alpha_src =3D GL_PRIMARY_COLOR_NV;=0A=
+ if (op =3D=3D WINED3DTOP_BLENDDIFFUSEALPHA) alpha_src =3D =
d3dta_to_combiner_input(WINED3DTA_DIFFUSE, stage, texture_idx);=0A=
+ else if (op =3D=3D WINED3DTOP_BLENDTEXTUREALPHA) alpha_src =
=3D d3dta_to_combiner_input(WINED3DTA_TEXTURE, stage, texture_idx);=0A=
+ else if (op =3D=3D WINED3DTOP_BLENDFACTORALPHA) alpha_src =
=3D d3dta_to_combiner_input(WINED3DTA_TFACTOR, stage, texture_idx);=0A=
+ else if (op =3D=3D WINED3DTOP_BLENDTEXTUREALPHAPM) =
alpha_src =3D d3dta_to_combiner_input(WINED3DTA_TEXTURE, stage, =
texture_idx);=0A=
+ else if (op =3D=3D WINED3DTOP_BLENDCURRENTALPHA) alpha_src =
=3D d3dta_to_combiner_input(WINED3DTA_CURRENT, stage, texture_idx);=0A=
+ else FIXME("Unhandled WINED3DTOP %s, shouldn't happen\n", =
debug_d3dtop(op));=0A=
+=0A=
+ /* Input, arg1*alpha_src+arg2*(1-alpha_src) */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ if (op =3D=3D WINED3DTOP_BLENDTEXTUREALPHAPM)=0A=
+ {=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+ } else {=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ alpha_src, GL_UNSIGNED_IDENTITY_NV, =
GL_ALPHA));=0A=
+ }=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ alpha_src, GL_UNSIGNED_INVERT_NV, GL_ALPHA));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+ }=0A=
+=0A=
+ case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
+ /* Input, arg1_alpha*arg2_rgb+arg1_rgb*1 */=0A=
+ if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATEALPHA_ADDCOLOR)\n");=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
GL_ALPHA));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
+ /* Input, arg1_rgb*arg2_rgb+arg1_alpha*1 */=0A=
+ if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATECOLOR_ADDALPHA)\n");=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
GL_ALPHA));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
+ /* Input, (1-arg1_alpha)*arg2_rgb+arg1_rgb*1 */=0A=
+ if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATEINVALPHA_ADDCOLOR)\n");=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], =
invert_mapping(tex_op_args.mapping[0]), GL_ALPHA));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
+ /* Input, (1-arg1_rgb)*arg2_rgb+arg1_alpha*1 */=0A=
+ if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATEINVCOLOR_ADDALPHA)\n");=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], =
invert_mapping(tex_op_args.mapping[0]), tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
GL_ALPHA));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_DOTPRODUCT3:=0A=
+ /* Input, arg1 . arg2 */=0A=
+ /* FIXME: DX7 uses a different calculation? */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[0], GL_EXPAND_NORMAL_NV, =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[1], GL_EXPAND_NORMAL_NV, =
tex_op_args.component_usage[1]));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_NONE, GL_NONE, GL_TRUE, =
GL_FALSE, GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_MULTIPLYADD:=0A=
+ /* Input, arg3*1+arg1*arg2 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[2], tex_op_args.mapping[2], =
tex_op_args.component_usage[2]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_LERP:=0A=
+ /* Input, arg3*arg1+(1-arg3)*arg2 */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[2], tex_op_args.mapping[2], =
tex_op_args.component_usage[2]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
+ tex_op_args.input[2], =
invert_mapping(tex_op_args.mapping[2]), tex_op_args.component_usage[2]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
+ tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
+=0A=
+ /* Output */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
+ output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_BUMPENVMAPLUMINANCE:=0A=
+ case WINED3DTOP_BUMPENVMAP:=0A=
+ if(GL_SUPPORT(NV_TEXTURE_SHADER)) {=0A=
+ /* The bump map stage itself isn't exciting, just read =
the texture. But tell the next stage to=0A=
+ * perform bump mapping and source from the current =
stage. Pretty much a SELECTARG2.=0A=
+ * ARG2 is passed through unmodified(apps will most =
likely use D3DTA_CURRENT for arg2, arg1=0A=
+ * (which will most likely be D3DTA_TEXTURE) is =
available as a texture shader input for the next stage=0A=
+ */=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
+ tex_op_args.input[1], =
tex_op_args.mapping[1], tex_op_args.component_usage[1]));=0A=
+ GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
+ GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
+ /* Always pass through to CURRENT, ignore temp arg */=0A=
+ GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_SPARE0_NV, GL_DISCARD_NV,=0A=
+ GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
+ break;=0A=
+ }=0A=
+=0A=
+ default:=0A=
+ FIXME("Unhandled WINED3DTOP: stage %d, is_alpha %d, op %s =
(%#x), arg1 %#x, arg2 %#x, arg3 %#x, texture_idx %d\n",=0A=
+ stage, is_alpha, debug_d3dtop(op), op, arg1, arg2, =
arg3, texture_idx);=0A=
+ }=0A=
+=0A=
+ checkGLcall("set_tex_op_nvrc()\n");=0A=
+=0A=
+}=0A=
+=0A=
+=0A=
static void nvrc_colorop(DWORD state, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context) {=0A=
DWORD stage =3D (state - STATE_TEXTURESTAGE(0, 0)) / =
WINED3D_HIGHEST_TEXTURE_STATE;=0A=
DWORD mapped_stage =3D stateblock->wineD3DDevice->texUnitMap[stage];=0A=
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c=0A=
index 9ff10a1..9e29d78 100644=0A=
--- a/dlls/wined3d/state.c=0A=
+++ b/dlls/wined3d/state.c=0A=
@@ -1840,6 +1840,1115 @@ static void state_ckeyblend(DWORD state, =
IWineD3DStateBlockImpl *stateblock, Win=0A=
}=0A=
}=0A=
=0A=
+/* Set texture operations up - The following avoids lots of ifdefs in =
this routine!*/=0A=
+#if defined (GL_VERSION_1_3)=0A=
+# define useext(A) A=0A=
+#elif defined (GL_EXT_texture_env_combine)=0A=
+# define useext(A) A##_EXT=0A=
+#elif defined (GL_ARB_texture_env_combine)=0A=
+# define useext(A) A##_ARB=0A=
+#endif=0A=
+=0A=
+static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, =
GLenum* operand) {=0A=
+ /* The WINED3DTA_ALPHAREPLICATE flag specifies the alpha component =
of the=0A=
+ * input should be used for all input components. The =
WINED3DTA_COMPLEMENT=0A=
+ * flag specifies the complement of the input should be used. */=0A=
+ BOOL from_alpha =3D is_alpha || arg & WINED3DTA_ALPHAREPLICATE;=0A=
+ BOOL complement =3D arg & WINED3DTA_COMPLEMENT;=0A=
+=0A=
+ /* Calculate the operand */=0A=
+ if (complement) {=0A=
+ if (from_alpha) *operand =3D GL_ONE_MINUS_SRC_ALPHA;=0A=
+ else *operand =3D GL_ONE_MINUS_SRC_COLOR;=0A=
+ } else {=0A=
+ if (from_alpha) *operand =3D GL_SRC_ALPHA;=0A=
+ else *operand =3D GL_SRC_COLOR;=0A=
+ }=0A=
+=0A=
+ /* Calculate the source */=0A=
+ switch (arg & WINED3DTA_SELECTMASK) {=0A=
+ case WINED3DTA_CURRENT: *source =3D GL_PREVIOUS_EXT; break;=0A=
+ case WINED3DTA_DIFFUSE: *source =3D GL_PRIMARY_COLOR_EXT; break;=0A=
+ case WINED3DTA_TEXTURE: *source =3D GL_TEXTURE; break;=0A=
+ case WINED3DTA_TFACTOR: *source =3D GL_CONSTANT_EXT; break;=0A=
+ case WINED3DTA_SPECULAR:=0A=
+ /*=0A=
+ * According to the GL_ARB_texture_env_combine specs, =
SPECULAR is=0A=
+ * 'Secondary color' and isn't supported until base GL =
supports it=0A=
+ * There is no concept of temp registers as far as I can tell=0A=
+ */=0A=
+ FIXME("Unhandled texture arg WINED3DTA_SPECULAR\n");=0A=
+ *source =3D GL_TEXTURE;=0A=
+ break;=0A=
+ default:=0A=
+ FIXME("Unrecognized texture arg %#x\n", arg);=0A=
+ *source =3D GL_TEXTURE;=0A=
+ break;=0A=
+ }=0A=
+}=0A=
+=0A=
+/* Setup the texture operations texture stage states */=0A=
+static void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3)=0A=
+{=0A=
+ GLenum src1, src2, src3;=0A=
+ GLenum opr1, opr2, opr3;=0A=
+ GLenum comb_target;=0A=
+ GLenum src0_target, src1_target, src2_target;=0A=
+ GLenum opr0_target, opr1_target, opr2_target;=0A=
+ GLenum scal_target;=0A=
+ GLenum opr=3D0, invopr, src3_target, opr3_target;=0A=
+ BOOL Handled =3D FALSE;=0A=
+ IWineD3DDeviceImpl *This =3D (IWineD3DDeviceImpl *)iface;=0A=
+ IWineD3DStateBlockImpl *stateblock =3D This->stateBlock; /* for =
GLINFO_LOCATION */=0A=
+=0A=
+ TRACE("Alpha?(%d), Stage:%d Op(%s), a1(%d), a2(%d), a3(%d)\n", =
isAlpha, Stage, debug_d3dtop(op), arg1, arg2, arg3);=0A=
+=0A=
+ /* This is called by a state handler which has the gl lock held and =
a context for the thread */=0A=
+=0A=
+ /* Note: Operations usually involve two ars, src0 and src1 and =
are operations of=0A=
+ the form (a1 <operation> a2). However, some of the more complex =
operations=0A=
+ take 3 parameters. Instead of the (sensible) addition of a3, =
Microsoft added=0A=
+ in a third parameter called a0. Therefore these are operations of =
the form=0A=
+ a0 <operation> a1 <operation> a2, i.e., the new parameter goes to =
the front.=0A=
+=0A=
+ However, below we treat the new (a0) parameter as src2/opr2, so in =
the actual=0A=
+ functions below, expect their syntax to differ slightly to those =
listed in the=0A=
+ manuals, i.e., replace arg1 with arg3, arg2 with arg1 and arg3 with =
arg2=0A=
+ This affects WINED3DTOP_MULTIPLYADD and WINED3DTOP_LERP =
*/=0A=
+=0A=
+ if (isAlpha) {=0A=
+ comb_target =3D useext(GL_COMBINE_ALPHA);=0A=
+ src0_target =3D useext(GL_SOURCE0_ALPHA);=0A=
+ src1_target =3D useext(GL_SOURCE1_ALPHA);=0A=
+ src2_target =3D useext(GL_SOURCE2_ALPHA);=0A=
+ opr0_target =3D useext(GL_OPERAND0_ALPHA);=0A=
+ opr1_target =3D useext(GL_OPERAND1_ALPHA);=0A=
+ opr2_target =3D useext(GL_OPERAND2_ALPHA);=0A=
+ scal_target =3D GL_ALPHA_SCALE;=0A=
+ }=0A=
+ else {=0A=
+ comb_target =3D useext(GL_COMBINE_RGB);=0A=
+ src0_target =3D useext(GL_SOURCE0_RGB);=0A=
+ src1_target =3D useext(GL_SOURCE1_RGB);=0A=
+ src2_target =3D useext(GL_SOURCE2_RGB);=0A=
+ opr0_target =3D useext(GL_OPERAND0_RGB);=0A=
+ opr1_target =3D useext(GL_OPERAND1_RGB);=0A=
+ opr2_target =3D useext(GL_OPERAND2_RGB);=0A=
+ scal_target =3D useext(GL_RGB_SCALE);=0A=
+ }=0A=
+=0A=
+ /* If a texture stage references an invalid texture unit the =
stage just=0A=
+ * passes through the result from the previous stage */=0A=
+ if (is_invalid_op(This, Stage, op, arg1, arg2, arg3)) {=0A=
+ arg1 =3D WINED3DTA_CURRENT;=0A=
+ op =3D WINED3DTOP_SELECTARG1;=0A=
+ }=0A=
+=0A=
+ /* From MSDN (WINED3DTSS_ALPHAARG1) :=0A=
+ The default argument is WINED3DTA_TEXTURE. If no texture is set for =
this stage,=0A=
+ then the default argument is WINED3DTA_DIFFUSE.=0A=
+ FIXME? If texture added/removed, may need to reset back as well? =
*/=0A=
+ if (isAlpha && This->stateBlock->textures[Stage] =3D=3D NULL && =
arg1 =3D=3D WINED3DTA_TEXTURE) {=0A=
+ get_src_and_opr(WINED3DTA_DIFFUSE, isAlpha, &src1, &opr1);=0A=
+ } else {=0A=
+ get_src_and_opr(arg1, isAlpha, &src1, &opr1);=0A=
+ }=0A=
+ get_src_and_opr(arg2, isAlpha, &src2, &opr2);=0A=
+ get_src_and_opr(arg3, isAlpha, &src3, &opr3);=0A=
+=0A=
+ TRACE("ct(%x), 1:(%x,%x), 2:(%x,%x), 3:(%x,%x)\n", comb_target, =
src1, opr1, src2, opr2, src3, opr3);=0A=
+=0A=
+ Handled =3D TRUE; /* Assume will be handled */=0A=
+=0A=
+ /* Other texture operations require special extensions: */=0A=
+ if (GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
+ if (isAlpha) {=0A=
+ opr =3D GL_SRC_ALPHA;=0A=
+ invopr =3D GL_ONE_MINUS_SRC_ALPHA;=0A=
+ src3_target =3D GL_SOURCE3_ALPHA_NV;=0A=
+ opr3_target =3D GL_OPERAND3_ALPHA_NV;=0A=
+ } else {=0A=
+ opr =3D GL_SRC_COLOR;=0A=
+ invopr =3D GL_ONE_MINUS_SRC_COLOR;=0A=
+ src3_target =3D GL_SOURCE3_RGB_NV;=0A=
+ opr3_target =3D GL_OPERAND3_RGB_NV;=0A=
+ }=0A=
+ switch (op) {=0A=
+ case WINED3DTOP_DISABLE: /* Only for alpha */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
+ break;=0A=
+ case WINED3DTOP_SELECTARG1: =
/* =3D a1 * 1 + 0 * 0 */=0A=
+ case WINED3DTOP_SELECTARG2: =
/* =3D a2 * 1 + 0 * 0 */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ if (op =3D=3D WINED3DTOP_SELECTARG1) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, =
src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, =
opr1");=0A=
+ } else {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, =
src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, =
opr2");=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_MODULATE:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* =
Add =3D a0*a1 + a2*a3 */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATE2X:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* =
Add =3D a0*a1 + a2*a3 */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATE4X:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* =
Add =3D a0*a1 + a2*a3 */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 4);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 4");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_ADD:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_ADDSIGNED:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_ADDSIGNED2X:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_ADDSMOOTH:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; =
break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; =
break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, =
useext(GL_PRIMARY_COLOR));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, =
useext(GL_PRIMARY_COLOR)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, =
useext(GL_PRIMARY_COLOR));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, =
useext(GL_PRIMARY_COLOR)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_TEXTURE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_TEXTURE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_TEXTURE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_TEXTURE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDFACTORALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, =
useext(GL_CONSTANT));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, =
useext(GL_CONSTANT)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, =
useext(GL_CONSTANT));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, =
useext(GL_CONSTANT)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_TEXTURE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_TEXTURE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* =
Add =3D a0*a1 + a2*a3 */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1); /* =
a0 =3D src1/opr1 */=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1"); /* =
a1 =3D 1 (see docs) */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2); /* =
a2 =3D arg2 */=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2"); =
/* a3 =3D src1 alpha */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, src1");=0A=
+ switch (opr) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; =
break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; =
break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MULTIPLYADD:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src3_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src3_target, src3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr3_target, opr3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_BUMPENVMAP:=0A=
+ {=0A=
+ }=0A=
+=0A=
+ case WINED3DTOP_BUMPENVMAPLUMINANCE:=0A=
+ FIXME("Implement bump environment mapping in =
GL_NV_texture_env_combine4 path\n");=0A=
+=0A=
+ default:=0A=
+ Handled =3D FALSE;=0A=
+ }=0A=
+ if (Handled) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
GL_COMBINE4_NV);=0A=
+ checkGLcall("GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
GL_COMBINE4_NV");=0A=
+=0A=
+ return;=0A=
+ }=0A=
+ } /* GL_NV_texture_env_combine4 */=0A=
+=0A=
+ Handled =3D TRUE; /* Again, assume handled */=0A=
+ switch (op) {=0A=
+ case WINED3DTOP_DISABLE: /* Only for alpha */=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_SELECTARG1:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_SELECTARG2:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATE:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_MODULATE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_MODULATE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATE2X:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_MODULATE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_MODULATE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATE4X:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_MODULATE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_MODULATE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 4);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 4");=0A=
+ break;=0A=
+ case WINED3DTOP_ADD:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_ADDSIGNED:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext((GL_ADD_SIGNED)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_ADDSIGNED2X:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
+ break;=0A=
+ case WINED3DTOP_SUBTRACT:=0A=
+ if (GL_SUPPORT(ARB_TEXTURE_ENV_COMBINE)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_SUBTRACT);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_SUBTRACT)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else {=0A=
+ FIXME("This version of opengl does not support =
GL_SUBTRACT\n");=0A=
+ }=0A=
+ break;=0A=
+=0A=
+ case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, =
useext(GL_PRIMARY_COLOR));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, =
GL_PRIMARY_COLOR");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_TEXTURE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, GL_TEXTURE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDFACTORALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, useext(GL_CONSTANT));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, GL_CONSTANT");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDCURRENTALPHA:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, useext(GL_PREVIOUS));=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, GL_PREVIOUS");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_DOTPRODUCT3:=0A=
+ if (GL_SUPPORT(ARB_TEXTURE_ENV_DOT3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_ARB);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_ARB");=0A=
+ } else if (GL_SUPPORT(EXT_TEXTURE_ENV_DOT3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_EXT);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_EXT");=0A=
+ } else {=0A=
+ FIXME("This version of opengl does not support =
GL_DOT3\n");=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_LERP:=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ break;=0A=
+ case WINED3DTOP_ADDSMOOTH:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; =
break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; =
break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_TEXTURE);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, GL_TEXTURE");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, =
GL_ONE_MINUS_SRC_APHA");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; =
break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; =
break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
+ switch (opr1) {=0A=
+ case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ case GL_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
+ case GL_ONE_MINUS_SRC_ALPHA: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
+ }=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_MULTIPLYADD:=0A=
+ if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
+ checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src1_target, src3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
+ } else=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ case WINED3DTOP_BUMPENVMAPLUMINANCE:=0A=
+ if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {=0A=
+ /* Some apps use BUMPENVMAPLUMINANCE instead of =
D3DTOP_BUMPENVMAP, although=0A=
+ * they check for the non-luminance cap flag. Well, give =
them what they asked=0A=
+ * for :-)=0A=
+ */=0A=
+ WARN("Application uses =
WINED3DTOP_BUMPENVMAPLUMINANCE\n");=0A=
+ } else {=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ }=0A=
+ /* Fall through */=0A=
+ case WINED3DTOP_BUMPENVMAP:=0A=
+ if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {=0A=
+ TRACE("Using ati bumpmap on stage %d, target %d\n", =
Stage, Stage + 1);=0A=
+ glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_BUMP_ENVMAP_ATI);=0A=
+ checkGLcall("glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_BUMP_ENVMAP_ATI)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, GL_BUMP_TARGET_ATI, =
GL_TEXTURE0_ARB + Stage + 1);=0A=
+ checkGLcall("glTexEnvi(GL_TEXTURE_ENV, =
GL_BUMP_TARGET_ATI, GL_TEXTURE0_ARB + Stage + 1)");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src0_target, src3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr3);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr0_target, opr3");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
+ glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
+ checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
+=0A=
+ Handled =3D TRUE;=0A=
+ break;=0A=
+ } else if(GL_SUPPORT(NV_TEXTURE_SHADER2)) {=0A=
+ /* Technically texture shader support without register =
combiners is possible, but not expected to occur=0A=
+ * on real world cards, so for now a fixme should be =
enough=0A=
+ */=0A=
+ FIXME("Implement bump mapping with GL_NV_texture_shader =
in non register combiner path\n");=0A=
+ }=0A=
+ default:=0A=
+ Handled =3D FALSE;=0A=
+ }=0A=
+=0A=
+ if (Handled) {=0A=
+ BOOL combineOK =3D TRUE;=0A=
+ if (GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
+ DWORD op2;=0A=
+=0A=
+ if (isAlpha) {=0A=
+ op2 =3D =
This->stateBlock->textureState[Stage][WINED3DTSS_COLOROP];=0A=
+ } else {=0A=
+ op2 =3D =
This->stateBlock->textureState[Stage][WINED3DTSS_ALPHAOP];=0A=
+ }=0A=
+=0A=
+ /* Note: If COMBINE4 in effect can't go back to combine! */=0A=
+ switch (op2) {=0A=
+ case WINED3DTOP_ADDSMOOTH:=0A=
+ case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
+ case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
+ case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
+ case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
+ case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
+ case WINED3DTOP_MULTIPLYADD:=0A=
+ /* Ignore those implemented in both cases */=0A=
+ switch (op) {=0A=
+ case WINED3DTOP_SELECTARG1:=0A=
+ case WINED3DTOP_SELECTARG2:=0A=
+ combineOK =3D FALSE;=0A=
+ Handled =3D FALSE;=0A=
+ break;=0A=
+ default:=0A=
+ FIXME("Can't use COMBINE4 and COMBINE =
together, thisop=3D%s, otherop=3D%s, isAlpha(%d)\n", debug_d3dtop(op), =
debug_d3dtop(op2), isAlpha);=0A=
+ return;=0A=
+ }=0A=
+ }=0A=
+ }=0A=
+=0A=
+ if (combineOK) {=0A=
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
useext(GL_COMBINE));=0A=
+ checkGLcall("GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
useext(GL_COMBINE)");=0A=
+=0A=
+ return;=0A=
+ }=0A=
+ }=0A=
+=0A=
+ /* After all the extensions, if still unhandled, report fixme */=0A=
+ FIXME("Unhandled texture operation %s\n", debug_d3dtop(op));=0A=
+}=0A=
+=0A=
+=0A=
static void tex_colorop(DWORD state, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context) {=0A=
DWORD stage =3D (state - STATE_TEXTURESTAGE(0, 0)) / =
WINED3D_HIGHEST_TEXTURE_STATE;=0A=
DWORD mapped_stage =3D stateblock->wineD3DDevice->texUnitMap[stage];=0A=
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c=0A=
index 245c2c2..dd18b27 100644=0A=
--- a/dlls/wined3d/utils.c=0A=
+++ b/dlls/wined3d/utils.c=0A=
@@ -942,7 +942,7 @@ const char* debug_d3dtexturestate(DWORD state) {=0A=
}=0A=
}=0A=
=0A=
-static const char* debug_d3dtop(WINED3DTEXTUREOP d3dtop) {=0A=
+const char* debug_d3dtop(WINED3DTEXTUREOP d3dtop) {=0A=
switch (d3dtop) {=0A=
#define D3DTOP_TO_STR(u) case u: return #u=0A=
D3DTOP_TO_STR(WINED3DTOP_DISABLE);=0A=
@@ -1107,68 +1107,7 @@ GLenum CompareFunc(DWORD func) {=0A=
}=0A=
}=0A=
=0A=
-static GLenum d3dta_to_combiner_input(DWORD d3dta, DWORD stage, INT =
texture_idx) {=0A=
- switch (d3dta) {=0A=
- case WINED3DTA_DIFFUSE:=0A=
- return GL_PRIMARY_COLOR_NV;=0A=
-=0A=
- case WINED3DTA_CURRENT:=0A=
- if (stage) return GL_SPARE0_NV;=0A=
- else return GL_PRIMARY_COLOR_NV;=0A=
-=0A=
- case WINED3DTA_TEXTURE:=0A=
- if (texture_idx > -1) return GL_TEXTURE0_ARB + texture_idx;=0A=
- else return GL_PRIMARY_COLOR_NV;=0A=
-=0A=
- case WINED3DTA_TFACTOR:=0A=
- return GL_CONSTANT_COLOR0_NV;=0A=
-=0A=
- case WINED3DTA_SPECULAR:=0A=
- return GL_SECONDARY_COLOR_NV;=0A=
-=0A=
- case WINED3DTA_TEMP:=0A=
- return GL_SPARE1_NV;=0A=
-=0A=
- case WINED3DTA_CONSTANT:=0A=
- /* TODO: Support per stage constants (WINED3DTSS_CONSTANT, =
NV_register_combiners2) */=0A=
- FIXME("WINED3DTA_CONSTANT, not properly supported.\n");=0A=
- return GL_CONSTANT_COLOR1_NV;=0A=
-=0A=
- default:=0A=
- FIXME("Unrecognized texture arg %#x\n", d3dta);=0A=
- return GL_TEXTURE;=0A=
- }=0A=
-}=0A=
-=0A=
-static GLenum invert_mapping(GLenum mapping) {=0A=
- if (mapping =3D=3D GL_UNSIGNED_INVERT_NV) return =
GL_SIGNED_IDENTITY_NV;=0A=
- else if (mapping =3D=3D GL_SIGNED_IDENTITY_NV) return =
GL_UNSIGNED_INVERT_NV;=0A=
-=0A=
- FIXME("Unhandled mapping %#x\n", mapping);=0A=
- return mapping;=0A=
-}=0A=
-=0A=
-static void get_src_and_opr_nvrc(DWORD stage, DWORD arg, BOOL is_alpha, =
GLenum* input, GLenum* mapping, GLenum *component_usage, INT =
texture_idx) {=0A=
- /* The WINED3DTA_COMPLEMENT flag specifies the complement of the =
input should=0A=
- * be used. */=0A=
- if (arg & WINED3DTA_COMPLEMENT) *mapping =3D GL_UNSIGNED_INVERT_NV;=0A=
- else *mapping =3D GL_SIGNED_IDENTITY_NV;=0A=
-=0A=
- /* The WINED3DTA_ALPHAREPLICATE flag specifies the alpha component =
of the input=0A=
- * should be used for all input components. */=0A=
- if (is_alpha || arg & WINED3DTA_ALPHAREPLICATE) *component_usage =
=3D GL_ALPHA;=0A=
- else *component_usage =3D GL_RGB;=0A=
-=0A=
- *input =3D d3dta_to_combiner_input(arg & WINED3DTA_SELECTMASK, =
stage, texture_idx);=0A=
-}=0A=
-=0A=
-typedef struct {=0A=
- GLenum input[3];=0A=
- GLenum mapping[3];=0A=
- GLenum component_usage[3];=0A=
-} tex_op_args;=0A=
-=0A=
-static BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3) {=0A=
+BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3) {=0A=
if (op =3D=3D WINED3DTOP_DISABLE) return FALSE;=0A=
if (This->stateBlock->textures[stage]) return FALSE;=0A=
=0A=
@@ -1182,1436 +1121,6 @@ static BOOL is_invalid_op(IWineD3DDeviceImpl =
*This, int stage, WINED3DTEXTUREOP=0A=
return FALSE;=0A=
}=0A=
=0A=
-void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3, INT =
texture_idx, DWORD dst) {=0A=
- IWineD3DDeviceImpl *This =3D (IWineD3DDeviceImpl*)iface;=0A=
- tex_op_args tex_op_args =3D {{0}, {0}, {0}};=0A=
- GLenum portion =3D is_alpha ? GL_ALPHA : GL_RGB;=0A=
- GLenum target =3D GL_COMBINER0_NV + stage;=0A=
- GLenum output;=0A=
-=0A=
- TRACE("stage %d, is_alpha %d, op %s, arg1 %#x, arg2 %#x, arg3 %#x, =
texture_idx %d\n",=0A=
- stage, is_alpha, debug_d3dtop(op), arg1, arg2, arg3, =
texture_idx);=0A=
-=0A=
- /* If a texture stage references an invalid texture unit the stage =
just=0A=
- * passes through the result from the previous stage */=0A=
- if (is_invalid_op(This, stage, op, arg1, arg2, arg3)) {=0A=
- arg1 =3D WINED3DTA_CURRENT;=0A=
- op =3D WINED3DTOP_SELECTARG1;=0A=
- }=0A=
-=0A=
- get_src_and_opr_nvrc(stage, arg1, is_alpha, &tex_op_args.input[0],=0A=
- &tex_op_args.mapping[0], &tex_op_args.component_usage[0], =
texture_idx);=0A=
- get_src_and_opr_nvrc(stage, arg2, is_alpha, &tex_op_args.input[1],=0A=
- &tex_op_args.mapping[1], &tex_op_args.component_usage[1], =
texture_idx);=0A=
- get_src_and_opr_nvrc(stage, arg3, is_alpha, &tex_op_args.input[2],=0A=
- &tex_op_args.mapping[2], &tex_op_args.component_usage[2], =
texture_idx);=0A=
-=0A=
-=0A=
- if(dst =3D=3D WINED3DTA_TEMP) {=0A=
- output =3D GL_SPARE1_NV;=0A=
- } else {=0A=
- output =3D GL_SPARE0_NV;=0A=
- }=0A=
-=0A=
- /* This is called by a state handler which has the gl lock held and =
a context for the thread */=0A=
- switch(op)=0A=
- {=0A=
- case WINED3DTOP_DISABLE:=0A=
- /* Only for alpha */=0A=
- if (!is_alpha) ERR("Shouldn't be called for =
WINED3DTSS_COLOROP (WINED3DTOP_DISABLE)\n");=0A=
- /* Input, prev_alpha*1 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_ALPHA));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_SPARE0_NV, GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_SELECTARG1:=0A=
- case WINED3DTOP_SELECTARG2:=0A=
- /* Input, arg*1 */=0A=
- if (op =3D=3D WINED3DTOP_SELECTARG1) {=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- } else {=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- }=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_MODULATE:=0A=
- case WINED3DTOP_MODULATE2X:=0A=
- case WINED3DTOP_MODULATE4X:=0A=
- /* Input, arg1*arg2 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
-=0A=
- /* Output */=0A=
- if (op =3D=3D WINED3DTOP_MODULATE) {=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
- } else if (op =3D=3D WINED3DTOP_MODULATE2X) {=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_SCALE_BY_TWO_NV, GL_NONE, =
GL_FALSE, GL_FALSE, GL_FALSE));=0A=
- } else if (op =3D=3D WINED3DTOP_MODULATE4X) {=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_SCALE_BY_FOUR_NV, GL_NONE, =
GL_FALSE, GL_FALSE, GL_FALSE));=0A=
- }=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_ADD:=0A=
- case WINED3DTOP_ADDSIGNED:=0A=
- case WINED3DTOP_ADDSIGNED2X:=0A=
- /* Input, arg1*1+arg2*1 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- if (op =3D=3D WINED3DTOP_ADD) {=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
- } else if (op =3D=3D WINED3DTOP_ADDSIGNED) {=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, =
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV, GL_FALSE, GL_FALSE, GL_FALSE));=0A=
- } else if (op =3D=3D WINED3DTOP_ADDSIGNED2X) {=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_SCALE_BY_TWO_NV, =
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV, GL_FALSE, GL_FALSE, GL_FALSE));=0A=
- }=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_SUBTRACT:=0A=
- /* Input, arg1*1+-arg2*1 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[1], GL_SIGNED_NEGATE_NV, =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_ADDSMOOTH:=0A=
- /* Input, arg1*1+(1-arg1)*arg2 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[0], =
invert_mapping(tex_op_args.mapping[0]), tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
- case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
- case WINED3DTOP_BLENDFACTORALPHA:=0A=
- case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
- case WINED3DTOP_BLENDCURRENTALPHA:=0A=
- {=0A=
- GLenum alpha_src =3D GL_PRIMARY_COLOR_NV;=0A=
- if (op =3D=3D WINED3DTOP_BLENDDIFFUSEALPHA) alpha_src =3D =
d3dta_to_combiner_input(WINED3DTA_DIFFUSE, stage, texture_idx);=0A=
- else if (op =3D=3D WINED3DTOP_BLENDTEXTUREALPHA) alpha_src =
=3D d3dta_to_combiner_input(WINED3DTA_TEXTURE, stage, texture_idx);=0A=
- else if (op =3D=3D WINED3DTOP_BLENDFACTORALPHA) alpha_src =
=3D d3dta_to_combiner_input(WINED3DTA_TFACTOR, stage, texture_idx);=0A=
- else if (op =3D=3D WINED3DTOP_BLENDTEXTUREALPHAPM) =
alpha_src =3D d3dta_to_combiner_input(WINED3DTA_TEXTURE, stage, =
texture_idx);=0A=
- else if (op =3D=3D WINED3DTOP_BLENDCURRENTALPHA) alpha_src =
=3D d3dta_to_combiner_input(WINED3DTA_CURRENT, stage, texture_idx);=0A=
- else FIXME("Unhandled WINED3DTOP %s, shouldn't happen\n", =
debug_d3dtop(op));=0A=
-=0A=
- /* Input, arg1*alpha_src+arg2*(1-alpha_src) */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- if (op =3D=3D WINED3DTOP_BLENDTEXTUREALPHAPM)=0A=
- {=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
- } else {=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- alpha_src, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA));=0A=
- }=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- alpha_src, GL_UNSIGNED_INVERT_NV, GL_ALPHA));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
- }=0A=
-=0A=
- case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
- /* Input, arg1_alpha*arg2_rgb+arg1_rgb*1 */=0A=
- if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATEALPHA_ADDCOLOR)\n");=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
GL_ALPHA));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
- /* Input, arg1_rgb*arg2_rgb+arg1_alpha*1 */=0A=
- if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATECOLOR_ADDALPHA)\n");=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
GL_ALPHA));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
- /* Input, (1-arg1_alpha)*arg2_rgb+arg1_rgb*1 */=0A=
- if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATEINVALPHA_ADDCOLOR)\n");=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], =
invert_mapping(tex_op_args.mapping[0]), GL_ALPHA));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
- /* Input, (1-arg1_rgb)*arg2_rgb+arg1_alpha*1 */=0A=
- if (is_alpha) ERR("Only supported for WINED3DTSS_COLOROP =
(WINED3DTOP_MODULATEINVCOLOR_ADDALPHA)\n");=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], =
invert_mapping(tex_op_args.mapping[0]), tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
GL_ALPHA));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_DOTPRODUCT3:=0A=
- /* Input, arg1 . arg2 */=0A=
- /* FIXME: DX7 uses a different calculation? */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[0], GL_EXPAND_NORMAL_NV, =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[1], GL_EXPAND_NORMAL_NV, =
tex_op_args.component_usage[1]));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, output, =
GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_NONE, GL_NONE, GL_TRUE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_MULTIPLYADD:=0A=
- /* Input, arg3*1+arg1*arg2 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[2], tex_op_args.mapping[2], =
tex_op_args.component_usage[2]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_LERP:=0A=
- /* Input, arg3*arg1+(1-arg3)*arg2 */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[2], tex_op_args.mapping[2], =
tex_op_args.component_usage[2]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- tex_op_args.input[0], tex_op_args.mapping[0], =
tex_op_args.component_usage[0]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_C_NV,=0A=
- tex_op_args.input[2], =
invert_mapping(tex_op_args.mapping[2]), tex_op_args.component_usage[2]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_D_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
-=0A=
- /* Output */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_DISCARD_NV, GL_DISCARD_NV,=0A=
- output, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, =
GL_FALSE));=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_BUMPENVMAPLUMINANCE:=0A=
- case WINED3DTOP_BUMPENVMAP:=0A=
- if(GL_SUPPORT(NV_TEXTURE_SHADER)) {=0A=
- /* The bump map stage itself isn't exciting, just read =
the texture. But tell the next stage to=0A=
- * perform bump mapping and source from the current =
stage. Pretty much a SELECTARG2.=0A=
- * ARG2 is passed through unmodified(apps will most =
likely use D3DTA_CURRENT for arg2, arg1=0A=
- * (which will most likely be D3DTA_TEXTURE) is =
available as a texture shader input for the next stage=0A=
- */=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_A_NV,=0A=
- tex_op_args.input[1], tex_op_args.mapping[1], =
tex_op_args.component_usage[1]));=0A=
- GL_EXTCALL(glCombinerInputNV(target, portion, =
GL_VARIABLE_B_NV,=0A=
- GL_ZERO, GL_UNSIGNED_INVERT_NV, portion));=0A=
- /* Always pass through to CURRENT, ignore temp arg */=0A=
- GL_EXTCALL(glCombinerOutputNV(target, portion, =
GL_SPARE0_NV, GL_DISCARD_NV,=0A=
- GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, =
GL_FALSE, GL_FALSE));=0A=
- break;=0A=
- }=0A=
-=0A=
- default:=0A=
- FIXME("Unhandled WINED3DTOP: stage %d, is_alpha %d, op %s =
(%#x), arg1 %#x, arg2 %#x, arg3 %#x, texture_idx %d\n",=0A=
- stage, is_alpha, debug_d3dtop(op), op, arg1, arg2, =
arg3, texture_idx);=0A=
- }=0A=
-=0A=
- checkGLcall("set_tex_op_nvrc()\n");=0A=
-=0A=
-}=0A=
-=0A=
-static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, =
GLenum* operand) {=0A=
- /* The WINED3DTA_ALPHAREPLICATE flag specifies the alpha component =
of the=0A=
- * input should be used for all input components. The =
WINED3DTA_COMPLEMENT=0A=
- * flag specifies the complement of the input should be used. */=0A=
- BOOL from_alpha =3D is_alpha || arg & WINED3DTA_ALPHAREPLICATE;=0A=
- BOOL complement =3D arg & WINED3DTA_COMPLEMENT;=0A=
-=0A=
- /* Calculate the operand */=0A=
- if (complement) {=0A=
- if (from_alpha) *operand =3D GL_ONE_MINUS_SRC_ALPHA;=0A=
- else *operand =3D GL_ONE_MINUS_SRC_COLOR;=0A=
- } else {=0A=
- if (from_alpha) *operand =3D GL_SRC_ALPHA;=0A=
- else *operand =3D GL_SRC_COLOR;=0A=
- }=0A=
-=0A=
- /* Calculate the source */=0A=
- switch (arg & WINED3DTA_SELECTMASK) {=0A=
- case WINED3DTA_CURRENT: *source =3D GL_PREVIOUS_EXT; break;=0A=
- case WINED3DTA_DIFFUSE: *source =3D GL_PRIMARY_COLOR_EXT; break;=0A=
- case WINED3DTA_TEXTURE: *source =3D GL_TEXTURE; break;=0A=
- case WINED3DTA_TFACTOR: *source =3D GL_CONSTANT_EXT; break;=0A=
- case WINED3DTA_SPECULAR:=0A=
- /*=0A=
- * According to the GL_ARB_texture_env_combine specs, =
SPECULAR is=0A=
- * 'Secondary color' and isn't supported until base GL =
supports it=0A=
- * There is no concept of temp registers as far as I can =
tell=0A=
- */=0A=
- FIXME("Unhandled texture arg WINED3DTA_SPECULAR\n");=0A=
- *source =3D GL_TEXTURE;=0A=
- break;=0A=
- default:=0A=
- FIXME("Unrecognized texture arg %#x\n", arg);=0A=
- *source =3D GL_TEXTURE;=0A=
- break;=0A=
- }=0A=
-}=0A=
-=0A=
-/* Set texture operations up - The following avoids lots of ifdefs in =
this routine!*/=0A=
-#if defined (GL_VERSION_1_3)=0A=
-# define useext(A) A=0A=
-#elif defined (GL_EXT_texture_env_combine)=0A=
-# define useext(A) A##_EXT=0A=
-#elif defined (GL_ARB_texture_env_combine)=0A=
-# define useext(A) A##_ARB=0A=
-#endif=0A=
-=0A=
-/* Setup the texture operations texture stage states */=0A=
-void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3)=0A=
-{=0A=
- GLenum src1, src2, src3;=0A=
- GLenum opr1, opr2, opr3;=0A=
- GLenum comb_target;=0A=
- GLenum src0_target, src1_target, src2_target;=0A=
- GLenum opr0_target, opr1_target, opr2_target;=0A=
- GLenum scal_target;=0A=
- GLenum opr=3D0, invopr, src3_target, opr3_target;=0A=
- BOOL Handled =3D FALSE;=0A=
- IWineD3DDeviceImpl *This =3D (IWineD3DDeviceImpl *)iface;=0A=
-=0A=
- TRACE("Alpha?(%d), Stage:%d Op(%s), a1(%d), a2(%d), a3(%d)\n", =
isAlpha, Stage, debug_d3dtop(op), arg1, arg2, arg3);=0A=
-=0A=
- /* This is called by a state handler which has the gl lock held =
and a context for the thread */=0A=
-=0A=
- /* Note: Operations usually involve two ars, src0 and src1 and =
are operations of=0A=
- the form (a1 <operation> a2). However, some of the more =
complex operations=0A=
- take 3 parameters. Instead of the (sensible) addition of a3, =
Microsoft added=0A=
- in a third parameter called a0. Therefore these are =
operations of the form=0A=
- a0 <operation> a1 <operation> a2, i.e., the new parameter =
goes to the front.=0A=
-=0A=
- However, below we treat the new (a0) parameter as src2/opr2, =
so in the actual=0A=
- functions below, expect their syntax to differ slightly to =
those listed in the=0A=
- manuals, i.e., replace arg1 with arg3, arg2 with arg1 and =
arg3 with arg2=0A=
- This affects WINED3DTOP_MULTIPLYADD and WINED3DTOP_LERP =
*/=0A=
-=0A=
- if (isAlpha) {=0A=
- comb_target =3D useext(GL_COMBINE_ALPHA);=0A=
- src0_target =3D useext(GL_SOURCE0_ALPHA);=0A=
- src1_target =3D useext(GL_SOURCE1_ALPHA);=0A=
- src2_target =3D useext(GL_SOURCE2_ALPHA);=0A=
- opr0_target =3D useext(GL_OPERAND0_ALPHA);=0A=
- opr1_target =3D useext(GL_OPERAND1_ALPHA);=0A=
- opr2_target =3D useext(GL_OPERAND2_ALPHA);=0A=
- scal_target =3D GL_ALPHA_SCALE;=0A=
- }=0A=
- else {=0A=
- comb_target =3D useext(GL_COMBINE_RGB);=0A=
- src0_target =3D useext(GL_SOURCE0_RGB);=0A=
- src1_target =3D useext(GL_SOURCE1_RGB);=0A=
- src2_target =3D useext(GL_SOURCE2_RGB);=0A=
- opr0_target =3D useext(GL_OPERAND0_RGB);=0A=
- opr1_target =3D useext(GL_OPERAND1_RGB);=0A=
- opr2_target =3D useext(GL_OPERAND2_RGB);=0A=
- scal_target =3D useext(GL_RGB_SCALE);=0A=
- }=0A=
-=0A=
- /* If a texture stage references an invalid texture unit the =
stage just=0A=
- * passes through the result from the previous stage */=0A=
- if (is_invalid_op(This, Stage, op, arg1, arg2, arg3)) {=0A=
- arg1 =3D WINED3DTA_CURRENT;=0A=
- op =3D WINED3DTOP_SELECTARG1;=0A=
- }=0A=
-=0A=
- /* From MSDN (WINED3DTSS_ALPHAARG1) :=0A=
- The default argument is WINED3DTA_TEXTURE. If no texture is =
set for this stage,=0A=
- then the default argument is WINED3DTA_DIFFUSE.=0A=
- FIXME? If texture added/removed, may need to reset =
back as well? */=0A=
- if (isAlpha && This->stateBlock->textures[Stage] =3D=3D NULL && =
arg1 =3D=3D WINED3DTA_TEXTURE) {=0A=
- get_src_and_opr(WINED3DTA_DIFFUSE, isAlpha, &src1, &opr1);=0A=
- } else {=0A=
- get_src_and_opr(arg1, isAlpha, &src1, &opr1);=0A=
- }=0A=
- get_src_and_opr(arg2, isAlpha, &src2, &opr2);=0A=
- get_src_and_opr(arg3, isAlpha, &src3, &opr3);=0A=
-=0A=
- TRACE("ct(%x), 1:(%x,%x), 2:(%x,%x), 3:(%x,%x)\n", comb_target, =
src1, opr1, src2, opr2, src3, opr3);=0A=
-=0A=
- Handled =3D TRUE; /* Assume will be handled */=0A=
-=0A=
- /* Other texture operations require special extensions: */=0A=
- if (GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
- if (isAlpha) {=0A=
- opr =3D GL_SRC_ALPHA;=0A=
- invopr =3D GL_ONE_MINUS_SRC_ALPHA;=0A=
- src3_target =3D GL_SOURCE3_ALPHA_NV;=0A=
- opr3_target =3D GL_OPERAND3_ALPHA_NV;=0A=
- } else {=0A=
- opr =3D GL_SRC_COLOR;=0A=
- invopr =3D GL_ONE_MINUS_SRC_COLOR;=0A=
- src3_target =3D GL_SOURCE3_RGB_NV;=0A=
- opr3_target =3D GL_OPERAND3_RGB_NV;=0A=
- }=0A=
- switch (op) {=0A=
- case WINED3DTOP_DISABLE: /* Only for alpha */=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
- break;=0A=
- case WINED3DTOP_SELECTARG1: =
/* =3D a1 * 1 + 0 * 0 */=0A=
- case WINED3DTOP_SELECTARG2: =
/* =3D a2 * 1 + 0 * 0 */=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- if (op =3D=3D WINED3DTOP_SELECTARG1) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- } else {=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr2");=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_MODULATE:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* Add =
=3D a0*a1 + a2*a3 */=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATE2X:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* Add =
=3D a0*a1 + a2*a3 */=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
- break;=0A=
- case WINED3DTOP_MODULATE4X:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* Add =
=3D a0*a1 + a2*a3 */=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 4);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 4");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_ADD:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_ADDSIGNED:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_ADDSIGNED2X:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_ADDSMOOTH:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, =
useext(GL_PRIMARY_COLOR));=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, =
useext(GL_PRIMARY_COLOR)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, =
useext(GL_PRIMARY_COLOR));=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, =
useext(GL_PRIMARY_COLOR)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_TEXTURE);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_TEXTURE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_TEXTURE);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_TEXTURE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_BLENDFACTORALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, useext(GL_CONSTANT));=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, =
useext(GL_CONSTANT)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, useext(GL_CONSTANT));=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, =
useext(GL_CONSTANT)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_TEXTURE);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_TEXTURE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, =
GL_ONE_MINUS_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD"); /* Add =
=3D a0*a1 + a2*a3 */=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1); /* =
a0 =3D src1/opr1 */=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1"); /* =
a1 =3D 1 (see docs) */=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2); /* =
a2 =3D arg2 */=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2"); /* =
a3 =3D src1 alpha */=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, src1");=0A=
- switch (opr) {=0A=
- case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MULTIPLYADD:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src3);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr3);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, GL_ZERO);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, GL_ZERO");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, invopr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, invopr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src3_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src3_target, src3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr3_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr3_target, opr3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_BUMPENVMAP:=0A=
- {=0A=
- }=0A=
-=0A=
- case WINED3DTOP_BUMPENVMAPLUMINANCE:=0A=
- FIXME("Implement bump environment mapping in =
GL_NV_texture_env_combine4 path\n");=0A=
-=0A=
- default:=0A=
- Handled =3D FALSE;=0A=
- }=0A=
- if (Handled) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
GL_COMBINE4_NV);=0A=
- checkGLcall("GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
GL_COMBINE4_NV");=0A=
-=0A=
- return;=0A=
- }=0A=
- } /* GL_NV_texture_env_combine4 */=0A=
-=0A=
- Handled =3D TRUE; /* Again, assume handled */=0A=
- switch (op) {=0A=
- case WINED3DTOP_DISABLE: /* Only for alpha */=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_PREVIOUS_EXT);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, =
GL_PREVIOUS_EXT");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, GL_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, =
GL_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_SELECTARG1:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_SELECTARG2:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_REPLACE);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_REPLACE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATE:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_MODULATE);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_MODULATE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_MODULATE2X:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_MODULATE);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_MODULATE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
- break;=0A=
- case WINED3DTOP_MODULATE4X:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_MODULATE);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_MODULATE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 4);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 4");=0A=
- break;=0A=
- case WINED3DTOP_ADD:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_ADD);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, GL_ADD");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_ADDSIGNED:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext((GL_ADD_SIGNED)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_ADDSIGNED2X:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_ADD_SIGNED)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 2);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 2");=0A=
- break;=0A=
- case WINED3DTOP_SUBTRACT:=0A=
- if (GL_SUPPORT(ARB_TEXTURE_ENV_COMBINE)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, GL_SUBTRACT);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_SUBTRACT)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else {=0A=
- FIXME("This version of opengl does not support =
GL_SUBTRACT\n");=0A=
- }=0A=
- break;=0A=
-=0A=
- case WINED3DTOP_BLENDDIFFUSEALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, =
useext(GL_PRIMARY_COLOR));=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, =
GL_PRIMARY_COLOR");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, =
GL_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_BLENDTEXTUREALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, GL_TEXTURE);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, GL_TEXTURE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, =
GL_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_BLENDFACTORALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, =
useext(GL_CONSTANT));=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, GL_CONSTANT");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, =
GL_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_BLENDCURRENTALPHA:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, =
useext(GL_PREVIOUS));=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, GL_PREVIOUS");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, GL_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, =
GL_SRC_ALPHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_DOTPRODUCT3:=0A=
- if (GL_SUPPORT(ARB_TEXTURE_ENV_DOT3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_ARB);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_ARB");=0A=
- } else if (GL_SUPPORT(EXT_TEXTURE_ENV_DOT3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_EXT);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_DOT3_RGBA_EXT");=0A=
- } else {=0A=
- FIXME("This version of opengl does not support =
GL_DOT3\n");=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_LERP:=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE));=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
useext(GL_INTERPOLATE)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src3);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr3);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- break;=0A=
- case WINED3DTOP_ADDSMOOTH:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; =
break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; =
break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, GL_TEXTURE);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, =
GL_TEXTURE");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, =
GL_ONE_MINUS_SRC_ALPHA);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, =
GL_ONE_MINUS_SRC_APHA");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_ALPHA; =
break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_ONE_MINUS_SRC_COLOR; =
break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D GL_SRC_COLOR; =
break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_ONE_MINUS_SRC_ALPHA; =
break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D GL_SRC_ALPHA; =
break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src1");=0A=
- switch (opr1) {=0A=
- case GL_SRC_COLOR: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_COLOR: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- case GL_SRC_ALPHA: opr =3D GL_SRC_ALPHA; break;=0A=
- case GL_ONE_MINUS_SRC_ALPHA: opr =3D =
GL_ONE_MINUS_SRC_ALPHA; break;=0A=
- }=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_MULTIPLYADD:=0A=
- if (GL_SUPPORT(ATI_TEXTURE_ENV_COMBINE3)) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI);=0A=
- checkGLcall("GL_TEXTURE_ENV, comb_target, =
GL_MODULATE_ADD_ATI");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src3);=0A=
- checkGLcall("GL_TEXTURE_ENV, src1_target, src3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr3);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src2_target, src2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
- glTexEnvi(GL_TEXTURE_ENV, scal_target, 1);=0A=
- checkGLcall("GL_TEXTURE_ENV, scal_target, 1");=0A=
- } else=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- case WINED3DTOP_BUMPENVMAPLUMINANCE:=0A=
- if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {=0A=
- /* Some apps use BUMPENVMAPLUMINANCE instead of =
D3DTOP_BUMPENVMAP, although=0A=
- * they check for the non-luminance cap flag. Well, =
give them what they asked=0A=
- * for :-)=0A=
- */=0A=
- WARN("Application uses =
WINED3DTOP_BUMPENVMAPLUMINANCE\n");=0A=
- } else {=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- }=0A=
- /* Fall through */=0A=
- case WINED3DTOP_BUMPENVMAP:=0A=
- if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {=0A=
- TRACE("Using ati bumpmap on stage %d, target %d\n", =
Stage, Stage + 1);=0A=
- glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_BUMP_ENVMAP_ATI);=0A=
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, comb_target, =
GL_BUMP_ENVMAP_ATI)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, GL_BUMP_TARGET_ATI, =
GL_TEXTURE0_ARB + Stage + 1);=0A=
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, =
GL_BUMP_TARGET_ATI, GL_TEXTURE0_ARB + Stage + 1)");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src0_target, src3);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr0_target, opr3);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr0_target, opr3");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src1_target, src1);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr1_target, opr1);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr1_target, opr1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, src2_target, src2);=0A=
- checkGLcall("GL_TEXTURE_ENV, src0_target, src1");=0A=
- glTexEnvi(GL_TEXTURE_ENV, opr2_target, opr2);=0A=
- checkGLcall("GL_TEXTURE_ENV, opr2_target, opr2");=0A=
-=0A=
- Handled =3D TRUE;=0A=
- break;=0A=
- } else if(GL_SUPPORT(NV_TEXTURE_SHADER2)) {=0A=
- /* Technically texture shader support without =
register combiners is possible, but not expected to occur=0A=
- * on real world cards, so for now a fixme should =
be enough=0A=
- */=0A=
- FIXME("Implement bump mapping with =
GL_NV_texture_shader in non register combiner path\n");=0A=
- }=0A=
- default:=0A=
- Handled =3D FALSE;=0A=
- }=0A=
-=0A=
- if (Handled) {=0A=
- BOOL combineOK =3D TRUE;=0A=
- if (GL_SUPPORT(NV_TEXTURE_ENV_COMBINE4)) {=0A=
- DWORD op2;=0A=
-=0A=
- if (isAlpha) {=0A=
- op2 =3D =
This->stateBlock->textureState[Stage][WINED3DTSS_COLOROP];=0A=
- } else {=0A=
- op2 =3D =
This->stateBlock->textureState[Stage][WINED3DTSS_ALPHAOP];=0A=
- }=0A=
-=0A=
- /* Note: If COMBINE4 in effect can't go back to combine! */=0A=
- switch (op2) {=0A=
- case WINED3DTOP_ADDSMOOTH:=0A=
- case WINED3DTOP_BLENDTEXTUREALPHAPM:=0A=
- case WINED3DTOP_MODULATEALPHA_ADDCOLOR:=0A=
- case WINED3DTOP_MODULATECOLOR_ADDALPHA:=0A=
- case WINED3DTOP_MODULATEINVALPHA_ADDCOLOR:=0A=
- case WINED3DTOP_MODULATEINVCOLOR_ADDALPHA:=0A=
- case WINED3DTOP_MULTIPLYADD:=0A=
- /* Ignore those implemented in both cases */=0A=
- switch (op) {=0A=
- case WINED3DTOP_SELECTARG1:=0A=
- case WINED3DTOP_SELECTARG2:=0A=
- combineOK =3D FALSE;=0A=
- Handled =3D FALSE;=0A=
- break;=0A=
- default:=0A=
- FIXME("Can't use COMBINE4 and COMBINE together, =
thisop=3D%s, otherop=3D%s, isAlpha(%d)\n", debug_d3dtop(op), =
debug_d3dtop(op2), isAlpha);=0A=
- return;=0A=
- }=0A=
- }=0A=
- }=0A=
-=0A=
- if (combineOK) {=0A=
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
useext(GL_COMBINE));=0A=
- checkGLcall("GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, =
useext(GL_COMBINE)");=0A=
-=0A=
- return;=0A=
- }=0A=
- }=0A=
-=0A=
- /* After all the extensions, if still unhandled, report fixme */=0A=
- FIXME("Unhandled texture operation %s\n", debug_d3dtop(op));=0A=
-#undef GLINFO_LOCATION=0A=
-}=0A=
-=0A=
/* Setup this textures matrix according to the texture flags*/=0A=
void set_texture_matrix(const float *smat, DWORD flags, BOOL =
calculatedCoords, BOOL transformed, DWORD coordtype)=0A=
{=0A=
@@ -2701,6 +1210,7 @@ void set_texture_matrix(const float *smat, DWORD =
flags, BOOL calculatedCoords, B=0A=
glLoadMatrixf(mat);=0A=
checkGLcall("glLoadMatrixf(mat)");=0A=
}=0A=
+#undef GLINFO_LOCATION=0A=
=0A=
#define GLINFO_LOCATION ((IWineD3DImpl *)(This->wineD3D))->gl_info=0A=
=0A=
diff --git a/dlls/wined3d/wined3d_private.h =
b/dlls/wined3d/wined3d_private.h=0A=
index fdbb4a3..61b2983 100644=0A=
--- a/dlls/wined3d/wined3d_private.h=0A=
+++ b/dlls/wined3d/wined3d_private.h=0A=
@@ -1730,11 +1730,12 @@ const char *debug_fbostatus(GLenum status);=0A=
const char *debug_glerror(GLenum error);=0A=
const char *debug_d3dbasis(WINED3DBASISTYPE basis);=0A=
const char *debug_d3ddegree(WINED3DDEGREETYPE order);=0A=
+const char* debug_d3dtop(WINED3DTEXTUREOP d3dtop);=0A=
=0A=
/* Routines for GL <-> D3D values */=0A=
GLenum StencilOp(DWORD op);=0A=
GLenum CompareFunc(DWORD func);=0A=
-void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3);=0A=
+BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3);=0A=
void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, =
WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3, INT =
texture_idx, DWORD dst);=0A=
void set_texture_matrix(const float *smat, DWORD flags, BOOL =
calculatedCoords, BOOL transformed, DWORD coordtype);=0A=
void texture_activate_dimensions(DWORD stage, IWineD3DStateBlockImpl =
*stateblock, WineD3DContext *context);=0A=
-- =0A=
1.5.4.5=0A=
=0A=
------=_NextPart_000_0001_01C8EB1E.D4B3D280--
More information about the wine-patches
mailing list