Metadatos de tipos de textura#
namespace YotsubaShader.Language.Native.Types.Texture;
public enum TextureDimension
{
D1 = 1,
D2 = 2,
D3 = 3,
Cube = 4
}
namespace YotsubaShader.Language.Native.Types.Texture;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class TextureAttribute(TextureDimension dimension, TextureComponentTypes componentTypes) : YotsubaShaderAttribute
{
public TextureDimension Dimension = dimension;
public TextureComponentTypes ComponentTypes = componentTypes;
public TextureUsage Usage = TextureUsage.Sampled;
public TextureDepth Depth = TextureDepth.No;
public TextureFormat Format = TextureFormat.Unknown;
public bool Arrayed = false;
public bool Multisampled = false;
}
Marca un tipo con [Texture(dimension, componentTypes)]. Los campos con nombre son Usage, Depth, Format, Arrayed y Multisampled. El marcador de sampler es YotsubaShader.Language.Native.Types.Sampler.
Tipos de recursos HLSL#
using YotsubaShader.HlslSyntax.Resources;
using YotsubaShader.HlslSyntax.Resources.Types;
public class Surface
{
[register(RegisterPrefix.t, 0)]
public Texture2D Albedo;
[register(RegisterPrefix.s, 0)]
public SamplerState Sampler;
}
Los tipos HLSL actuales Texture2D y SamplerState son structs de metadatos. No proporcionan un método Sample ni una implementación de textura para CPU. El muestreo de texturas, la emulación CPU y el binding de recursos en ejecución necesitan implementación adicional.
