mirror of
https://github.com/mamedev/mame.git
synced 2024-11-18 10:06:19 +01:00
a70198a5fb
- changed shadow mask implementation, shadow count XY now represent the number of pixel the shadow UV sized tiles will take on the screen - implemented rotation of the shadow mask texture depending on the default landscape or portrait view of the screen - removed prescale and pixel border of the shadow mask texture - added option to change the shadow UV offset, to reduce the color bleeding of the shadow mask - adjusted presets to work with the changed mask implementation - reduced defocus offset - improved downsampling for better blurring - improved alignment of bloom layers (raster and vector) - applied bloom effect to the render output of screenshot and AVI recording - changed curvature effect to fit screen size - changed scanlines to be not rendered into bloom layers - changed shadow mask to be not rendered into bloom layers - changed color floor to not light the bloom layers - changed shadow mask to not dark the color floor - added image vignetting simulation and option - added round screen corner simulation and option - added screen light reflection simulation and option - made usage of unused brightness offset (additive) - removed unused pincushion option - removed duplicate shadow count Y options - removed artwork/adapture.png - added artwork/adapture-grill.png - added artwork/shadow-mask.png - added artwork/slot-mask.png - added hlsl/simple.fx - removed unused shaders::blit() function - added shaders::screen_pass() function, which handles the (raster-)rendering on screen, into screenshot and AVI recording - added effect:set_bool() function
123 lines
3.3 KiB
HLSL
123 lines
3.3 KiB
HLSL
//-----------------------------------------------------------------------------
|
|
// Effect File Variables
|
|
//-----------------------------------------------------------------------------
|
|
|
|
texture DiffuseTexture;
|
|
|
|
sampler DiffuseSampler = sampler_state
|
|
{
|
|
Texture = <DiffuseTexture>;
|
|
MipFilter = LINEAR;
|
|
MinFilter = LINEAR;
|
|
MagFilter = LINEAR;
|
|
AddressU = CLAMP;
|
|
AddressV = CLAMP;
|
|
AddressW = CLAMP;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Vertex Definitions
|
|
//-----------------------------------------------------------------------------
|
|
|
|
struct VS_OUTPUT
|
|
{
|
|
float4 Position : POSITION;
|
|
float4 Color : COLOR0;
|
|
float4 TexCoord01 : TEXCOORD0;
|
|
float4 TexCoord23 : TEXCOORD1;
|
|
};
|
|
|
|
struct VS_INPUT
|
|
{
|
|
float3 Position : POSITION;
|
|
float4 Color : COLOR0;
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
struct PS_INPUT
|
|
{
|
|
float4 Color : COLOR0;
|
|
float4 TexCoord01 : TEXCOORD0;
|
|
float4 TexCoord23 : TEXCOORD1;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Downsample Vertex Shader
|
|
//-----------------------------------------------------------------------------
|
|
|
|
uniform float2 ScreenDims;
|
|
uniform float2 TargetSize;
|
|
|
|
uniform float2 Prescale = float2(8.0f, 8.0f);
|
|
|
|
uniform float BloomRescale;
|
|
|
|
uniform bool PrepareVector = false;
|
|
|
|
VS_OUTPUT vs_main(VS_INPUT Input)
|
|
{
|
|
VS_OUTPUT Output = (VS_OUTPUT)0;
|
|
|
|
float2 TargetTexelSize = 1.0f / TargetSize;
|
|
|
|
Output.Position = float4(Input.Position.xyz, 1.0f);
|
|
Output.Position.xy /= ScreenDims;
|
|
Output.Position.y = 1.0f - Output.Position.y;
|
|
Output.Position.xy -= 0.5f;
|
|
Output.Position.xy *= 2.0f;
|
|
|
|
Output.Color = Input.Color;
|
|
|
|
float2 TexCoord = Input.Position.xy / ScreenDims;
|
|
|
|
// Vector graphics is not prescaled it has the size of the screen
|
|
if (PrepareVector)
|
|
{
|
|
Output.TexCoord01.xy = TexCoord + float2(-0.5f, -0.5f) * TargetTexelSize;
|
|
Output.TexCoord01.zw = TexCoord + float2( 0.5f, -0.5f) * TargetTexelSize;
|
|
Output.TexCoord23.xy = TexCoord + float2(-0.5f, 0.5f) * TargetTexelSize;
|
|
Output.TexCoord23.zw = TexCoord + float2( 0.5f, 0.5f) * TargetTexelSize;
|
|
}
|
|
else
|
|
{
|
|
Output.TexCoord01.xy = TexCoord + float2(-0.5f, -0.5f) * TargetTexelSize * Prescale;
|
|
Output.TexCoord01.zw = TexCoord + float2( 0.5f, -0.5f) * TargetTexelSize * Prescale;
|
|
Output.TexCoord23.xy = TexCoord + float2(-0.5f, 0.5f) * TargetTexelSize * Prescale;
|
|
Output.TexCoord23.zw = TexCoord + float2( 0.5f, 0.5f) * TargetTexelSize * Prescale;
|
|
}
|
|
|
|
return Output;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Downsample Pixel Shader
|
|
//-----------------------------------------------------------------------------
|
|
|
|
float4 ps_main(PS_INPUT Input) : COLOR
|
|
{
|
|
float4 texel0 = tex2D(DiffuseSampler, Input.TexCoord01.xy);
|
|
float4 texel1 = tex2D(DiffuseSampler, Input.TexCoord01.zw);
|
|
float4 texel2 = tex2D(DiffuseSampler, Input.TexCoord23.xy);
|
|
float4 texel3 = tex2D(DiffuseSampler, Input.TexCoord23.zw);
|
|
|
|
float4 outTexel = (texel0 + texel1 + texel2 + texel3) / 4.0 * BloomRescale;
|
|
|
|
return float4(outTexel.rgb, 1.0f);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Downsample Effect
|
|
//-----------------------------------------------------------------------------
|
|
|
|
technique TestTechnique
|
|
{
|
|
pass Pass0
|
|
{
|
|
Lighting = FALSE;
|
|
|
|
Sampler[0] = <DiffuseSampler>;
|
|
|
|
VertexShader = compile vs_2_0 vs_main();
|
|
PixelShader = compile ps_2_0 ps_main();
|
|
}
|
|
}
|