Жестко закодированный треугольник в геометрическом шейдере HLSL не отображается на экране - PullRequest
0 голосов
/ 19 января 2019

В 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

...