namespace Ghost.RenderGraph.Concept;
///
/// Opaque handle to a render graph texture resource.
///
public readonly struct RenderGraphTextureHandle : IEquatable
{
public readonly int Index;
public readonly int Version;
internal readonly string InternalName;
public RenderGraphTextureHandle(int index, int version, string name = "")
{
Index = index;
Version = version;
InternalName = name;
}
public string Name => InternalName;
public bool IsValid() => Index >= 0;
public readonly bool Equals(RenderGraphTextureHandle other) => Index == other.Index && Version == other.Version;
public override readonly bool Equals(object? obj) => obj is RenderGraphTextureHandle other && Equals(other);
public override readonly int GetHashCode() => HashCode.Combine(Index, Version);
public static bool operator ==(RenderGraphTextureHandle left, RenderGraphTextureHandle right) => left.Equals(right);
public static bool operator !=(RenderGraphTextureHandle left, RenderGraphTextureHandle right) => !left.Equals(right);
}
///
/// Texture formats supported by the render graph.
///
public enum TextureFormat : int
{
RGBA8,
RGBA16F,
RGBA32F,
Depth32F,
Depth24Stencil8
}
///
/// Descriptor for creating a texture resource.
///
public readonly struct TextureDescriptor : IEquatable
{
public readonly int Width;
public readonly int Height;
public readonly TextureFormat Format;
public readonly string Name;
public TextureDescriptor(int width, int height, TextureFormat format, string name)
{
Width = width;
Height = height;
Format = format;
Name = name;
}
public readonly bool Equals(TextureDescriptor other) =>
Width == other.Width &&
Height == other.Height &&
Format == other.Format &&
Name == other.Name;
public override readonly bool Equals(object? obj) => obj is TextureDescriptor other && Equals(other);
public override readonly int GetHashCode() => HashCode.Combine(Width, Height, Format, Name);
}
///
/// Base interface for pass data that can be stored in the blackboard.
///
public interface IPassData
{
}