2011-06-08 35 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作为其输入类型。