Shader "Hidden/VRChat/MobileHighlight"
{
    //-------------------------------------------------------------------------------------------------------------------------------------------------------------
    CGINCLUDE

        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        #include "UnityCG.cginc"

        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        float4 _HighlightColor;

        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        struct appdata
        {
            float4 vertex : POSITION;
            UNITY_VERTEX_INPUT_INSTANCE_ID
        };

        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        struct v2f
        {
            float4 pos : SV_POSITION;
            UNITY_VERTEX_OUTPUT_STEREO
        };
        
        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        v2f vert( appdata i )
        {
            v2f o;
            UNITY_SETUP_INSTANCE_ID(i);
            UNITY_INITIALIZE_OUTPUT(v2f, o);
            UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

            o.pos = UnityObjectToClipPos(i.vertex);

            return o;
        }

        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        fixed4 frag( v2f i ) : SV_Target
        {
            return _HighlightColor;
        }

    ENDCG

    SubShader
    {
        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        // Depth Pre-pass
        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        Pass
        {
            Name "DepthPrepass"
            Tags { "LightMode" = "Always" }
            ColorMask 0
            Cull Off
            ZTest Always
            ZWrite On

            CGPROGRAM
                #pragma target 3.0
                #pragma vertex vert
                #pragma fragment frag
            ENDCG
        }

        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        // Render the object with a transparent solid coloured highlight.
        //-------------------------------------------------------------------------------------------------------------------------------------------------------------
        Pass
        {
            Name "HighlightPass"
            Tags { "LightMode" = "Always" }
            Cull Off
            ZWrite Off
            ZTest Equal
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
                #pragma target 3.0
                #pragma vertex vert
                #pragma fragment frag
            ENDCG
        }
    }
}
