HLSL几何着色器中的硬编码三角形未显示在屏幕上

时间:2019-01-19 03:30:48

标签: unity3d shader hlsl geometry-shader

在Unity中,我计划使用几何着色器将点处理为四边形,但无法弄清楚为什么我没有从几何着色器获得输出。我将其编辑为一个最小的工作示例,如下所示:

Shader "foo/bar"
{
    SubShader{
        Cull Off
        Lighting Off
        ZWrite Off

        Pass{
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #pragma geometry geom

                struct appdata {
                    float4 vertex : POSITION;
                };
                struct v2g {
                    float4 vertex : POSITION;
                };
                struct g2f {
                    float4 vertex : POSITION;
                };

                v2g vert(appdata v) {
                    v2g o = (v2g)0;
                    o.vertex = v.vertex;
                    return o;
                }

                [maxvertexcount(4)]
                void geom(point v2g p[1], inout TriangleStream<g2f> tristream)
                {
                    g2f o = (g2f)0;
                    o.vertex = float4(0.1, 0.1, 0, 0);
                    tristream.Append(o);
                    o.vertex = float4(0.1, 0.9, 0, 0);
                    tristream.Append(o);
                    o.vertex = float4(0.9, 0.9, 0, 0);
                    tristream.Append(o);
                }


                fixed4 frag(g2f i) : COLOR
                {
                    return fixed4(1,1,1,1);
                }
            ENDCG
        }
    }
}

我希望能绘制一个白色三角形,覆盖正要渲染的纹理的一半以下。相反,它显示所有黑色,就像在着色器之前一样。

到目前为止,我已经:

  • 删除了我能想到的所有可能的剔除来源
  • 确保以类似方式渲染网格时,我的设置可以正常工作
  • 检查此内容是否可以输入并运行
  • 并搜索了非常有限的可用文件

我全都没主意。如果有人对我做错了什么甚至有一点头绪,请告诉我。谢谢。

-Fraser

0 个答案:

没有答案