mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			HLSL
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			HLSL
		
	
	
	
	
	
| #include "ReShade.fxh"
 | |
| 
 | |
| //  CrashGG presents
 | |
| 
 | |
| //  'XY-Pos-free' 
 | |
| 
 | |
| //  A super-simple shader refined from the super-fast crt-cyclon.fx, It only provides
 | |
| //  the functions of free pixel stretching and position translation on the XY axis.
 | |
| //  Suitable for users who only want to fine-tune the screen zoom and position and do not like the bundled CRT-like effects.
 | |
| //  Fixed some bugs in the original version, adjusted the step progress and the range.
 | |
| 
 | |
| //  This program is free software; you can redistribute it and/or modify it
 | |
| //  under the terms of the GNU General Public License as published by the Free
 | |
| //  Software Foundation; either version 2 of the License, or (at your option)
 | |
| //  any later version.
 | |
| 
 | |
| 
 | |
| uniform float zoomx <
 | |
| 	ui_type = "drag";
 | |
| 	ui_min = -0.3000;
 | |
| 	ui_max = 0.3000;
 | |
| 	ui_step = 0.0005;
 | |
| 	ui_label = "Zoom Image X";
 | |
| > = 0.0000;
 | |
| 
 | |
| uniform float zoomy <
 | |
| 	ui_type = "drag";
 | |
| 	ui_min = -0.3000;
 | |
| 	ui_max = 0.3000;
 | |
| 	ui_step = 0.0005;
 | |
| 	ui_label = "Zoom Image Y";
 | |
| > = 0.0000;
 | |
| 
 | |
| uniform float centerx <
 | |
| 	ui_type = "drag";
 | |
| 	ui_min = -9.99;
 | |
| 	ui_max = 9.99;
 | |
| 	ui_step = 0.01;
 | |
| 	ui_label = "Image Center X";
 | |
| > = 0.00;
 | |
| 
 | |
| uniform float centery <
 | |
| 	ui_type = "drag";
 | |
| 	ui_min = -9.99;
 | |
| 	ui_max = 9.99;
 | |
| 	ui_step = 0.01;
 | |
| 	ui_label = "Image Center Y";
 | |
| > = 0.00;
 | |
| 
 | |
| 
 | |
| float2 Warp(float2 pos)
 | |
| {
 | |
|     pos = pos*2.0-1.0;
 | |
|     pos *= float2(1.0+pos.y*pos.y*0, 1.0+pos.x*pos.x*0);
 | |
|     pos = pos*0.5+0.5;
 | |
| 
 | |
|     return pos;
 | |
| }
 | |
| 
 | |
| 
 | |
| float4 CRT_CYCLON_PS(float4 vpos: SV_Position, float2 vTexCoord : TEXCOORD0) : SV_Target
 | |
| {
 | |
| // zoom in and center screen
 | |
|     float2 pos = Warp((vTexCoord*float2(1.0-zoomx,1.0-zoomy)-float2(centerx,centery)/100.0));
 | |
| 
 | |
| // Convergence
 | |
|     float3 res = tex2D(ReShade::BackBuffer,pos).rgb;
 | |
| 
 | |
| // Vignette
 | |
|     float x = 0.0;
 | |
| 	
 | |
|     return float4(res, 1.0);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| technique CRT_CYCLON
 | |
| {
 | |
|    pass PS_CRT_CYCLON
 | |
|    {
 | |
|    	VertexShader = PostProcessVS;
 | |
|    	PixelShader  = CRT_CYCLON_PS;
 | |
|    }
 | |
| }
 | 
