mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-12-02 10:35:39 +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;
|
||
|
}
|
||
|
}
|