Dissecting a Sample HLSL Effect File

In XNA, effects are created in effect files, which have an .fx extension. They are loaded via the content pipeline and are compiled just like other content resources. Therefore, the compiler will detect compilation errors in your HLSL code just like it will in your C# code, even though your effect files are stored with other content.

Tip

While your HLSL code will be compiled via the content pipeline, unfortunately, you won't have access to IntelliSense when working with HLSL effect files.

Now that you have the basics of the HLSL language down, let's take a look at a sample effect file created using HLSL. In this section, we'll dissect the different sections of this example file:

float4x4 World;
float4x4 View;
float4x4 Projection;

struct VertexShaderInput
{
    float4 Position : POSITION0;

};

struct VertexShaderOutput
{
    float4 Position : POSITION0;

};

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
    VertexShaderOutput output;

    float4 worldPosition = mul(input.Position, World);
    float4 viewPosition = mul(worldPosition, View);
    output.Position = mul(viewPosition, Projection);

    return output;
}

float4 PixelShaderFunction(  ) : COLOR0
{
    return float4(1, 0, 0, 1);
}

technique Technique1
{
    pass Pass1
    {
        VertexShader = compile vs_1_1 VertexShaderFunction(  );
        PixelShader = compile ps_1_1 PixelShaderFunction(  );
    }
}

Don't be too scared by this code. It looks a bit different than what you're used to in XNA, but we'll explore each section of the code ...

Get Learning XNA 3.0 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.