コード例 #1
0
ファイル: RenderMode.cs プロジェクト: sycomix/F3DEX2Decoder
        public RenderMode(BlenderColorInput P, BlenderAlphaInput A, BlenderColorInput M, BlenderAlphaInput B, RenderModeFlags flags)
        {
            HalfMode tmpMode0 = new HalfMode(flags, P, A, M, B);
            HalfMode tmpMode1 = new HalfMode(flags, P, A, M, B);

            (Mode0, Mode1, Known) = FindModes(tmpMode0, tmpMode1);
        }
コード例 #2
0
ファイル: RenderMode.cs プロジェクト: sycomix/F3DEX2Decoder
        public RenderMode(ulong words)
        {
            int[] BlendMode0 = new int[4], BlendMode1 = new int[4];
            Words = words;

            RenderModeFlags flags = (RenderModeFlags)((int)words & ((1 << MODE_NAMES.Length) - 1));

            for (int i = 0; i < BLENDER0_SHIFTS.Length; i++)
            {
                BlendMode0[i] = (int)(words >> BLENDER0_SHIFTS[i]) & 0b11;
            }

            for (int i = 0; i < BLENDER1_SHIFTS.Length; i++)
            {
                BlendMode1[i] = (int)(words >> BLENDER1_SHIFTS[i]) & 0b11;
            }

            HalfMode tmpMode0 = new HalfMode(flags,
                                             (BlenderColorInput)BlendMode0[0],
                                             (BlenderAlphaInput)BlendMode0[1],
                                             (BlenderColorInput)BlendMode0[2],
                                             (BlenderAlphaInput)BlendMode0[3]);

            HalfMode tmpMode1 = new HalfMode(flags,
                                             (BlenderColorInput)BlendMode1[0],
                                             (BlenderAlphaInput)BlendMode1[1],
                                             (BlenderColorInput)BlendMode1[2],
                                             (BlenderAlphaInput)BlendMode1[3]);

            (Mode0, Mode1, Known) = FindModes(tmpMode0, tmpMode1);
        }
コード例 #3
0
ファイル: RenderMode.cs プロジェクト: sycomix/F3DEX2Decoder
        public RenderMode(BlenderColorInput P0, BlenderAlphaInput A0, BlenderColorInput M0, BlenderAlphaInput B0,
                          BlenderColorInput P1, BlenderAlphaInput A1, BlenderColorInput M1, BlenderAlphaInput B1,
                          RenderModeFlags flags)
        {
            HalfMode tmpMode0 = new HalfMode(flags, P0, A0, M0, B0);
            HalfMode tmpMode1 = new HalfMode(flags, P1, A1, M1, B1);

            (Mode0, Mode1, Known) = FindModes(tmpMode0, tmpMode1);
        }
コード例 #4
0
ファイル: RenderMode.cs プロジェクト: sycomix/F3DEX2Decoder
        private static (HalfMode, HalfMode, bool) FindModes(HalfMode tmpMode0, HalfMode tmpMode1)
        {
            bool found0 = HalfMode.BASE_MODE_NAMES.TryGetValue(tmpMode0, out string name0);
            bool found1 = HalfMode.BASE_MODE_NAMES.TryGetValue(tmpMode1, out string name1);

            // If we found one but not the other, do a relaxed search for the second
            if (found0 && !found1)
            {
                (tmpMode1, found1) = FindReplacement(tmpMode1, tmpMode0);
            }
            else if (!found0 && found1)
            {
                (tmpMode0, found0) = FindReplacement(tmpMode0, tmpMode1);
            }

            return(tmpMode0, tmpMode1, found0&& found1);
        }
コード例 #5
0
ファイル: RenderMode.cs プロジェクト: sycomix/F3DEX2Decoder
 private static (HalfMode, bool) FindReplacement(HalfMode toReplace, HalfMode otherHalf)
 {
     foreach (var kvp in HalfMode.BASE_MODE_NAMES)
     {
         HalfMode        modeToCheck   = kvp.Key;
         RenderModeFlags combinedFlags = modeToCheck.Flags | otherHalf.Flags;
         if (combinedFlags == otherHalf.Flags)
         {
             if (modeToCheck.P == toReplace.P &&
                 modeToCheck.M == toReplace.M &&
                 modeToCheck.A == toReplace.A &&
                 modeToCheck.B == toReplace.B)
             {
                 return(modeToCheck, true);
             }
         }
     }
     return(toReplace, false);
 }