2017-10-12 9 views
0

テッセレーションを理解しようとすると、単純なシェーダコードが作成されました。 私はこのコードで間違ったものを見つけることはできませんが、コンパイル関数は常にfalseを返します。HLSLをコンパイルできませんHullシェーダコード

私の入力と出力の構造::

[domain("tri")] // indicates a triangle patch (3 verts) 
[partitioning("fractional_odd")] // fractional avoids popping 
// vertex ordering for the output triangles 
[outputtopology("triangle_cw")] 
[outputcontrolpoints(3)] 
// name of the patch constant hull shader 
[patchconstantfunc("ConstantsHS")] 
//[maxtessfactor(7.0)] 


cbuffer TessellationBuffer 
{ 
    float tessellationAmount; 
    float3 padding; 
}; 

struct VS_CONTROL_POINT_OUTPUT 
{ 
    float3 vWorldPos : POSITION; 
    float2 vTexCoord : TEXCOORD0; 
    float3 vNormal : NORMAL0; 
}; 

struct HS_CONTROL_POINT_OUTPUT 
{ 
    float3 vWorldPos : POSITION; 
    float2 vTexCoord : TEXCOORD0; 
    float3 vNormal : NORMAL0; 
}; 

struct HS_CONSTANT_DATA_OUTPUT 
{ 
    float Edges[3] : SV_TessFactor; 
    float Inside : SV_InsideTessFactor; 
}; 

マイ機能:任意の助け

HS_CONTROL_POINT_OUTPUT HS(InputPatch<VS_CONTROL_POINT_OUTPUT, 3> inputPatch, uint uCPID : SV_OutputControlPointID, uint patchId : SV_PrimitiveID) 
{ 
    HS_CONTROL_POINT_OUTPUT Output; 
    Output.vWorldPos = inputPatch[uCPID].vWorldPos; 
    Output.vTexCoord = inputPatch[uCPID].vTexCoord; 
    Output.vNormal = inputPatch[uCPID].vNormal; 

    return Output; 
}; 

HS_CONSTANT_DATA_OUTPUT ConstantsHS(InputPatch<VS_CONTROL_POINT_OUTPUT, 3> inputPatch, uint PatchID : SV_PrimitiveID ) 
{ 
    HS_CONSTANT_DATA_OUTPUT Output; 

    Output.Edges[0] = tessellationAmount; 
    Output.Edges[1] = tessellationAmount; 
    Output.Edges[2] = tessellationAmount; 
    Output.Inside = tessellationAmount; 
    return Output; 
}; 

おかげでここに私のコードです。

答えて

1

属性は以下のようなエントリ・ポイントに設定する必要があり、その後、あなたの船体シェーダが有効である:サイドノートで

[domain("tri")] // indicates a triangle patch (3 verts) 
[partitioning("fractional_odd")] // fractional avoids popping 
// vertex ordering for the output triangles 
[outputtopology("triangle_cw")] 
[outputcontrolpoints(3)] 
// name of the patch constant hull shader 
[patchconstantfunc("ConstantsHS")] 
//[maxtessfactor(7.0)] 
HS_CONTROL_POINT_OUTPUT HS(InputPatch<VS_CONTROL_POINT_OUTPUT, 3> inputPatch, uint uCPID : SV_OutputControlPointID, uint patchId : SV_PrimitiveID) 

、コマンドラインツールFXC.exeは持っているでしょう、エラーメッセージがプリントを持っているでしょう正しい方向にあなたを置く:error X3000: syntax error: unexpected token 'cbuffer'

と私はあなたが参照している機能何がわからないです、それが失敗した場合にはエラーメッセージであなたのためにも出力ブロブをHRESULT、ないブール値を返す、とD3DCompile

+0

ありがとうございます!私はこの命令を知らなかった。私の関数はD3DCompileへの呼び出しであり、エラーバッファを出力しません。 – mondlicht

関連する問題