Геометрический шейдер не будет компилироваться в DirectX10 HLSL - PullRequest
1 голос
/ 08 июня 2011

Я пытался написать геометрический шейдер для создания билбордов, как объяснено в книге Фрэнка Луны «Введение в программирование трехмерных игр с помощью DirectX». Я вставляю шейдер в мою технику следующим образом:

pass P3
    {
        SetVertexShader(CompileShader(vs_4_0, VS()));
        SetGeometryShader(CompileShader(gs_4_0, GS()));
        SetPixelShader(CompileShader( ps_4_0, PS_NoSpecular()));
        SetBlendState(SrcAlphaBlendingAdd, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF );
    }

Однако это выдает ошибку 1> D3DEffectCompiler: ошибка: в методе рендеринга, Pass P3 не найдена допустимая комбинация VertexShader-GeometryShader.

Структуры для VS и GS приведены ниже:

struct GS_INPUT
{
    float4 PosH : SV_POSITION;   
    float4 PosW : POSITION;   
    float2 Tex : TEXCOORD; 
    float3 N : NORMAL;  
    float3 Tangent : TANGENT;
    float3 Binormal : BINORMAL;
};

struct VS_INPUT
{
    float4 Pos : POSITION;   
    float2 Tex : TEXCOORD; 
    float3 N : NORMAL;  
    float3 Tangent : TANGENT;
    float3 Binormal : BINORMAL;
};

Должны ли они быть одинаковыми?

1 Ответ

0 голосов
/ 08 июня 2011

Проблема заключается в структуре, используемой для ввода и вывода из вершинного шейдера, геометрического шейдера и пиксельного шейдера. Если вершинный шейдер выводит тип PS_INPUT, то геометрический шейдер должен использовать этот PS_INPUT в качестве своего входного типа.

...