177 lines
4.2 KiB
HLSL
177 lines
4.2 KiB
HLSL
/*------------------.
|
|
| :: Description :: |
|
|
'-------------------/
|
|
|
|
Splitscreen (version 2.0)
|
|
|
|
Author: CeeJay.dk
|
|
License: MIT
|
|
|
|
About:
|
|
Displays the image before and after it has been modified by effects using a splitscreen
|
|
|
|
|
|
Ideas for future improvement:
|
|
*
|
|
|
|
History:
|
|
(*) Feature (+) Improvement (x) Bugfix (-) Information (!) Compatibility
|
|
|
|
Version 1.0
|
|
* Does a splitscreen before/after view
|
|
|
|
Version 2.0
|
|
* Ported to Reshade 3.x
|
|
* Added UI settings.
|
|
* Added Diagonal split mode
|
|
- Removed curvy mode. I didn't like how it looked.
|
|
- Threatened other modes to behave or they would be next.
|
|
*/
|
|
|
|
/*------------------.
|
|
| :: UI Settings :: |
|
|
'------------------*/
|
|
|
|
#include "ReShadeUI.fxh"
|
|
|
|
uniform int splitscreen_mode <
|
|
ui_type = "combo";
|
|
ui_label = "Mode";
|
|
ui_tooltip = "Choose a mode";
|
|
//ui_category = "";
|
|
ui_items =
|
|
"Vertical 50/50 split\0"
|
|
"Vertical 25/50/25 split\0"
|
|
"Angled 50/50 split\0"
|
|
"Angled 25/50/25 split\0"
|
|
"Horizontal 50/50 split\0"
|
|
"Horizontal 25/50/25 split\0"
|
|
"Diagonal split\0"
|
|
;
|
|
> = 0;
|
|
|
|
/*---------------.
|
|
| :: Includes :: |
|
|
'---------------*/
|
|
|
|
#include "ReShade.fxh"
|
|
|
|
|
|
/*-------------------------.
|
|
| :: Texture and sampler:: |
|
|
'-------------------------*/
|
|
|
|
texture Before { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; };
|
|
sampler Before_sampler { Texture = Before; };
|
|
|
|
|
|
/*-------------.
|
|
| :: Effect :: |
|
|
'-------------*/
|
|
|
|
float4 PS_Before(float4 pos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
|
|
{
|
|
return tex2D(ReShade::BackBuffer, texcoord);
|
|
}
|
|
|
|
float4 PS_After(float4 pos : SV_Position, float2 texcoord : TEXCOORD) : SV_Target
|
|
{
|
|
float4 color;
|
|
|
|
// -- Vertical 50/50 split --
|
|
[branch] if (splitscreen_mode == 0)
|
|
color = (texcoord.x < 0.5 ) ? tex2D(Before_sampler, texcoord) : tex2D(ReShade::BackBuffer, texcoord);
|
|
|
|
// -- Vertical 25/50/25 split --
|
|
[branch] if (splitscreen_mode == 1)
|
|
{
|
|
//Calculate the distance from center
|
|
float dist = abs(texcoord.x - 0.5);
|
|
|
|
//Further than 1/4 away from center?
|
|
dist = saturate(dist - 0.25);
|
|
|
|
color = dist ? tex2D(Before_sampler, texcoord) : tex2D(ReShade::BackBuffer, texcoord);
|
|
}
|
|
|
|
// -- Angled 50/50 split --
|
|
[branch] if (splitscreen_mode == 2)
|
|
{
|
|
//Calculate the distance from center
|
|
float dist = ((texcoord.x - 3.0/8.0) + (texcoord.y * 0.25));
|
|
|
|
//Further than 1/4 away from center?
|
|
dist = saturate(dist - 0.25);
|
|
|
|
color = dist ? tex2D(ReShade::BackBuffer, texcoord) : tex2D(Before_sampler, texcoord);
|
|
}
|
|
|
|
// -- Angled 25/50/25 split --
|
|
[branch] if (splitscreen_mode == 3)
|
|
{
|
|
//Calculate the distance from center
|
|
float dist = ((texcoord.x - 3.0/8.0) + (texcoord.y * 0.25));
|
|
|
|
dist = abs(dist - 0.25);
|
|
|
|
//Further than 1/4 away from center?
|
|
dist = saturate(dist - 0.25);
|
|
|
|
color = dist ? tex2D(Before_sampler, texcoord) : tex2D(ReShade::BackBuffer, texcoord);
|
|
}
|
|
|
|
// -- Horizontal 50/50 split --
|
|
[branch] if (splitscreen_mode == 4)
|
|
color = (texcoord.y < 0.5) ? tex2D(Before_sampler, texcoord) : tex2D(ReShade::BackBuffer, texcoord);
|
|
|
|
// -- Horizontal 25/50/25 split --
|
|
[branch] if (splitscreen_mode == 5)
|
|
{
|
|
//Calculate the distance from center
|
|
float dist = abs(texcoord.y - 0.5);
|
|
|
|
//Further than 1/4 away from center?
|
|
dist = saturate(dist - 0.25);
|
|
|
|
color = dist ? tex2D(Before_sampler, texcoord) : tex2D(ReShade::BackBuffer, texcoord);
|
|
}
|
|
|
|
// -- Diagonal split --
|
|
[branch] if (splitscreen_mode == 6)
|
|
{
|
|
//Calculate the distance from center
|
|
float dist = (texcoord.x + texcoord.y);
|
|
|
|
//Further than 1/2 away from center?
|
|
//dist = saturate(dist - 1.0);
|
|
|
|
color = (dist < 1.0) ? tex2D(Before_sampler, texcoord) : tex2D(ReShade::BackBuffer, texcoord);
|
|
}
|
|
|
|
return color;
|
|
}
|
|
|
|
|
|
/*-----------------.
|
|
| :: Techniques :: |
|
|
'-----------------*/
|
|
|
|
technique Before
|
|
{
|
|
pass
|
|
{
|
|
VertexShader = PostProcessVS;
|
|
PixelShader = PS_Before;
|
|
RenderTarget = Before;
|
|
}
|
|
}
|
|
|
|
technique After
|
|
{
|
|
pass
|
|
{
|
|
VertexShader = PostProcessVS;
|
|
PixelShader = PS_After;
|
|
}
|
|
}
|