这个HLSL着色器有什么不对吗?

时间:2014-08-14 15:09:49

标签: directx shader hlsl directx-11 vertex-buffer

我做错了什么? 如果我编译这会得到一个错误

cbuffer MatrixBuffer
{
    matrix worldM;
    matrix viewM;
    matrix projectionM;
};

struct VertexInput
{
    float4 position : POSITION;
    float4 color : COLOR;
};

struct PixelInput
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
}

PixelInput ColorVertexShader(VertexInput input)
{
    PixelInputType output;

    input.position.w = 1.0f;

    output.position = mul(input.position, worldM);
    output.position = mul(output.position, viewM);
    output.position = mul(output.position, projectionM);

    output.color = input.color;

    return output;
}

我在"第2行遇到语法错误{"

如果我这样做

    matrix worldM;
    matrix viewM;
    matrix projectionM;


struct VertexInput
{
    float4 position : POSITION;
    float4 color : COLOR;
};

struct PixelInput
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
}

PixelInput ColorVertexShader(VertexInput input)
{
    PixelInputType output;

    input.position.w = 1.0f;

    output.position = mul(input.position, worldM);
    output.position = mul(output.position, viewM);
    output.position = mul(output.position, projectionM);

    output.color = input.color;

    return output;
}

我收到了意外的令牌'输出'

我不知道错在哪里 我仍然是HLSL中写作着色器的Noob

2 个答案:

答案 0 :(得分:0)

我不确定这是否会有所帮助,但也许可以尝试定义你的cbuffer:

cbuffer cbPerObject: register(b0)
{
    matrix WorldM:      packoffset(c0);
    matrix ViewM:       packoffset(c4);
    matrix ProjectionM: packoffset(c8);
};

答案 1 :(得分:0)

您已定义

struct PixelInput
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
}

但稍后您使用

 PixelInputType output;

显然,这不起作用。使用相同的名称。