Yotsuba Shader
Documentación

Tutorial

Escribir tu primer shader

Declara entradas y salidas de vértice y escribe una etapa de vertex y una de fragment que pasen un color.

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.

BasicColorShader.cs
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.

Copyright © 2026 Colaboradores de Yotsuba Shader · Licencias · GitHub