mirror of https://github.com/stenzek/duckstation
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			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;
 | 
						|
	}
 | 
						|
}
 |