mirror of
				https://github.com/RetroDECK/Duckstation.git
				synced 2025-04-10 19:15:14 +00:00 
			
		
		
		
	
		
			
	
	
		
			81 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			HLSL
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			HLSL
		
	
	
	
	
	
|   | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | // ReShade effect file | ||
|  | // visit facebook.com/MartyMcModding for news/updates | ||
|  | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | // Marty's LUT shader 1.0 for ReShade 3.0 | ||
|  | // Copyright © 2008-2016 Marty McFly | ||
|  | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | 
 | ||
|  | #ifndef fLUT_TextureName | ||
|  | 	#define fLUT_TextureName "lut.png" | ||
|  | #endif | ||
|  | #ifndef fLUT_TileSizeXY | ||
|  | 	#define fLUT_TileSizeXY 32 | ||
|  | #endif | ||
|  | #ifndef fLUT_TileAmount | ||
|  | 	#define fLUT_TileAmount 32 | ||
|  | #endif | ||
|  | 
 | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | // | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | 
 | ||
|  | #include "ReShadeUI.fxh" | ||
|  | 
 | ||
|  | uniform float fLUT_AmountChroma < __UNIFORM_SLIDER_FLOAT1 | ||
|  | 	ui_min = 0.00; ui_max = 1.00; | ||
|  | 	ui_label = "LUT chroma amount"; | ||
|  | 	ui_tooltip = "Intensity of color/chroma change of the LUT."; | ||
|  | > = 1.00; | ||
|  | 
 | ||
|  | uniform float fLUT_AmountLuma < __UNIFORM_SLIDER_FLOAT1 | ||
|  | 	ui_min = 0.00; ui_max = 1.00; | ||
|  | 	ui_label = "LUT luma amount"; | ||
|  | 	ui_tooltip = "Intensity of luma change of the LUT."; | ||
|  | > = 1.00; | ||
|  | 
 | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | // | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | 
 | ||
|  | #include "ReShade.fxh" | ||
|  | texture texLUT < source = fLUT_TextureName; > { Width = fLUT_TileSizeXY*fLUT_TileAmount; Height = fLUT_TileSizeXY; Format = RGBA8; }; | ||
|  | sampler	SamplerLUT 	{ Texture = texLUT; }; | ||
|  | 
 | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | // | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | 
 | ||
|  | void PS_LUT_Apply(float4 vpos : SV_Position, float2 texcoord : TEXCOORD, out float4 res : SV_Target0) | ||
|  | { | ||
|  | 	float4 color = tex2D(ReShade::BackBuffer, texcoord.xy); | ||
|  | 	float2 texelsize = 1.0 / fLUT_TileSizeXY; | ||
|  | 	texelsize.x /= fLUT_TileAmount; | ||
|  | 
 | ||
|  | 	float3 lutcoord = float3((color.xy*fLUT_TileSizeXY-color.xy+0.5)*texelsize.xy,color.z*fLUT_TileSizeXY-color.z); | ||
|  | 	float lerpfact = frac(lutcoord.z); | ||
|  | 	lutcoord.x += (lutcoord.z-lerpfact)*texelsize.y; | ||
|  | 
 | ||
|  | 	float3 lutcolor = lerp(tex2D(SamplerLUT, lutcoord.xy).xyz, tex2D(SamplerLUT, float2(lutcoord.x+texelsize.y,lutcoord.y)).xyz,lerpfact); | ||
|  | 
 | ||
|  | 	color.xyz = lerp(normalize(color.xyz), normalize(lutcolor.xyz), fLUT_AmountChroma) *  | ||
|  | 	            lerp(length(color.xyz),    length(lutcolor.xyz),    fLUT_AmountLuma); | ||
|  | 
 | ||
|  | 	res.xyz = color.xyz; | ||
|  | 	res.w = 1.0; | ||
|  | } | ||
|  | 
 | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | // | ||
|  | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
|  | 
 | ||
|  | 
 | ||
|  | technique LUT | ||
|  | { | ||
|  | 	pass LUT_Apply | ||
|  | 	{ | ||
|  | 		VertexShader = PostProcessVS; | ||
|  | 		PixelShader = PS_LUT_Apply; | ||
|  | 	} | ||
|  | } |