几何着色器不起作用(unity3d)

时间:2017-11-23 16:11:19

标签: unity3d shader geometry-shader

我正在开发一个统一着色器。着色器必须包含顶点,片段和几何着色器,虽然前两个工作正常,但我遇到了几何着色器的问题。

当我使用下面的代码时,着色器对象着色器刚涂成粉红色,但我看不到着色器编译错误。如果我只删除几何着色器,一切都按预期工作。

当前的实现应该只是将输入数据复制到输出,即什么都不做。

另一件有趣的事情是Unity可能会忽略几何着色器的内容 - 如果我从中删除所有内容,该对象仍然是粉红色的。在我的理解中,在这种情况下不应该呈现任何东西。

我正在使用的代码:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/VoidCircle" 
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Progress ("Progress", float) = 0.4
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
             Blend SrcAlpha OneMinusSrcAlpha
        LOD 100

        Pass
        {
            CGPROGRAM

            #pragma geometry geom
            #pragma vertex vert
            #pragma fragment frag

            struct appdata
            {
                float4 vertex : POSITION; // vertex position
                float2 uv : TEXCOORD0; // texture coordinate
            };

            struct v2f
            {
                float2 uv : TEXCOORD0; // texture coordinate
                float4 vertex : SV_POSITION; // clip space position
            };

           v2f vert (appdata v)
           {
               v2f o;
               o.vertex = UnityObjectToClipPos(v.vertex);
               o.uv = v.uv;
               return o;
           }  

            // ALL THE PROBLEMS ARE HERE          
            [maxvertexcount(3)]
            void geom(triangle v2f input[3], inout TriangleStream<v2f> OutputStream)
            {         
                for (int i = 0; i < 3; i++) {
                   OutputStream.Append(input[i]);
                }               
            }

            sampler2D _MainTex;
            float4 _MainTex_TexelSize;

            float4 frag (v2f i) : SV_Target
            {

                float4 col = tex2D(_MainTex, i.uv);
                float besta = 0;
                int d = 1;        

                for (int x = -d; x <= d; x++) {
                    for (int y = -d; y <= d; y++) {
                        float4 col1 = tex2D(_MainTex, i.uv + fixed2(_MainTex_TexelSize.x * x, _MainTex_TexelSize.y * y));
                        if (col1.a > besta) {
                            besta = col1.a;
                        }
                    }
                }

                if (col.a > 0) {
                    return float4(col.a, col.a, col.a, 1);
                } else {
                    return float4(0, 0, 0, besta);
                }

            }
            ENDCG
        }
    }
}

1 个答案:

答案 0 :(得分:0)

遇到了问题。如果我没有弄错的话,OpenGL 3.1支持几何着色器。我的硬件实现了OpenGL 3.0