Shader "Hirabiki/ScreenSpace/RenderTexture Overlay Simple"
{
	Properties {
		_MainTex ("Main Texture", 2D) = "white" {}
		_Color ("Background Color", color) = (0,0,0,1)
		_FadeDist ("Size", range(0, 1)) = 0.3
		[Enum(Fill,0,Fit,1,Stretch,2)] _ResizeMode("Resize mode", float) = 1
		[Enum(No,0,Yes,1)] _AllowDesktop("Camera only?", float) = 1
		[Enum(No,0,Yes,1)] _ShowPreview("Show preview?", float) = 1
	}
    SubShader
    {
        // Draw ourselves after all opaque geometry
        Tags { "DisableBatching" = "True" }
		
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
			
			uniform float _FadeDist;
			uniform float _ResizeMode, _ShowPreview, _AllowDesktop;
			
			sampler2D _MainTex;
			float4 _MainTex_TexelSize;
			half4 _Color;
			
			uniform float _VRChatCameraMode; // 0=YourVP / 1=VRCCam_InVR / 2=VRCCam_In2D / 3=F12_Screenshot
			uniform float _VRChatMirrorMode; // 0=Normal / 1=Mirror_InVR / 2=Mirror_In2D

			struct appdata {
				float4 vertex : POSITION;
				float4 uv : TEXCOORD0;
				UNITY_VERTEX_INPUT_INSTANCE_ID //SPS-I
			};
			
            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 pos : SV_POSITION;
				UNITY_VERTEX_OUTPUT_STEREO //SPS-I
            };

            v2f vert(appdata v) {
				v2f o;
				UNITY_SETUP_INSTANCE_ID(v); //SPS-I
				UNITY_INITIALIZE_OUTPUT(v2f, o); //SPS-I
				UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); //SPS-I
				
				float3 objectPos = mul(unity_ObjectToWorld, float4(0.0, 0.0, 0.0, 1.0)).xyz;
				float distFromObject = distance(objectPos, _WorldSpaceCameraPos);
				
#if defined(USING_STEREO_MATRICES)
				float isCam = 0.0;
#else
				float isCam = ((_VRChatCameraMode != 0 && _VRChatMirrorMode == 0) || !_AllowDesktop) * (0.5 * _FadeDist > distFromObject);
#endif
				o.pos = lerp(UnityObjectToClipPos(v.vertex * _ShowPreview), mul(UNITY_MATRIX_P, v.vertex * float4(1,1,0,1) + float4(0.0, 0.0, -0.001 -_ProjectionParams.y, 0.0)), isCam);
				
				float aRatio = _MainTex_TexelSize.z * _MainTex_TexelSize.y / lerp(1.777777777, _ScreenParams.x / _ScreenParams.y, isCam);
				float scale = lerp(min(aRatio, 1.0), max(aRatio, 1.0), min(1.0, _ResizeMode));
				
				float4 rawPos = lerp(v.uv, ComputeNonStereoScreenPos(o.pos), isCam);
				float2 scrUVRaw = rawPos.xy / rawPos.w;
				float2 scrUV = (scrUVRaw - 0.5) * lerp(float2(1.777777777, 1.0), _ScreenParams.xy / _ScreenParams.y, isCam);
				
				
				
				
				float2 texUV = scrUV * _MainTex_TexelSize.xy * _MainTex_TexelSize.w * scale + 0.5;
                o.uv = lerp(texUV, scrUVRaw, max(_ResizeMode, 1.0) - 1.0);
                return o;
            }
			
            half4 frag(v2f i) : SV_Target
            {
				
				
				
				
				
				
				
				
				
				
				
				
				half4 col0 = tex2D(_MainTex, i.uv);
				
				half4 col1 = _Color;
				
				
				
				
				
				
				half4 col = lerp(col1, col0, saturate(_ScreenParams.x * 0.5 - max(abs(i.uv.x - 0.5), abs(i.uv.y - 0.5)) * _ScreenParams.x + 1.0));
				
				return col;
            }
			
            ENDCG
        }

    }
}