mirror of
https://github.com/holub/mame
synced 2025-05-31 01:51:46 +03:00

- added special post.fx and distortion.fx shader, which support enabled artworks, but they cannot apply some of the previously implemented corrections (e.g. bloom staircase artifacts when screen is curved, elliptic rounded corners when aspect ratio is not 4:3)
97 lines
2.3 KiB
HLSL
97 lines
2.3 KiB
HLSL
// license:BSD-3-Clause
|
|
// copyright-holders:ImJezze
|
|
//-----------------------------------------------------------------------------
|
|
// Distortion Effect
|
|
//-----------------------------------------------------------------------------
|
|
|
|
texture DiffuseTexture;
|
|
|
|
sampler DiffuseSampler = sampler_state
|
|
{
|
|
Texture = <DiffuseTexture>;
|
|
MipFilter = LINEAR;
|
|
MinFilter = LINEAR;
|
|
MagFilter = LINEAR;
|
|
AddressU = CLAMP;
|
|
AddressV = CLAMP;
|
|
AddressW = CLAMP;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Vertex Definitions
|
|
//-----------------------------------------------------------------------------
|
|
|
|
struct VS_INPUT
|
|
{
|
|
float4 Position : POSITION;
|
|
float4 Color : COLOR0;
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
struct VS_OUTPUT
|
|
{
|
|
float4 Position : POSITION;
|
|
float4 Color : COLOR0;
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
struct PS_INPUT
|
|
{
|
|
float4 Color : COLOR0;
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Distortion Vertex Shader
|
|
//-----------------------------------------------------------------------------
|
|
|
|
uniform float2 ScreenDims; // size of the window or fullscreen
|
|
uniform float2 TargetDims;
|
|
|
|
VS_OUTPUT vs_main(VS_INPUT Input)
|
|
{
|
|
VS_OUTPUT Output = (VS_OUTPUT)0;
|
|
|
|
Output.Position = float4(Input.Position.xyz, 1.0f);
|
|
Output.Position.xy /= ScreenDims;
|
|
Output.Position.y = 1.0f - Output.Position.y; // flip y
|
|
Output.Position.xy -= 0.5f; // center
|
|
Output.Position.xy *= 2.0f; // zoom
|
|
|
|
Output.Color = Input.Color;
|
|
|
|
Output.TexCoord = Input.Position.xy / ScreenDims;
|
|
Output.TexCoord += 0.5f / TargetDims; // half texel offset correction (DX9)
|
|
|
|
return Output;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Post-Processing Pixel Shader
|
|
//-----------------------------------------------------------------------------
|
|
|
|
float4 ps_main(PS_INPUT Input) : COLOR
|
|
{
|
|
float2 BaseCoord = Input.TexCoord;
|
|
|
|
// Color
|
|
float4 BaseColor = tex2D(DiffuseSampler, BaseCoord);
|
|
BaseColor.a = 1.0f;
|
|
|
|
return BaseColor;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Distortion Effect
|
|
//-----------------------------------------------------------------------------
|
|
|
|
technique DistortionTechnique
|
|
{
|
|
pass Pass0
|
|
{
|
|
Lighting = FALSE;
|
|
|
|
VertexShader = compile vs_3_0 vs_main();
|
|
PixelShader = compile ps_3_0 ps_main();
|
|
}
|
|
} |