@@ -531,83 +531,100 @@ void ShaderClass::Apply()
531
531
return ;
532
532
}
533
533
534
- if (diff & (ShaderClass::MASK_PRIGRADIENT|ShaderClass::MASK_TEXTURING))
535
- {
536
- D3DTEXTUREOP cOp = D3DTOP_SELECTARG1;
537
- D3DTEXTUREOP aOp = D3DTOP_SELECTARG1;
538
- DWORD cArg1 = D3DTA_DIFFUSE, cArg2 = D3DTA_DIFFUSE;
539
- DWORD aArg1 = D3DTA_DIFFUSE, aArg2 = D3DTA_DIFFUSE;
534
+ // Defaults
535
+
536
+ D3DTEXTUREOP PricOp = D3DTOP_SELECTARG1;
537
+ DWORD PricArg1 = D3DTA_DIFFUSE;
538
+ DWORD PricArg2 = D3DTA_DIFFUSE;
539
+
540
+ D3DTEXTUREOP PriaOp = D3DTOP_SELECTARG1;
541
+ DWORD PriaArg1 = D3DTA_DIFFUSE;
542
+ DWORD PriaArg2 = D3DTA_DIFFUSE;
543
+
544
+ D3DTEXTUREOP SeccOp = D3DTOP_DISABLE;
545
+ DWORD SeccArg1 = D3DTA_TEXTURE;
546
+ DWORD SeccArg2 = D3DTA_CURRENT;
547
+
548
+ D3DTEXTUREOP SecaOp = D3DTOP_DISABLE;
549
+ DWORD SecaArg1 = D3DTA_TEXTURE;
550
+ DWORD SecaArg2 = D3DTA_CURRENT;
540
551
552
+ int pri_mask=ShaderClass::MASK_PRIGRADIENT|ShaderClass::MASK_TEXTURING;
553
+ int sec_mask=ShaderClass::MASK_POSTDETAILCOLORFUNC|ShaderClass::MASK_TEXTURING;
554
+ int seca_mask=ShaderClass::MASK_POSTDETAILALPHAFUNC|ShaderClass::MASK_TEXTURING;
555
+
556
+ if (diff & pri_mask)
557
+ {
541
558
if (Get_Texturing () == ShaderClass::TEXTURING_ENABLE)
542
559
{
543
560
switch (Get_Primary_Gradient ())
544
561
{
545
562
case ShaderClass::GRADIENT_DISABLE:
546
563
// Decal
547
- cOp = D3DTOP_SELECTARG1;
548
- cArg1 = D3DTA_TEXTURE;
549
- cArg2 = D3DTA_CURRENT;
550
- aOp = D3DTOP_SELECTARG1;
551
- aArg1 = D3DTA_TEXTURE;
552
- aArg2 = D3DTA_CURRENT;
564
+ PricOp = D3DTOP_SELECTARG1;
565
+ PricArg1 = D3DTA_TEXTURE;
566
+ PricArg2 = D3DTA_CURRENT;
567
+ PriaOp = D3DTOP_SELECTARG1;
568
+ PriaArg1 = D3DTA_TEXTURE;
569
+ PriaArg2 = D3DTA_CURRENT;
553
570
break ;
554
571
default :
555
572
case ShaderClass::GRADIENT_MODULATE:
556
573
// Modulate Alpha
557
- cOp = D3DTOP_MODULATE;
558
- cArg1 = D3DTA_TEXTURE;
559
- cArg2 = D3DTA_DIFFUSE;
560
- aOp = D3DTOP_MODULATE;
561
- aArg1 = D3DTA_TEXTURE;
562
- aArg2 = D3DTA_DIFFUSE;
574
+ PricOp = D3DTOP_MODULATE;
575
+ PricArg1 = D3DTA_TEXTURE;
576
+ PricArg2 = D3DTA_DIFFUSE;
577
+ PriaOp = D3DTOP_MODULATE;
578
+ PriaArg1 = D3DTA_TEXTURE;
579
+ PriaArg2 = D3DTA_DIFFUSE;
563
580
break ;
564
581
case ShaderClass::GRADIENT_ADD:
565
582
if (!(TextureOpCaps & D3DTEXOPCAPS_ADD))
566
- cOp = D3DTOP_MODULATE;
583
+ PricOp = D3DTOP_MODULATE;
567
584
else
568
- cOp = D3DTOP_ADD;
569
- cArg1 = D3DTA_TEXTURE;
570
- cArg2 = D3DTA_DIFFUSE;
571
- aOp = D3DTOP_MODULATE;
572
- aArg1 = D3DTA_TEXTURE;
573
- aArg2 = D3DTA_DIFFUSE;
585
+ PricOp = D3DTOP_ADD;
586
+ PricArg1 = D3DTA_TEXTURE;
587
+ PricArg2 = D3DTA_DIFFUSE;
588
+ PriaOp = D3DTOP_MODULATE;
589
+ PriaArg1 = D3DTA_TEXTURE;
590
+ PriaArg2 = D3DTA_DIFFUSE;
574
591
break ;
575
592
// Bump map is a hack currently as we only have two stages in use!
576
593
case ShaderClass::GRADIENT_BUMPENVMAP:
577
594
if (TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAP)
578
595
{
579
- cOp =D3DTOP_BUMPENVMAP;
580
- cArg1 =D3DTA_TEXTURE;
581
- cArg2 =D3DTA_DIFFUSE;
582
- aOp = D3DTOP_DISABLE;
583
- aArg1 = D3DTA_TEXTURE;
584
- aArg2 = D3DTA_CURRENT;
596
+ PricOp =D3DTOP_BUMPENVMAP;
597
+ PricArg1 =D3DTA_TEXTURE;
598
+ PricArg2 =D3DTA_DIFFUSE;
599
+ PriaOp = D3DTOP_DISABLE;
600
+ PriaArg1 = D3DTA_TEXTURE;
601
+ PriaArg2 = D3DTA_CURRENT;
585
602
}
586
603
break ;
587
604
588
605
// Bump map is a hack currently as we only have two stages in use!
589
606
case ShaderClass::GRADIENT_BUMPENVMAPLUMINANCE:
590
607
if (TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAPLUMINANCE)
591
608
{
592
- cOp =D3DTOP_BUMPENVMAPLUMINANCE;
593
- cArg1 =D3DTA_TEXTURE;
594
- cArg2 =D3DTA_DIFFUSE;
595
- aOp = D3DTOP_DISABLE;
596
- aArg1 = D3DTA_TEXTURE;
597
- aArg2 = D3DTA_CURRENT;
609
+ PricOp =D3DTOP_BUMPENVMAPLUMINANCE;
610
+ PricArg1 =D3DTA_TEXTURE;
611
+ PricArg2 =D3DTA_DIFFUSE;
612
+ PriaOp = D3DTOP_DISABLE;
613
+ PriaArg1 = D3DTA_TEXTURE;
614
+ PriaArg2 = D3DTA_CURRENT;
598
615
}
599
616
break ;
600
617
601
618
// Bump map is a hack currently as we only have two stages in use!
602
619
case ShaderClass::GRADIENT_DOTPRODUCT3:
603
620
if (TextureOpCaps & D3DTEXOPCAPS_DOTPRODUCT3)
604
621
{
605
- cOp= D3DTOP_DOTPRODUCT3;
606
- cArg1= D3DTA_TEXTURE;
607
- cArg2= D3DTA_DIFFUSE;
608
- aOp = D3DTOP_DISABLE;
609
- aArg1 = D3DTA_TEXTURE;
610
- aArg2 = D3DTA_CURRENT;
622
+ PricOp = D3DTOP_DOTPRODUCT3;
623
+ PricArg1 = D3DTA_TEXTURE;
624
+ PricArg2 = D3DTA_DIFFUSE;
625
+ PriaOp = D3DTOP_DISABLE;
626
+ PriaArg1 = D3DTA_TEXTURE;
627
+ PriaArg2 = D3DTA_CURRENT;
611
628
}
612
629
break ;
613
630
}
@@ -617,54 +634,50 @@ void ShaderClass::Apply()
617
634
switch (Get_Primary_Gradient ())
618
635
{
619
636
case ShaderClass::GRADIENT_DISABLE:
620
- cOp = D3DTOP_DISABLE;
621
- cArg1 = D3DTA_TEXTURE;
622
- cArg2 = D3DTA_CURRENT;
623
- aOp = D3DTOP_DISABLE;
624
- aArg1 = D3DTA_TEXTURE;
625
- aArg2 = D3DTA_CURRENT;
637
+ PricOp = D3DTOP_DISABLE;
638
+ PricArg1 = D3DTA_TEXTURE;
639
+ PricArg2 = D3DTA_CURRENT;
640
+ PriaOp = D3DTOP_DISABLE;
641
+ PriaArg1 = D3DTA_TEXTURE;
642
+ PriaArg2 = D3DTA_CURRENT;
626
643
break ;
627
644
default :
628
645
case ShaderClass::GRADIENT_MODULATE:
629
- cOp = D3DTOP_SELECTARG2;
630
- cArg1 = D3DTA_TEXTURE;
631
- cArg2 = D3DTA_DIFFUSE;
632
- aOp = D3DTOP_SELECTARG2;
633
- aArg1 = D3DTA_TEXTURE;
634
- aArg2 = D3DTA_DIFFUSE;
646
+ PricOp = D3DTOP_SELECTARG2;
647
+ PricArg1 = D3DTA_TEXTURE;
648
+ PricArg2 = D3DTA_DIFFUSE;
649
+ PriaOp = D3DTOP_SELECTARG2;
650
+ PriaArg1 = D3DTA_TEXTURE;
651
+ PriaArg2 = D3DTA_DIFFUSE;
635
652
break ;
636
653
case ShaderClass::GRADIENT_ADD:
637
- cOp = D3DTOP_SELECTARG2;
638
- cArg1 = D3DTA_TEXTURE;
639
- cArg2 = D3DTA_DIFFUSE;
640
- aOp = D3DTOP_SELECTARG2;
641
- aArg1 = D3DTA_TEXTURE;
642
- aArg2 = D3DTA_DIFFUSE;
654
+ PricOp = D3DTOP_SELECTARG2;
655
+ PricArg1 = D3DTA_TEXTURE;
656
+ PricArg2 = D3DTA_DIFFUSE;
657
+ PriaOp = D3DTOP_SELECTARG2;
658
+ PriaArg1 = D3DTA_TEXTURE;
659
+ PriaArg2 = D3DTA_DIFFUSE;
643
660
break ;
644
661
}
645
662
}
646
663
647
664
if (WW3D::Is_Coloring_Enabled ())
648
665
{
649
- cArg2=aArg2 =D3DTA_TFACTOR;
650
- cOp=aOp =D3DTOP_SELECTARG2;
666
+ PricArg2=PriaArg2 =D3DTA_TFACTOR;
667
+ PricOp=PriaOp =D3DTOP_SELECTARG2;
651
668
}
652
669
653
- DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_COLOROP,cOp );
654
- DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_COLORARG1,cArg1 );
655
- DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_COLORARG2,cArg2 );
656
- DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_ALPHAOP,aOp );
657
- DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_ALPHAARG1,aArg1 );
658
- DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_ALPHAARG2,aArg2 );
670
+ DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_COLOROP,PricOp );
671
+ DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_COLORARG1,PricArg1 );
672
+ DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_COLORARG2,PricArg2 );
673
+ DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_ALPHAOP,PriaOp );
674
+ DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_ALPHAARG1,PriaArg1 );
675
+ DX8Wrapper::Set_DX8_Texture_Stage_State (0 ,D3DTSS_ALPHAARG2,PriaArg2 );
659
676
diff &= ~(ShaderClass::MASK_PRIGRADIENT);
660
677
}
661
678
662
- if (diff & (ShaderClass::MASK_POSTDETAILCOLORFUNC|ShaderClass::MASK_TEXTURING) )
679
+ if (diff & sec_mask )
663
680
{
664
- D3DTEXTUREOP cOp = D3DTOP_DISABLE;
665
- DWORD cArg1 = D3DTA_TEXTURE;
666
- DWORD cArg2 = D3DTA_CURRENT;
667
-
668
681
if (Get_Texturing ()== ShaderClass::TEXTURING_ENABLE)
669
682
{
670
683
switch (Get_Post_Detail_Color_Func ())
@@ -676,88 +689,84 @@ void ShaderClass::Apply()
676
689
case ShaderClass::DETAILCOLOR_DETAIL:
677
690
if (TextureOpCaps & D3DTEXOPCAPS_MODULATE)
678
691
{
679
- cOp = D3DTOP_SELECTARG1;
680
- cArg1 = D3DTA_TEXTURE;
681
- cArg2 = D3DTA_CURRENT;
692
+ SeccOp = D3DTOP_SELECTARG1;
693
+ SeccArg1 = D3DTA_TEXTURE;
694
+ SeccArg2 = D3DTA_CURRENT;
682
695
}
683
696
break ;
684
697
685
698
case ShaderClass::DETAILCOLOR_SCALE:
686
699
if (TextureOpCaps & D3DTEXOPCAPS_MODULATE)
687
700
{
688
- cOp = D3DTOP_MODULATE;
689
- cArg1 = D3DTA_TEXTURE;
690
- cArg2 = D3DTA_CURRENT;
701
+ SeccOp = D3DTOP_MODULATE;
702
+ SeccArg1 = D3DTA_TEXTURE;
703
+ SeccArg2 = D3DTA_CURRENT;
691
704
}
692
705
break ;
693
706
694
707
case ShaderClass::DETAILCOLOR_INVSCALE:
695
708
if (TextureOpCaps & D3DTEXOPCAPS_ADDSMOOTH)
696
709
{
697
- cOp = D3DTOP_ADDSMOOTH;
698
- cArg1 = D3DTA_TEXTURE;
699
- cArg2 = D3DTA_CURRENT;
710
+ SeccOp = D3DTOP_ADDSMOOTH;
711
+ SeccArg1 = D3DTA_TEXTURE;
712
+ SeccArg2 = D3DTA_CURRENT;
700
713
}
701
714
break ;
702
715
703
716
case ShaderClass::DETAILCOLOR_ADD:
704
717
if (TextureOpCaps & D3DTEXOPCAPS_ADD)
705
718
{
706
- cOp = D3DTOP_ADD;
707
- cArg1 = D3DTA_TEXTURE;
708
- cArg2 = D3DTA_CURRENT;
719
+ SeccOp = D3DTOP_ADD;
720
+ SeccArg1 = D3DTA_TEXTURE;
721
+ SeccArg2 = D3DTA_CURRENT;
709
722
}
710
723
break ;
711
724
712
725
case ShaderClass::DETAILCOLOR_SUB:
713
726
if (TextureOpCaps & D3DTEXOPCAPS_SUBTRACT)
714
727
{
715
- cOp = D3DTOP_SUBTRACT;
716
- cArg1 = D3DTA_TEXTURE;
717
- cArg2 = D3DTA_CURRENT;
728
+ SeccOp = D3DTOP_SUBTRACT;
729
+ SeccArg1 = D3DTA_TEXTURE;
730
+ SeccArg2 = D3DTA_CURRENT;
718
731
}
719
732
break ;
720
733
721
734
case ShaderClass::DETAILCOLOR_SUBR:
722
735
if (TextureOpCaps & D3DTEXOPCAPS_SUBTRACT)
723
736
{
724
- cOp = D3DTOP_SUBTRACT;
725
- cArg1 = D3DTA_CURRENT;
726
- cArg2 = D3DTA_TEXTURE;
737
+ SeccOp = D3DTOP_SUBTRACT;
738
+ SeccArg1 = D3DTA_CURRENT;
739
+ SeccArg2 = D3DTA_TEXTURE;
727
740
}
728
741
break ;
729
742
730
743
case ShaderClass::DETAILCOLOR_BLEND:
731
744
if (TextureOpCaps & D3DTEXOPCAPS_BLENDTEXTUREALPHA)
732
745
{
733
- cOp = D3DTOP_BLENDTEXTUREALPHA;
734
- cArg1 = D3DTA_TEXTURE;
735
- cArg2 = D3DTA_CURRENT;
746
+ SeccOp = D3DTOP_BLENDTEXTUREALPHA;
747
+ SeccArg1 = D3DTA_TEXTURE;
748
+ SeccArg2 = D3DTA_CURRENT;
736
749
}
737
750
break ;
738
751
739
752
case ShaderClass::DETAILCOLOR_DETAILBLEND:
740
753
if (TextureOpCaps & D3DTEXOPCAPS_BLENDCURRENTALPHA)
741
754
{
742
- cOp = D3DTOP_BLENDCURRENTALPHA;
743
- cArg1 = D3DTA_TEXTURE;
744
- cArg2 = D3DTA_CURRENT;
755
+ SeccOp = D3DTOP_BLENDCURRENTALPHA;
756
+ SeccArg1 = D3DTA_TEXTURE;
757
+ SeccArg2 = D3DTA_CURRENT;
745
758
}
746
759
break ;
747
760
}
748
761
}
749
- DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_COLOROP,cOp );
750
- DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_COLORARG1,cArg1 );
751
- DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_COLORARG2,cArg2 );
762
+ DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_COLOROP,SeccOp );
763
+ DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_COLORARG1,SeccArg1 );
764
+ DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_COLORARG2,SeccArg2 );
752
765
}
753
766
diff &= ~(ShaderClass::MASK_POSTDETAILCOLORFUNC);
754
767
755
- if (diff & (ShaderClass::MASK_POSTDETAILALPHAFUNC|ShaderClass::MASK_TEXTURING) )
768
+ if (diff & seca_mask )
756
769
{
757
- D3DTEXTUREOP aOp = D3DTOP_DISABLE;
758
- DWORD aArg1 = D3DTA_TEXTURE;
759
- DWORD aArg2 = D3DTA_CURRENT;
760
-
761
770
if (Get_Texturing () == ShaderClass::TEXTURING_ENABLE)
762
771
{
763
772
switch (Get_Post_Detail_Alpha_Func ())
@@ -769,34 +778,34 @@ void ShaderClass::Apply()
769
778
case ShaderClass::DETAILALPHA_DETAIL:
770
779
if (TextureOpCaps & D3DTEXOPCAPS_MODULATE)
771
780
{
772
- aOp = D3DTOP_SELECTARG1;
773
- aArg1 = D3DTA_TEXTURE;
774
- aArg2 = D3DTA_CURRENT;
781
+ SecaOp = D3DTOP_SELECTARG1;
782
+ SecaArg1 = D3DTA_TEXTURE;
783
+ SecaArg2 = D3DTA_CURRENT;
775
784
}
776
785
break ;
777
786
778
787
case ShaderClass::DETAILALPHA_SCALE:
779
788
if (TextureOpCaps & D3DTEXOPCAPS_MODULATE)
780
789
{
781
- aOp = D3DTOP_MODULATE;
782
- aArg1 = D3DTA_TEXTURE;
783
- aArg2 = D3DTA_CURRENT;
790
+ SecaOp = D3DTOP_MODULATE;
791
+ SecaArg1 = D3DTA_TEXTURE;
792
+ SecaArg2 = D3DTA_CURRENT;
784
793
}
785
794
break ;
786
795
787
796
case ShaderClass::DETAILALPHA_INVSCALE:
788
797
if (TextureOpCaps & D3DTEXOPCAPS_ADDSMOOTH)
789
798
{
790
- aOp = D3DTOP_ADDSMOOTH;
791
- aArg1 = D3DTA_TEXTURE;
792
- aArg2 = D3DTA_CURRENT;
799
+ SecaOp = D3DTOP_ADDSMOOTH;
800
+ SecaArg1 = D3DTA_TEXTURE;
801
+ SecaArg2 = D3DTA_CURRENT;
793
802
}
794
803
break ;
795
804
}
796
805
}
797
- DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_ALPHAOP,aOp );
798
- DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_ALPHAARG1,aArg1 );
799
- DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_ALPHAARG2,aArg2 );
806
+ DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_ALPHAOP,SecaOp );
807
+ DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_ALPHAARG1,SecaArg1 );
808
+ DX8Wrapper::Set_DX8_Texture_Stage_State (1 ,D3DTSS_ALPHAARG2,SecaArg2 );
800
809
}
801
810
diff &= ~(ShaderClass::MASK_POSTDETAILALPHAFUNC);
802
811
diff &= ~(ShaderClass::MASK_TEXTURING);
0 commit comments