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); }
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); }
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); }
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); }
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); }