holopy3/Assets/SteamVR/InteractionSystem/Hints/Shaders/ControllerButtonHints.shader
2020-12-10 15:25:12 +01:00

236 lines
7.4 KiB
Text

//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose:
//
//=============================================================================
// UNITY_SHADER_NO_UPGRADE
Shader "Valve/VR/ControllerButtonHints"
{
Properties
{
_MainTex ( "Texture", 2D ) = "white" {}
_Color( "Color", Color ) = ( 1, 1, 1, 1 )
_SceneTint( "SceneTint", Color ) = ( 1, 1, 1, 1 )
}
SubShader
{
Tags{ "Queue" = "Transparent+1" "RenderType" = "Transparent" }
LOD 100
Pass
{
// Render State ---------------------------------------------------------------------------------------------------------------------------------------------
Blend Zero SrcColor // Alpha blending
Cull Off
ZWrite Off
ZTest Off
Stencil
{
Ref 2
Comp notequal
Pass replace
Fail keep
}
CGPROGRAM
#pragma vertex MainVS
#pragma fragment MainPS
// Includes -------------------------------------------------------------------------------------------------------------------------------------------------
#include "UnityCG.cginc"
#if UNITY_VERSION >= 201810
// Structs --------------------------------------------------------------------------------------------------------------------------------------------------
struct VertexInput
{
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct VertexOutput
{
float4 vertex : SV_POSITION;
UNITY_VERTEX_OUTPUT_STEREO
};
// Globals --------------------------------------------------------------------------------------------------------------------------------------------------
UNITY_INSTANCING_BUFFER_START( Props )
UNITY_DEFINE_INSTANCED_PROP( float4, _SceneTint )
UNITY_INSTANCING_BUFFER_END( Props )
// MainVs ---------------------------------------------------------------------------------------------------------------------------------------------------
VertexOutput MainVS( VertexInput i )
{
VertexOutput o;
UNITY_SETUP_INSTANCE_ID( i );
UNITY_INITIALIZE_OUTPUT( VertexOutput, o );
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
o.vertex = UnityObjectToClipPos(i.vertex);
return o;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 MainPS( VertexOutput i ) : SV_Target
{
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( i );
return UNITY_ACCESS_INSTANCED_PROP( Props, _SceneTint.rgba );
}
#else
// Structs --------------------------------------------------------------------------------------------------------------------------------------------------
struct VertexInput
{
float4 vertex : POSITION;
};
struct VertexOutput
{
float4 vertex : SV_POSITION;
};
// Globals --------------------------------------------------------------------------------------------------------------------------------------------------
float4 _SceneTint;
// MainVs ---------------------------------------------------------------------------------------------------------------------------------------------------
VertexOutput MainVS( VertexInput i )
{
VertexOutput o;
#if UNITY_VERSION >= 540
o.vertex = UnityObjectToClipPos(i.vertex);
#else
o.vertex = mul(UNITY_MATRIX_MVP, i.vertex);
#endif
return o;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 MainPS( VertexOutput i ) : SV_Target
{
return _SceneTint.rgba;
}
#endif
ENDCG
}
Pass
{
// Render State ---------------------------------------------------------------------------------------------------------------------------------------------
Blend SrcAlpha OneMinusSrcAlpha // Alpha blending
Cull Off
ZWrite Off
ZTest Always
CGPROGRAM
#pragma vertex MainVS
#pragma fragment MainPS
// Includes -------------------------------------------------------------------------------------------------------------------------------------------------
#include "UnityCG.cginc"
#if UNITY_VERSION >= 201810
// Structs --------------------------------------------------------------------------------------------------------------------------------------------------
struct VertexInput
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct VertexOutput
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
UNITY_VERTEX_OUTPUT_STEREO
};
// Globals --------------------------------------------------------------------------------------------------------------------------------------------------
UNITY_INSTANCING_BUFFER_START( Props )
UNITY_DEFINE_INSTANCED_PROP( sampler2D, _MainTex )
UNITY_DEFINE_INSTANCED_PROP( float4, _MainTex_ST )
UNITY_DEFINE_INSTANCED_PROP( float4, _Color )
UNITY_INSTANCING_BUFFER_END( Props )
// MainVs ---------------------------------------------------------------------------------------------------------------------------------------------------
VertexOutput MainVS( VertexInput i )
{
VertexOutput o;
UNITY_SETUP_INSTANCE_ID( i );
UNITY_INITIALIZE_OUTPUT( VertexOutput, o );
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
o.vertex = UnityObjectToClipPos(i.vertex);
o.uv = TRANSFORM_TEX( i.uv, UNITY_ACCESS_INSTANCED_PROP( Props, _MainTex ) );
return o;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 MainPS( VertexOutput i ) : SV_Target
{
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( i );
float4 vColor;
vColor.rgb = lerp( tex2D( UNITY_ACCESS_INSTANCED_PROP( Props, _MainTex ), i.uv).rgb, UNITY_ACCESS_INSTANCED_PROP( Props, _Color.rgb ), UNITY_ACCESS_INSTANCED_PROP( Props, _Color.a ) );
vColor.a = UNITY_ACCESS_INSTANCED_PROP( Props, _Color.a );
return vColor.rgba;
}
#else
// Structs --------------------------------------------------------------------------------------------------------------------------------------------------
struct VertexInput
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct VertexOutput
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
// Globals --------------------------------------------------------------------------------------------------------------------------------------------------
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color;
// MainVs ---------------------------------------------------------------------------------------------------------------------------------------------------
VertexOutput MainVS( VertexInput i )
{
VertexOutput o;
#if UNITY_VERSION >= 540
o.vertex = UnityObjectToClipPos(i.vertex);
#else
o.vertex = mul(UNITY_MATRIX_MVP, i.vertex);
#endif
o.uv = TRANSFORM_TEX( i.uv, _MainTex );
return o;
}
// MainPs ---------------------------------------------------------------------------------------------------------------------------------------------------
float4 MainPS( VertexOutput i ) : SV_Target
{
float4 vColor;
vColor.rgb = lerp( tex2D(_MainTex, i.uv).rgb, _Color.rgb, _Color.a );
vColor.a = _Color.a;
return vColor.rgba;
}
#endif
ENDCG
}
}
}