75 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | Shader "FrameBufferFetch" | ||
|  | { | ||
|  |    SubShader | ||
|  |    { | ||
|  |        Tags { "RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline"} | ||
|  |        ZWrite Off Cull Off | ||
|  |        Pass | ||
|  |        { | ||
|  |            Name "FrameBufferFetch" | ||
|  | 
 | ||
|  |            HLSLPROGRAM | ||
|  |            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | ||
|  |            #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" | ||
|  | 
 | ||
|  |            #pragma vertex Vert | ||
|  |            #pragma fragment Frag | ||
|  | 
 | ||
|  |            // Declares the framebuffer input as a texture 2d containing half. | ||
|  |            FRAMEBUFFER_INPUT_HALF(0); | ||
|  | 
 | ||
|  |            // Out frag function takes as input a struct that contains the screen space coordinate we are going to use to sample our texture. It also writes to SV_Target0, this has to match the index set in the UseTextureFragment(sourceTexture, 0, …) we defined in our render pass script.    | ||
|  |            float4 Frag(Varyings input) : SV_Target0 | ||
|  |            { | ||
|  |                // this is needed so we account XR platform differences in how they handle texture arrays | ||
|  |                UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); | ||
|  | 
 | ||
|  |                // read the current pixel from the framebuffer | ||
|  |                float2 uv = input.texcoord.xy; | ||
|  |                // read previous subpasses directly from the framebuffer. | ||
|  |                half4 color = LOAD_FRAMEBUFFER_INPUT(0, input.positionCS.xy); | ||
|  |                 | ||
|  |                // Modify the sampled color | ||
|  |                return half4(0,0,1,1) * color; | ||
|  |            } | ||
|  | 
 | ||
|  |            ENDHLSL | ||
|  |        } | ||
|  | 
 | ||
|  |        Tags { "RenderType"="Opaque" "RenderPipeline" = "UniversalPipeline"} | ||
|  |        ZWrite Off Cull Off | ||
|  |        Pass | ||
|  |        { | ||
|  |            Name "FrameBufferFetchMS" | ||
|  | 
 | ||
|  |            HLSLPROGRAM | ||
|  |            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | ||
|  |            #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" | ||
|  | 
 | ||
|  |            #pragma vertex Vert | ||
|  |            #pragma fragment Frag | ||
|  |            #pragma target 4.5 | ||
|  |            #pragma require msaatex | ||
|  | 
 | ||
|  |            // Declares the framebuffer input as a texture 2d containing half. | ||
|  |            FRAMEBUFFER_INPUT_HALF_MS(0); | ||
|  | 
 | ||
|  |            // Out frag function takes as input a struct that contains the screen space coordinate we are going to use to sample our texture. It also writes to SV_Target0, this has to match the index set in the UseTextureFragment(sourceTexture, 0, …) we defined in our render pass script.    | ||
|  |            float4 Frag(Varyings input, uint sampleID : SV_SampleIndex) : SV_Target0 | ||
|  |            { | ||
|  |                // this is needed so we account XR platform differences in how they handle texture arrays | ||
|  |                UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); | ||
|  | 
 | ||
|  |                // read the current pixel from the framebuffer | ||
|  |                float2 uv = input.texcoord.xy; | ||
|  |                // read previous subpasses directly from the framebuffer. | ||
|  |                half4 color = LOAD_FRAMEBUFFER_INPUT_MS(0, sampleID, input.positionCS.xy); | ||
|  |                 | ||
|  |                // Modify the sampled color | ||
|  |                return half4(0,0,1,1) * color; | ||
|  |            } | ||
|  | 
 | ||
|  |            ENDHLSL | ||
|  |        } | ||
|  |    } | ||
|  | } |