61#define SC_OPAQUE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_ENABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
62 DSTBLEND_ZERO, FOG_DISABLE, GRADIENT_MODULATE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
63 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
64 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
68#define SC_ADDITIVE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
69 DSTBLEND_ONE, FOG_DISABLE, GRADIENT_MODULATE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
70 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
71 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
75#define SC_BUMPENVMAP ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
76 DSTBLEND_ONE, FOG_DISABLE, GRADIENT_BUMPENVMAP, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
77 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
78 DETAILCOLOR_ADD, DETAILALPHA_DISABLE) )
82#define SC_ALPHA ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_SRC_ALPHA, \
83 DSTBLEND_ONE_MINUS_SRC_ALPHA, FOG_DISABLE, GRADIENT_MODULATE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
84 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
85 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
89#define SC_MULTIPLICATIVE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ZERO, \
90 DSTBLEND_SRC_COLOR, FOG_DISABLE, GRADIENT_MODULATE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
91 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
92 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
97#define SC_OP_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
98 DSTBLEND_ZERO, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
99 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
100 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
105#define SC_OP_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
106 DSTBLEND_ZERO, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
107 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
108 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
114#define SC_ADD_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
115 DSTBLEND_ONE, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
116 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
117 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
122#define SC_ALPHA_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
123 SRCBLEND_SRC_ALPHA, DSTBLEND_ONE_MINUS_SRC_ALPHA, FOG_DISABLE, GRADIENT_DISABLE, \
124 SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
125 ALPHATEST_DISABLE, CULL_MODE_ENABLE, DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
131#define SC_ADD_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
132 SRCBLEND_ONE, DSTBLEND_ONE, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, \
133 TEXTURING_ENABLE, ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
134 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
140#define SC_ALPHA_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
141 SRCBLEND_SRC_ALPHA, DSTBLEND_ONE_MINUS_SRC_ALPHA, FOG_DISABLE, GRADIENT_DISABLE, \
142 SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
143 ALPHATEST_DISABLE, CULL_MODE_ENABLE, DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
148#define SC_OPAQUE_SOLID ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_ENABLE, COLOR_WRITE_ENABLE, \
149 SRCBLEND_ONE, DSTBLEND_ZERO, FOG_DISABLE, GRADIENT_MODULATE, SECONDARY_GRADIENT_DISABLE, \
150 TEXTURING_DISABLE, ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
151 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
157#define SC_ADDITIVE_SOLID ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
158 SRCBLEND_ONE, DSTBLEND_ONE, FOG_DISABLE, GRADIENT_MODULATE, SECONDARY_GRADIENT_DISABLE, \
159 TEXTURING_DISABLE, ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
160 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
166#define SC_ALPHA_SOLID ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
167 SRCBLEND_SRC_ALPHA, DSTBLEND_ONE_MINUS_SRC_ALPHA, FOG_DISABLE, GRADIENT_MODULATE, \
168 SECONDARY_GRADIENT_DISABLE, TEXTURING_DISABLE, \
169 ALPHATEST_DISABLE, CULL_MODE_ENABLE, DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
174#define SC_ATEST_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
175 SRCBLEND_ONE, DSTBLEND_ZERO, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, \
176 TEXTURING_ENABLE, ALPHATEST_ENABLE, CULL_MODE_ENABLE, \
177 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
183#define SC_ATEST_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_ENABLE, COLOR_WRITE_ENABLE, \
184 SRCBLEND_ONE, DSTBLEND_ZERO, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, \
185 TEXTURING_ENABLE, ALPHATEST_ENABLE, CULL_MODE_ENABLE, \
186 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
192#define SC_ATESTBLEND_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
193 SRCBLEND_SRC_ALPHA, DSTBLEND_ONE_MINUS_SRC_ALPHA, FOG_DISABLE, GRADIENT_DISABLE, \
194 SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
195 ALPHATEST_ENABLE, CULL_MODE_ENABLE, DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
201#define SC_ATESTBLEND_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_ENABLE, COLOR_WRITE_ENABLE, \
202 SRCBLEND_SRC_ALPHA, DSTBLEND_ONE_MINUS_SRC_ALPHA, FOG_DISABLE, GRADIENT_DISABLE, \
203 SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
204 ALPHATEST_ENABLE, CULL_MODE_ENABLE, DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
209#define SC_SCREEN_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ONE, \
210 DSTBLEND_ONE_MINUS_SRC_COLOR, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, \
211 TEXTURING_ENABLE, ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
212 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
218#define SC_SCREEN_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
219 SRCBLEND_ONE, DSTBLEND_ONE_MINUS_SRC_COLOR, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, \
220 TEXTURING_ENABLE, ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
221 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
226#define SC_MUL_2D ( SHADE_CNST(PASS_ALWAYS, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, SRCBLEND_ZERO, \
227 DSTBLEND_SRC_COLOR, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, TEXTURING_ENABLE, \
228 ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
229 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
235#define SC_MUL_SPRITE ( SHADE_CNST(PASS_LEQUAL, DEPTH_WRITE_DISABLE, COLOR_WRITE_ENABLE, \
236 SRCBLEND_ZERO, DSTBLEND_SRC_COLOR, FOG_DISABLE, GRADIENT_DISABLE, SECONDARY_GRADIENT_DISABLE, \
237 TEXTURING_ENABLE, ALPHATEST_DISABLE, CULL_MODE_ENABLE, \
238 DETAILCOLOR_DISABLE, DETAILALPHA_DISABLE) )
345 static unsigned _reportcount = 0;
347 const char *unabletofogtext =
"WARNING: Unable to fog shader in %s with given blending mode.\r\n";
348 const char *unabletofogmoretext =
"WARNING: Unable to fog additional shaders (further warnings will be suppressed).\r\n";
349 const unsigned maxreportcount = 10;
352 if (_reportcount < maxreportcount) {
356 if (_reportcount == maxreportcount) {
380 Blend(D3DBLEND_ZERO,
false),
381 Blend(D3DBLEND_ONE,
false),
382 Blend(D3DBLEND_SRCALPHA,
true),
383 Blend(D3DBLEND_DESTCOLOR,
true)
388 Blend(D3DBLEND_ZERO,
false),
389 Blend(D3DBLEND_ONE,
false),
390 Blend(D3DBLEND_SRCCOLOR,
false),
391 Blend(D3DBLEND_INVSRCCOLOR,
false),
392 Blend(D3DBLEND_SRCALPHA,
true),
393 Blend(D3DBLEND_INVSRCALPHA,
true)
409void ShaderClass::Apply()
433 ULONG planeMask = 0xffffff;
440 bool blendAlpha =
false;
457 if(sf != D3DBLEND_ONE || df != D3DBLEND_ZERO)
469 unsigned char alphareference = 0x60;
471 if(sf == D3DBLEND_INVSRCALPHA)
536 D3DTEXTUREOP PricOp = D3DTOP_SELECTARG1;
537 DWORD PricArg1 = D3DTA_DIFFUSE;
538 DWORD PricArg2 = D3DTA_DIFFUSE;
540 D3DTEXTUREOP PriaOp = D3DTOP_SELECTARG1;
541 DWORD PriaArg1 = D3DTA_DIFFUSE;
542 DWORD PriaArg2 = D3DTA_DIFFUSE;
544 D3DTEXTUREOP SeccOp = D3DTOP_DISABLE;
545 DWORD SeccArg1 = D3DTA_TEXTURE;
546 DWORD SeccArg2 = D3DTA_CURRENT;
548 D3DTEXTUREOP SecaOp = D3DTOP_DISABLE;
549 DWORD SecaArg1 = D3DTA_TEXTURE;
550 DWORD SecaArg2 = D3DTA_CURRENT;
572 PricOp = D3DTOP_SELECTARG1;
573 PricArg1 = D3DTA_TEXTURE;
574 PricArg2 = D3DTA_CURRENT;
575 PriaOp = D3DTOP_SELECTARG1;
576 PriaArg1 = D3DTA_TEXTURE;
577 PriaArg2 = D3DTA_CURRENT;
581 PricOp = D3DTOP_MODULATE;
582 PricArg1 = D3DTA_TEXTURE;
583 PricArg2 = D3DTA_DIFFUSE;
584 PriaOp = D3DTOP_MODULATE;
585 PriaArg1 = D3DTA_TEXTURE;
586 PriaArg2 = D3DTA_DIFFUSE;
590 if(!(TextureOpCaps & D3DTEXOPCAPS_ADD))
591 PricOp = D3DTOP_MODULATE;
594 PricArg1 = D3DTA_TEXTURE;
595 PricArg2 = D3DTA_DIFFUSE;
596 PriaOp = D3DTOP_MODULATE;
597 PriaArg1 = D3DTA_TEXTURE;
598 PriaArg2 = D3DTA_DIFFUSE;
603 if(TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAP)
605 PricOp=D3DTOP_BUMPENVMAP;
606 PricArg1=D3DTA_TEXTURE;
607 PricArg2=D3DTA_DIFFUSE;
608 PriaOp = D3DTOP_DISABLE;
609 PriaArg1 = D3DTA_TEXTURE;
610 PriaArg2 = D3DTA_CURRENT;
612 PricOp = D3DTOP_SELECTARG1;
613 PricArg1 = D3DTA_DIFFUSE;
614 PricArg2 = D3DTA_DIFFUSE;
615 PriaOp = D3DTOP_SELECTARG1;
616 PriaArg1 = D3DTA_DIFFUSE;
617 PriaArg2 = D3DTA_DIFFUSE;
623 if(TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAPLUMINANCE)
625 PricOp=D3DTOP_BUMPENVMAPLUMINANCE;
626 PricArg1=D3DTA_TEXTURE;
627 PricArg2=D3DTA_DIFFUSE;
628 PriaOp = D3DTOP_DISABLE;
629 PriaArg1 = D3DTA_TEXTURE;
630 PriaArg2 = D3DTA_CURRENT;
632 PricOp = D3DTOP_SELECTARG1;
633 PricArg1 = D3DTA_DIFFUSE;
634 PricArg2 = D3DTA_DIFFUSE;
635 PriaOp = D3DTOP_SELECTARG1;
636 PriaArg1 = D3DTA_DIFFUSE;
637 PriaArg2 = D3DTA_DIFFUSE;
643 if(!(TextureOpCaps & D3DTOP_MODULATE2X))
644 PricOp = D3DTOP_MODULATE;
646 PricOp = D3DTOP_MODULATE2X;
647 PricArg1 = D3DTA_TEXTURE;
648 PricArg2 = D3DTA_DIFFUSE;
649 PriaOp = D3DTOP_MODULATE;
650 PriaArg1 = D3DTA_TEXTURE;
651 PriaArg2 = D3DTA_DIFFUSE;
661 PricOp = D3DTOP_DISABLE;
662 PricArg1 = D3DTA_TEXTURE;
663 PricArg2 = D3DTA_CURRENT;
664 PriaOp = D3DTOP_DISABLE;
665 PriaArg1 = D3DTA_TEXTURE;
666 PriaArg2 = D3DTA_CURRENT;
670 PricOp = D3DTOP_SELECTARG2;
671 PricArg1 = D3DTA_TEXTURE;
672 PricArg2 = D3DTA_DIFFUSE;
673 PriaOp = D3DTOP_SELECTARG2;
674 PriaArg1 = D3DTA_TEXTURE;
675 PriaArg2 = D3DTA_DIFFUSE;
678 PricOp = D3DTOP_SELECTARG2;
679 PricArg1 = D3DTA_TEXTURE;
680 PricArg2 = D3DTA_DIFFUSE;
681 PriaOp = D3DTOP_SELECTARG2;
682 PriaArg1 = D3DTA_TEXTURE;
683 PriaArg2 = D3DTA_DIFFUSE;
700 if(TextureOpCaps & D3DTEXOPCAPS_SELECTARG1)
702 SeccOp = D3DTOP_SELECTARG1;
703 SeccArg1 = D3DTA_TEXTURE;
704 SeccArg2 = D3DTA_CURRENT;
707 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: SELECTARG1\n"));
712 if(TextureOpCaps & D3DTEXOPCAPS_MODULATE)
714 SeccOp = D3DTOP_MODULATE;
715 SeccArg1 = D3DTA_TEXTURE;
716 SeccArg2 = D3DTA_CURRENT;
719 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: MODULATE\n"));
724 if(TextureOpCaps & D3DTEXOPCAPS_ADDSMOOTH)
726 SeccOp = D3DTOP_ADDSMOOTH;
727 SeccArg1 = D3DTA_TEXTURE;
728 SeccArg2 = D3DTA_CURRENT;
729 }
else if(TextureOpCaps & D3DTEXOPCAPS_ADD) {
731 SeccArg1 = D3DTA_TEXTURE;
732 SeccArg2 = D3DTA_CURRENT;
735 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: ADDSMOOTH\n"));
740 if(TextureOpCaps & D3DTEXOPCAPS_ADD)
743 SeccArg1 = D3DTA_TEXTURE;
744 SeccArg2 = D3DTA_CURRENT;
747 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: ADD\n"));
752 if(TextureOpCaps & D3DTEXOPCAPS_SUBTRACT)
754 SeccOp = D3DTOP_SUBTRACT;
755 SeccArg1 = D3DTA_TEXTURE;
756 SeccArg2 = D3DTA_CURRENT;
759 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: SUBTRACT\n"));
764 if(TextureOpCaps & D3DTEXOPCAPS_SUBTRACT)
766 SeccOp = D3DTOP_SUBTRACT;
767 SeccArg1 = D3DTA_CURRENT;
768 SeccArg2 = D3DTA_TEXTURE;
771 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: SUBTRACT\n"));
776 if(TextureOpCaps & D3DTEXOPCAPS_BLENDTEXTUREALPHA)
778 SeccOp = D3DTOP_BLENDTEXTUREALPHA;
779 SeccArg1 = D3DTA_TEXTURE;
780 SeccArg2 = D3DTA_CURRENT;
783 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: BLENDTEXTUREALPHA\n"));
788 if(TextureOpCaps & D3DTEXOPCAPS_BLENDCURRENTALPHA)
790 SeccOp = D3DTOP_BLENDCURRENTALPHA;
791 SeccArg1 = D3DTA_TEXTURE;
792 SeccArg2 = D3DTA_CURRENT;
795 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: BLENDCURRENTALPHA\n"));
800 if (TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED) {
801 SeccOp = D3DTOP_ADDSIGNED;
802 SeccArg1 = D3DTA_TEXTURE;
803 SeccArg2 = D3DTA_CURRENT;
804 }
else if (TextureOpCaps & D3DTEXOPCAPS_ADD) {
806 SeccArg1 = D3DTA_TEXTURE;
807 SeccArg2 = D3DTA_CURRENT;
809 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: ADDSIGNED\n"));
814 if (TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED2X) {
815 SeccOp = D3DTOP_ADDSIGNED2X;
816 SeccArg1 = D3DTA_TEXTURE;
817 SeccArg2 = D3DTA_CURRENT;
818 }
else if (TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED) {
819 SeccOp = D3DTOP_ADDSIGNED;
820 SeccArg1 = D3DTA_TEXTURE;
821 SeccArg2 = D3DTA_CURRENT;
822 }
else if (TextureOpCaps & D3DTEXOPCAPS_ADD) {
824 SeccArg1 = D3DTA_TEXTURE;
825 SeccArg2 = D3DTA_CURRENT;
827 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: ADDSIGNED2X\n"));
832 if(TextureOpCaps & D3DTEXOPCAPS_MODULATE2X) {
833 SeccOp = D3DTOP_MODULATE2X;
834 SeccArg1 = D3DTA_TEXTURE;
835 SeccArg2 = D3DTA_CURRENT;
836 }
else if(TextureOpCaps & D3DTEXOPCAPS_MODULATE) {
837 SeccOp = D3DTOP_MODULATE;
838 SeccArg1 = D3DTA_TEXTURE;
839 SeccArg2 = D3DTA_CURRENT;
842 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: MODULATE2X\n"));
848 SeccOp = D3DTOP_MODULATEALPHA_ADDCOLOR;
849 SeccArg1 = D3DTA_CURRENT;
850 SeccArg2 = D3DTA_TEXTURE;
851 }
else if (TextureOpCaps & D3DTEXOPCAPS_ADD) {
853 SeccArg1 = D3DTA_TEXTURE;
854 SeccArg2 = D3DTA_CURRENT;
856 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: MODULATEALPHA_ADDCOLOR\n"));
868 if(TextureOpCaps & D3DTEXOPCAPS_SELECTARG1)
870 SecaOp = D3DTOP_SELECTARG1;
871 SecaArg1 = D3DTA_TEXTURE;
872 SecaArg2 = D3DTA_CURRENT;
875 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: SELECTARG1\n"));
880 if(TextureOpCaps & D3DTEXOPCAPS_MODULATE)
882 SecaOp = D3DTOP_MODULATE;
883 SecaArg1 = D3DTA_TEXTURE;
884 SecaArg2 = D3DTA_CURRENT;
887 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: MODULATE\n"));
892 if(TextureOpCaps & D3DTEXOPCAPS_ADDSMOOTH)
894 SecaOp = D3DTOP_ADDSMOOTH;
895 SecaArg1 = D3DTA_TEXTURE;
896 SecaArg2 = D3DTA_CURRENT;
899 SNAPSHOT_SAY((
"Warning: Using unsupported texture op: ADDSMOOTH\n"));
905 if ((SeccOp!=D3DTOP_DISABLE) && (SecaOp==D3DTOP_DISABLE)) {
906 SecaOp = D3DTOP_SELECTARG2;
907 SecaArg2 = D3DTA_CURRENT;
908 }
else if ((SeccOp==D3DTOP_DISABLE) && (SecaOp!=D3DTOP_DISABLE)) {
909 SeccOp = D3DTOP_SELECTARG2;
910 SeccArg2 = D3DTA_CURRENT;
915 bool kill_stage_2=
false;
918 if (diff & pri_mask) {
921 if ( voodoo3 && (PricArg2==D3DTA_DIFFUSE) &&
922 ( (SecaOp!=D3DTOP_DISABLE) || (SeccOp!=D3DTOP_DISABLE) )
928 DWORD tex_arg=D3DTA_CURRENT;
930 tex_arg=D3DTA_TEXTURE;
935 if ((PricOp==D3DTOP_SELECTARG1)&&(PricArg1==D3DTA_DIFFUSE)) {
936 WWDEBUG_SAY((
"Wasted Stage 0 in shader-vertex diffuse only"));
941 if (SeccArg2==D3DTA_CURRENT) SeccArg2=D3DTA_DIFFUSE;
942 if (SecaArg2==D3DTA_CURRENT) SecaArg2=D3DTA_DIFFUSE;
954 DX8CALL(SetTextureStageState(2,D3DTSS_COLOROP,PricOp));
955 DX8CALL(SetTextureStageState(2,D3DTSS_COLORARG1,D3DTA_CURRENT));
956 DX8CALL(SetTextureStageState(2,D3DTSS_COLORARG2,D3DTA_DIFFUSE));
957 DX8CALL(SetTextureStageState(2,D3DTSS_ALPHAOP,PriaOp));
958 DX8CALL(SetTextureStageState(2,D3DTSS_ALPHAARG1,D3DTA_CURRENT));
959 DX8CALL(SetTextureStageState(2,D3DTSS_ALPHAARG2,D3DTA_DIFFUSE));
960 DX8CALL(SetTextureStageState(2,D3DTSS_TEXCOORDINDEX,D3DTSS_TCI_PASSTHRU));
967#pragma message("(gth) Generals added a feature here WW3D::Is_Coloring_Enabled() which needs to be merged properly")
971 cArg2=aArg2=D3DTA_TFACTOR;
972 cOp=aOp=D3DTOP_SELECTARG2;
986 if (diff & sec_mask) {
1001 if (voodoo3 && kill_stage_2) {
1002 if ((SeccOp!=D3DTOP_DISABLE)&&(SecaOp!=D3DTOP_DISABLE)) {
1003 DX8CALL(SetTextureStageState(2,D3DTSS_COLOROP,D3DTOP_SELECTARG1));
1004 DX8CALL(SetTextureStageState(2,D3DTSS_COLORARG1,D3DTA_CURRENT));
1005 DX8CALL(SetTextureStageState(2,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1));
1006 DX8CALL(SetTextureStageState(2,D3DTSS_ALPHAARG1,D3DTA_CURRENT));
1008 DX8CALL(SetTextureStageState(2,D3DTSS_COLOROP,D3DTOP_DISABLE));
1009 DX8CALL(SetTextureStageState(2,D3DTSS_ALPHAOP,D3DTOP_DISABLE));
1011 DX8CALL(SetTextureStageState(2,D3DTSS_TEXCOORDINDEX,D3DTSS_TCI_PASSTHRU));
1061 if (onoff ==
true) {
1168 case PASS_NEVER: str+=
"DEPTH_COMPARE:PASS_NEVER | ";
break;
1169 case PASS_LESS: str+=
"DEPTH_COMPARE:PASS_LESS | ";
break;
1170 case PASS_EQUAL: str+=
"DEPTH_COMPARE:PASS_EQUAL | ";
break;
1171 case PASS_LEQUAL: str+=
"DEPTH_COMPARE:PASS_LEQUAL | ";
break;
1172 case PASS_GREATER: str+=
"DEPTH_COMPARE:PASS_GREATER | ";
break;
1173 case PASS_NOTEQUAL: str+=
"DEPTH_COMPARE:PASS_NOTEQUAL | ";
break;
1174 case PASS_GEQUAL: str+=
"DEPTH_COMPARE:PASS_GEQUAL | ";
break;
1175 case PASS_ALWAYS: str+=
"DEPTH_COMPARE:PASS_ALWAYS | ";
break;
1199 case FOG_ENABLE: str+=
"FOG_ENABLE | ";
break;
1201 case FOG_WHITE: str+=
"FOG_WHITE | ";
break;
#define W3DMATERIAL_USE_ALPHA
Blend(D3DBLEND f, bool ab)
D3DCAPS8 const & Get_DX8_Caps() const
unsigned Get_Vendor() const
static const DX8Caps * Get_Current_Caps()
static D3DCOLOR Get_Fog_Color()
static bool Get_Fog_Enable()
static void Set_DX8_Texture_Stage_State(unsigned stage, D3DTEXTURESTAGESTATETYPE state, unsigned value)
static void Set_DX8_Render_State(D3DRENDERSTATETYPE state, unsigned value)
const StringClass & Get_Description(StringClass &str) const
static ShaderClass _PresetOpaqueSpriteShader
static ShaderClass _PresetAdditiveSpriteShader
@ GRADIENT_BUMPENVMAPLUMINANCE
static ShaderClass _PresetAdditive2DShader
static ShaderClass _PresetATestBlendSpriteShader
static ShaderClass _PresetBumpenvmapShader
static ShaderClass _PresetOpaqueShader
DepthCompareType Get_Depth_Compare(void) const
@ DETAILCOLOR_ADDSIGNED2X
@ DETAILCOLOR_DETAILBLEND
@ DETAILCOLOR_MODALPHAADDCOLOR
static ShaderClass _PresetAlphaSpriteShader
static ShaderClass _PresetATestBlend2DShader
static ShaderClass _PresetATestSpriteShader
void Set_Src_Blend_Func(SrcBlendFuncType x)
@ MASK_POSTDETAILCOLORFUNC
@ MASK_POSTDETAILALPHAFUNC
static bool Is_Backface_Culling_Inverted(void)
static ShaderClass _PresetATest2DShader
static ShaderClass _PresetAlpha2DShader
static ShaderClass _PresetAlphaSolidShader
FogFuncType Get_Fog_Func(void) const
DetailColorFuncType Get_Post_Detail_Color_Func(void) const
static ShaderClass _PresetMultiplicativeSpriteShader
void Set_Depth_Mask(DepthMaskType x)
static ShaderClass _PresetMultiplicative2DShader
static ShaderClass _PresetScreen2DShader
DetailAlphaFuncType Get_Post_Detail_Alpha_Func(void) const
TexturingType Get_Texturing(void) const
void Init_From_Material3(const W3dMaterial3Struct &mat3)
NPatchEnableType Get_NPatch_Enable(void) const
SecGradientType Get_Secondary_Gradient(void) const
void Set_Fog_Func(FogFuncType x)
DepthMaskType Get_Depth_Mask(void) const
CullModeType Get_Cull_Mode(void) const
static ShaderClass _PresetAdditiveSolidShader
static ShaderClass _PresetOpaque2DShader
PriGradientType Get_Primary_Gradient(void) const
static ShaderClass _PresetAlphaShader
static void Invert_Backface_Culling(bool onoff)
static ShaderClass _PresetAdditiveShader
SrcBlendFuncType Get_Src_Blend_Func(void) const
ColorMaskType Get_Color_Mask(void) const
void Set_Dst_Blend_Func(DstBlendFuncType x)
@ SECONDARY_GRADIENT_ENABLE
@ SECONDARY_GRADIENT_DISABLE
void Enable_Fog(const char *source)
static unsigned long CurrentShader
StaticSortCategoryType Get_SS_Category(void) const
DstBlendFuncType Get_Dst_Blend_Func(void) const
void Report_Unable_To_Fog(const char *source)
@ SRCBLEND_ONE_MINUS_SRC_ALPHA
static ShaderClass _PresetScreenSpriteShader
int Guess_Sort_Level(void) const
AlphaTestType Get_Alpha_Test(void) const
static ShaderClass _PresetMultiplicativeShader
@ DSTBLEND_ONE_MINUS_SRC_COLOR
@ DSTBLEND_ONE_MINUS_SRC_ALPHA
static ShaderClass _PresetOpaqueSolidShader
static unsigned Get_NPatches_Level()
static bool Is_Coloring_Enabled()
#define SC_ADDITIVE_SOLID
unsigned long _PolygonCullMode
#define SC_ATESTBLEND_SPRITE
const Blend dstBlendLUT[ShaderClass::DSTBLEND_MAX]
#define SC_MULTIPLICATIVE
const Blend srcBlendLUT[ShaderClass::SRCBLEND_MAX]