struct Vertex { float3 point; float3 color; }; struct VSIn { uint VertexIndex : SV_VertexID; }; struct VSOut { float4 Pos : SV_POSITION; float3 Color : COLOR0; }; static const float3 points[] = { float3(-0.5f, -0.5f, 0.5f), float3(0.5f, -0.5f, 0.5f), float3(0.0f, 0.5f, 0.5f), }; static const float3 colors[] = { float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f), }; [shader("vertex")] VSOut vsmain(VSIn input) { VSOut output; output.Pos = float4(points[input.VertexIndex], 1.0f); output.Color = colors[input.VertexIndex]; return output; } struct FSOut { float4 Color; }; [shader("fragment")] FSOut fsmain(VSOut input) { FSOut outp; outp.Color = float4(input.Color, 1.0); return outp; }