mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
	
	
		
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			HLSL
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			HLSL
		
	
	
	
	
	
|   | /* | ||
|  |     Scanlines Sine Absolute Value | ||
|  |     An ultra light scanline shader | ||
|  |     by RiskyJumps | ||
|  | 	license: public domain | ||
|  | */ | ||
|  | 
 | ||
|  | #include "ReShade.fxh" | ||
|  | 
 | ||
|  | uniform float texture_sizeY < | ||
|  | 	ui_type = "drag"; | ||
|  | 	ui_min = 1.0; | ||
|  | 	ui_max = BUFFER_HEIGHT; | ||
|  | 	ui_label = "Scanlines Height [Scanlines-Absolute]"; | ||
|  | > = 240.0; | ||
|  | 
 | ||
|  | uniform float amp < | ||
|  | 	ui_type = "drag"; | ||
|  | 	ui_min = 0.0; | ||
|  | 	ui_max = 2.0; | ||
|  | 	ui_step = 0.05; | ||
|  | 	ui_label = "Amplitude [Scanlines-Absolute]"; | ||
|  | > = 1.25; | ||
|  | 
 | ||
|  | uniform float phase < | ||
|  | 	ui_type = "drag"; | ||
|  | 	ui_min = 0.0; | ||
|  | 	ui_max = 2.0; | ||
|  | 	ui_step = 0.05; | ||
|  | 	ui_label = "Phase [Scanlines-Absolute]"; | ||
|  | > = 0.0; | ||
|  | 
 | ||
|  | uniform float lines_black < | ||
|  | 	ui_type = "drag"; | ||
|  | 	ui_min = 0.0; | ||
|  | 	ui_max = 1.0; | ||
|  | 	ui_step = 0.05; | ||
|  | 	ui_label = "Lines Blacks [Scanlines-Absolute]"; | ||
|  | > = 0.0; | ||
|  | 
 | ||
|  | uniform float lines_white < | ||
|  | 	ui_type = "drag"; | ||
|  | 	ui_min = 0.0; | ||
|  | 	ui_max = 2.0; | ||
|  | 	ui_step = 0.05; | ||
|  | 	ui_label = "Lines Whites [Scanlines-Absolute]"; | ||
|  | > = 1.0; | ||
|  |   | ||
|  | #define freq             0.500000 | ||
|  | #define offset           0.000000 | ||
|  | #define pi               3.141592654 | ||
|  | 
 | ||
|  | float4 PS_ScanlinesAbs(float4 pos : SV_POSITION, float2 tex : TEXCOORD0) : SV_TARGET  | ||
|  | { | ||
|  |     float3 color = tex2D(ReShade::BackBuffer, tex).xyz; | ||
|  |     float grid; | ||
|  |   | ||
|  |     float lines; | ||
|  | 	 | ||
|  | 	float omega = 2.0 * pi * freq;  // Angular frequency | ||
|  | 	float angle = tex.y * omega * texture_sizeY + phase; | ||
|  |   | ||
|  |     lines = sin(angle); | ||
|  |     lines *= amp; | ||
|  |     lines += offset; | ||
|  |     lines = abs(lines) * (lines_white - lines_black) + lines_black; | ||
|  |     color *= lines; | ||
|  |   | ||
|  |     return color.xyzz; | ||
|  | } | ||
|  | 
 | ||
|  | technique ScanlinesAbs { | ||
|  | 	pass ScanlinesAbsolute{ | ||
|  | 		VertexShader = PostProcessVS; | ||
|  | 		PixelShader = PS_ScanlinesAbs; | ||
|  | 	} | ||
|  | } |