Геометрический шейдер не будет компилироваться в DirectX10 HLSL
Я пытался закодировать геометрический шейдер для создания билбордов, как объяснено в книге Фрэнка Луны "Введение в программирование трехмерных игр с помощью 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 ответ
Проблема заключается в структуре, используемой для ввода и вывода из вершинного шейдера, геометрического шейдера и пиксельного шейдера. Если вершинный шейдер выводит тип PS_INPUT, то геометрический шейдер должен использовать этот PS_INPUT в качестве входного типа.