/// <summary> /// This performs a strict comparison, used to check if this texture is equal to the one supplied. /// </summary> /// <param name="info">Texture information to compare against</param> /// <param name="flags">Comparison flags</param> /// <returns>A value indicating how well this texture matches the given info</returns> public TextureMatchQuality IsExactMatch(TextureInfo info, TextureSearchFlags flags) { TextureMatchQuality matchQuality = TextureCompatibility.FormatMatches(Info, info, (flags & TextureSearchFlags.ForSampler) != 0, (flags & TextureSearchFlags.ForCopy) != 0); if (matchQuality == TextureMatchQuality.NoMatch) { return(matchQuality); } if (!TextureCompatibility.LayoutMatches(Info, info)) { return(TextureMatchQuality.NoMatch); } if (!TextureCompatibility.SizeMatches(Info, info, (flags & TextureSearchFlags.Strict) == 0)) { return(TextureMatchQuality.NoMatch); } if ((flags & TextureSearchFlags.ForSampler) != 0 || (flags & TextureSearchFlags.Strict) != 0) { if (!TextureCompatibility.SamplerParamsMatches(Info, info)) { return(TextureMatchQuality.NoMatch); } } if ((flags & TextureSearchFlags.ForCopy) != 0) { bool msTargetCompatible = Info.Target == Target.Texture2DMultisample && info.Target == Target.Texture2D; if (!msTargetCompatible && !TextureCompatibility.TargetAndSamplesCompatible(Info, info)) { return(TextureMatchQuality.NoMatch); } } else if (!TextureCompatibility.TargetAndSamplesCompatible(Info, info)) { return(TextureMatchQuality.NoMatch); } return(Info.Address == info.Address && Info.Levels == info.Levels ? matchQuality : TextureMatchQuality.NoMatch); }
/// <summary> /// This performs a strict comparison, used to check if this texture is equal to the one supplied. /// </summary> /// <param name="info">Texture information to compare against</param> /// <param name="flags">Comparison flags</param> /// <returns>True if the textures are strictly equal or similar, false otherwise</returns> public bool IsPerfectMatch(TextureInfo info, TextureSearchFlags flags) { if (!TextureCompatibility.FormatMatches(Info, info, (flags & TextureSearchFlags.ForSampler) != 0, (flags & TextureSearchFlags.ForCopy) != 0)) { return(false); } if (!TextureCompatibility.LayoutMatches(Info, info)) { return(false); } if (!TextureCompatibility.SizeMatches(Info, info, (flags & TextureSearchFlags.Strict) == 0)) { return(false); } if ((flags & TextureSearchFlags.ForSampler) != 0 || (flags & TextureSearchFlags.Strict) != 0) { if (!TextureCompatibility.SamplerParamsMatches(Info, info)) { return(false); } } if ((flags & TextureSearchFlags.ForCopy) != 0) { bool msTargetCompatible = Info.Target == Target.Texture2DMultisample && info.Target == Target.Texture2D; if (!msTargetCompatible && !TextureCompatibility.TargetAndSamplesCompatible(Info, info)) { return(false); } } else if (!TextureCompatibility.TargetAndSamplesCompatible(Info, info)) { return(false); } return(Info.Address == info.Address && Info.Levels == info.Levels); }