Resumen#
Este ejemplo de autoría con sintaxis HLSL utiliza tipos de MonoGame y reutiliza la salida vertex como entrada fragment. POSITION y COLOR son semánticas de usuario HLSL; SV_Position es un built-in, y el atributo de retorno SV_Target(0) identifica la salida de color del fragment.
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;
}
}
Qué ocurre entre etapas#
La aplicación proporciona posiciones y colores. La etapa vertex escribe la posición en el espacio de recorte con z = 0 y w = 1 y transmite el color. El rasterizador interpola el color para la etapa fragment. La aplicación sigue encargándose del layout de vértices, los render targets, la creación del pipeline y las llamadas de dibujo.
Este es un ejemplo de autoría, no una prueba exitosa de compilación de C# a SPIR-V. El procesador actual trata los tipos de MonoGame sin atributos de mapeo nativo como structs ordinarios. La conversión de cuerpos sigue incompleta.
