| 739 | #endif |
| 740 | |
| 741 | static void InitBlenderMode() |
| 742 | { |
| 743 | u32 cycle_type = gRDPOtherMode.cycle_type; |
| 744 | u32 cvg_x_alpha = gRDPOtherMode.cvg_x_alpha; |
| 745 | u32 alpha_cvg_sel = gRDPOtherMode.alpha_cvg_sel; |
| 746 | u32 blendmode = gRDPOtherMode.blender; |
| 747 | |
| 748 | // NB: If we're running in 1cycle mode, ignore the 2nd cycle. |
| 749 | u32 active_mode = (cycle_type == CYCLE_2CYCLE) ? blendmode : (blendmode & 0xcccc); |
| 750 | |
| 751 | enum BlendType |
| 752 | { |
| 753 | kBlendModeOpaque, |
| 754 | kBlendModeAlphaTrans, |
| 755 | kBlendModeFade, |
| 756 | }; |
| 757 | BlendType type = kBlendModeOpaque; |
| 758 | |
| 759 | // FIXME(strmnnrmn): lots of these need fog! |
| 760 | |
| 761 | switch (active_mode) |
| 762 | { |
| 763 | case 0x0040: // In * AIn + Mem * 1-A |
| 764 | // MarioKart (spinning logo). |
| 765 | type = kBlendModeAlphaTrans; |
| 766 | break; |
| 767 | case 0x0050: // In * AIn + Mem * 1-A | In * AIn + Mem * 1-A |
| 768 | // Extreme-G. |
| 769 | type = kBlendModeAlphaTrans; |
| 770 | break; |
| 771 | case 0x0440: // In * AFog + Mem * 1-A |
| 772 | // Bomberman64. alpha_cvg_sel: 1 cvg_x_alpha: 1 |
| 773 | type = kBlendModeAlphaTrans; |
| 774 | break; |
| 775 | case 0x04d0: // In * AFog + Fog * 1-A | In * AIn + Mem * 1-A |
| 776 | // Conker. |
| 777 | type = kBlendModeAlphaTrans; |
| 778 | break; |
| 779 | case 0x0150: // In * AIn + Mem * 1-A | In * AFog + Mem * 1-A |
| 780 | // Spiderman. |
| 781 | type = kBlendModeAlphaTrans; |
| 782 | break; |
| 783 | case 0x0c08: // In * 0 + In * 1 |
| 784 | // MarioKart (spinning logo) |
| 785 | // This blend mode doesn't use the alpha value |
| 786 | type = kBlendModeOpaque; |
| 787 | break; |
| 788 | case 0x0c18: // In * 0 + In * 1 | In * AIn + Mem * 1-A |
| 789 | // StarFox main menu. |
| 790 | type = kBlendModeAlphaTrans; |
| 791 | break; |
| 792 | case 0x0c40: // In * 0 + Mem * 1-A |
| 793 | // Extreme-G. |
| 794 | type = kBlendModeFade; |
| 795 | break; |
| 796 | case 0x0f0a: // In * 0 + In * 1 | In * 0 + In * 1 |
| 797 | // Zelda OoT. |
| 798 | type = kBlendModeOpaque; |
no test coverage detected