using System; using JetBrains.Annotations; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; namespace Robust.Shared.Graphics; /// /// Sample flags for textures. /// These are separate from , /// because it is possible to create "proxies" to existing textures /// with different sampling parameters than the base texture. /// [PublicAPI] public struct TextureSampleParameters : IEquatable { // NOTE: If somebody is gonna add support for 3D/1D textures, change this doc comment. // See the note on this page for why: https://www.khronos.org/opengl/wiki/Sampler_Object#Filtering /// /// If true, use bi-linear texture filtering if the texture cannot be rendered 1:1 /// public bool Filter { get; set; } /// /// Controls how to wrap the texture if texture coordinates outside 0-1 are accessed. /// public TextureWrapMode WrapMode { get; set; } public static TextureSampleParameters FromYaml(YamlMappingNode node) { var wrap = TextureWrapMode.None; var filter = false; if (node.TryGetNode("filter", out var filterNode)) { filter = filterNode.AsBool(); } if (node.TryGetNode("wrap", out var wrapNode)) { switch (wrapNode.AsString()) { case "none": wrap = TextureWrapMode.None; break; case "repeat": wrap = TextureWrapMode.Repeat; break; case "mirrored_repeat": wrap = TextureWrapMode.MirroredRepeat; break; default: throw new ArgumentException("Not a valid wrap mode."); } } return new TextureSampleParameters {Filter = filter, WrapMode = wrap}; } public static readonly TextureSampleParameters Default = new() { Filter = false, WrapMode = TextureWrapMode.None }; public bool Equals(TextureSampleParameters other) { return Filter == other.Filter && WrapMode == other.WrapMode; } public override bool Equals(object? obj) { return obj is TextureSampleParameters other && Equals(other); } public override int GetHashCode() { return HashCode.Combine(Filter, (int) WrapMode); } public static bool operator ==(TextureSampleParameters left, TextureSampleParameters right) { return left.Equals(right); } public static bool operator !=(TextureSampleParameters left, TextureSampleParameters right) { return !left.Equals(right); } }