Declaraciones actuales#
namespace YotsubaShader.Language;
public enum Stage
{
Vertex,
Fragment,
Compute
}
namespace YotsubaShader.Language;
[AttributeUsage(AttributeTargets.Method)]
public class ShaderStageAttribute(Stage stage) : YotsubaShaderAttribute
{
public Stage Stage = stage;
}
El enum público de autoría solo contiene Vertex, Fragment y Compute. Las otras etapas mencionadas en el roadmap no son valores actuales del enum. Declarar una etapa no implica que su cuerpo completo se pueda compilar.
using Microsoft.Xna.Framework;
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public class BasicColorShader
{
public struct VS_Input
{
[POSITION]
public Vector2 Position;
[COLOR]
public Vector4 Color;
}
public struct VS_Output
{
[SV_Position]
public Vector4 Position;
[COLOR]
public Vector4 Color;
}
[ShaderStage(Stage.Vertex)]
public VS_Output VS(VS_Input input)
{
VS_Output output = new VS_Output();
output.Position = new Vector4(
input.Position.X,
input.Position.Y,
0.0f,
1.0f
);
output.Color = input.Color;
return output;
}
[ShaderStage(Stage.Fragment)]
[return: SV_Target(0)]
public Vector4 FS(VS_Output input)
{
return input.Color;
}
}
Declaraciones de compute#
using YotsubaShader.Language;
using YotsubaShader.HlslSyntax;
public class ComputeShader
{
[ShaderStage(Stage.Compute)]
[numthreads(8, 8, 1)]
public void Main() { }
}
Los vocabularios HLSL, GLSL y WGSL declaran numthreads, layout_local_size y workgroup_size, respectivamente. Un built-in o atributo de workgroup declarado todavía puede carecer de soporte en el procesador.
