2011-06-08 59 views
1

我一直在嘗試編寫幾何着色器以生成廣告牌系統,如Frank Luna的書中介紹的使用DirectX進行3D遊戲編程所述。我插入着色器到我的技術如下:Geometry Shader無法在DirectX10中編譯HLSL

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:錯誤:沒有有效的VertexShader,幾何着色器組合可以在技術中找到渲染,通P3。

兩個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; 
}; 

他們應該是一樣的嗎?

+0

我也有這樣的警告: 語義TEXCOORD已被放置在兩個階段的不同寄存器。 – pypmannetjies 2011-06-08 11:23:13

回答

0

問題在於用於從頂點着色器,幾何着色器和像素着色器輸入和輸出的結構。如果頂點着色器輸出PS_INPUT類型,則幾何着色器需要使用該PS_INPUT作爲其輸入類型。