103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			HLSL
		
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			HLSL
		
	
	
	
|  | // Curved World <http://u3d.as/1W8h> | ||
|  | // Copyright (c) Amazing Assets <https://amazingassets.world> | ||
|  |   | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef UNITY_SPRITES_INCLUDED | ||
|  | #define UNITY_SPRITES_INCLUDED | ||
|  | 
 | ||
|  | #include "UnityCG.cginc" | ||
|  | 
 | ||
|  | #ifdef UNITY_INSTANCING_ENABLED | ||
|  | 
 | ||
|  |     UNITY_INSTANCING_BUFFER_START(PerDrawSprite) | ||
|  |         // SpriteRenderer.Color while Non-Batched/Instanced. | ||
|  |         UNITY_DEFINE_INSTANCED_PROP(fixed4, unity_SpriteRendererColorArray) | ||
|  |         // this could be smaller but that's how bit each entry is regardless of type | ||
|  |         UNITY_DEFINE_INSTANCED_PROP(fixed2, unity_SpriteFlipArray) | ||
|  |     UNITY_INSTANCING_BUFFER_END(PerDrawSprite) | ||
|  | 
 | ||
|  |     #define _RendererColor  UNITY_ACCESS_INSTANCED_PROP(PerDrawSprite, unity_SpriteRendererColorArray) | ||
|  |     #define _Flip           UNITY_ACCESS_INSTANCED_PROP(PerDrawSprite, unity_SpriteFlipArray) | ||
|  | 
 | ||
|  | #endif // instancing | ||
|  | 
 | ||
|  | CBUFFER_START(UnityPerDrawSprite) | ||
|  | #ifndef UNITY_INSTANCING_ENABLED | ||
|  |     fixed4 _RendererColor; | ||
|  |     fixed2 _Flip; | ||
|  | #endif | ||
|  |     float _EnableExternalAlpha; | ||
|  | CBUFFER_END | ||
|  | 
 | ||
|  | // Material Color. | ||
|  | fixed4 _Color; | ||
|  | 
 | ||
|  | struct appdata_t | ||
|  | { | ||
|  |     float4 vertex   : POSITION; | ||
|  |     float4 color    : COLOR; | ||
|  |     float2 texcoord : TEXCOORD0; | ||
|  |     UNITY_VERTEX_INPUT_INSTANCE_ID | ||
|  | }; | ||
|  | 
 | ||
|  | struct v2f | ||
|  | { | ||
|  |     float4 vertex   : SV_POSITION; | ||
|  |     fixed4 color    : COLOR; | ||
|  |     float2 texcoord : TEXCOORD0; | ||
|  |     UNITY_VERTEX_OUTPUT_STEREO | ||
|  | }; | ||
|  | 
 | ||
|  | inline float4 UnityFlipSprite(in float3 pos, in fixed2 flip) | ||
|  | { | ||
|  |     return float4(pos.xy * flip, pos.z, 1.0); | ||
|  | } | ||
|  | 
 | ||
|  | v2f SpriteVert(appdata_t IN) | ||
|  | { | ||
|  |     v2f OUT; | ||
|  | 
 | ||
|  |     UNITY_SETUP_INSTANCE_ID (IN); | ||
|  |     UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); | ||
|  | 
 | ||
|  | 
 | ||
|  |     CURVEDWORLD_TRANSFORM_VERTEX(IN.vertex) | ||
|  | 
 | ||
|  | 
 | ||
|  |     OUT.vertex = UnityFlipSprite(IN.vertex, _Flip); | ||
|  |     OUT.vertex = UnityObjectToClipPos(OUT.vertex); | ||
|  |     OUT.texcoord = IN.texcoord; | ||
|  |     OUT.color = IN.color * _Color * _RendererColor; | ||
|  | 
 | ||
|  |     #ifdef PIXELSNAP_ON | ||
|  |     OUT.vertex = UnityPixelSnap (OUT.vertex); | ||
|  |     #endif | ||
|  | 
 | ||
|  |     return OUT; | ||
|  | } | ||
|  | 
 | ||
|  | sampler2D _MainTex; | ||
|  | sampler2D _AlphaTex; | ||
|  | 
 | ||
|  | fixed4 SampleSpriteTexture (float2 uv) | ||
|  | { | ||
|  |     fixed4 color = tex2D (_MainTex, uv); | ||
|  | 
 | ||
|  | #if ETC1_EXTERNAL_ALPHA | ||
|  |     fixed4 alpha = tex2D (_AlphaTex, uv); | ||
|  |     color.a = lerp (color.a, alpha.r, _EnableExternalAlpha); | ||
|  | #endif | ||
|  | 
 | ||
|  |     return color; | ||
|  | } | ||
|  | 
 | ||
|  | fixed4 SpriteFrag(v2f IN) : SV_Target | ||
|  | { | ||
|  |     fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color; | ||
|  |     c.rgb *= c.a; | ||
|  |     return c; | ||
|  | } | ||
|  | 
 | ||
|  | #endif // UNITY_SPRITES_INCLUDED |