Geometry Shader を使用して (TressFX 用の) レンダラーを拡張しようとしています。したがって、三角形に対しては機能するシンペル パススルー ジオメトリ シェーダーを作成しましたが、出力が表示されないため、何らかの理由で線または点 (三角形を線と点に変換) に対しては機能しません。結果リンク
線や点でうまくいかない理由を誰かが指摘してくれたらうれしいです。
コード
ASetPrimitiveTopology が D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST に設定されている
頂点シェーダー
struct PS_INPUT_HAIR_AA
{
float4 Position : SV_POSITION;
float4 Tangent : Tangent;
float4 p0p1 : TEXCOORD0;
};
PS_INPUT_HAIR_AA VS_RenderHair( uint vertexId : SV_VertexID )
{
PS_INPUT_HAIR_AA Output = (PS_INPUT_HAIR_AA)0;
Calculate position etc...
Output.Position = mul(float4(v, 1), g_mViewProj);
Output.Tangent = float4(t, ratio);
Output.p0p1 = float4( v.xy, g_HairVertexPositions[vertexId+1].xy );
return Output;
}
三角形のジオメトリ シェーダー(機能します)
[maxvertexcount(64)] // more than enough
void GS_RenderHairPassThrough( triangle PS_INPUT_HAIR_AA input[3], inout TriangleStream<PS_INPUT_HAIR_AA> OutputStream )
{
PS_INPUT_HAIR_AA output = (PS_INPUT_HAIR_AA)0;
for(uint i = 0; i < 3; ++i) {
output.Position = input[i].Position;
output.Tangent = input[i].Tangent;
output.p0p1 = input[i].p0p1;
OutputStream.Append( output );
}
OutputStream.RestartStrip();
}
点と線のジオメトリ シェーダー(これは機能しません)
[maxvertexcount(64)] // more than enough
void GS_RenderHairPassThrough( triangle PS_INPUT_HAIR_AA input[3], inout PointStream<PS_INPUT_HAIR_AA> OutputStream )
{
PS_INPUT_HAIR_AA output = (PS_INPUT_HAIR_AA)0;
for(uint i = 0; i < 3; ++i) {
output.Position = input[i].Position;
output.Tangent = input[i].Tangent;
output.p0p1 = input[i].p0p1;
OutputStream.Append( output );
OutputStream.RestartStrip(); // Not sure if I need this
}
}
[maxvertexcount(64)] // more than enough
void GS_RenderHairPassThrough( triangle PS_INPUT_HAIR_AA input[3], inout LineStream<PS_INPUT_HAIR_AA> OutputStream )
{
PS_INPUT_HAIR_AA output = (PS_INPUT_HAIR_AA)0;
for(uint i = 0; i < 3; ++i) {
output.Position = input[i].Position;
output.Tangent = input[i].Tangent;
output.p0p1 = input[i].p0p1;
OutputStream.Append( output );
}
OutputStream.RestartStrip();
}
ただし、ポイント/ライン パススルー ジオメトリ シェーダーで output.Position をハード コーディングすると、画面に表示される出力を取得できます。