mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
Bloom Overdrive
- added experimental bloom overdrive effect and options, this effect allows to overdrive pure colors like red, green and blue to become more brighter - added lcd.ini to parse_standard_inis()
This commit is contained in:
parent
81c15decf8
commit
534cd86c17
@ -240,6 +240,8 @@ uniform float4 Level0123Weight;
|
||||
uniform float4 Level4567Weight;
|
||||
uniform float3 Level89AWeight;
|
||||
|
||||
uniform float3 OverdriveWeight;
|
||||
|
||||
float3 GetNoiseFactor(float3 n, float random)
|
||||
{
|
||||
// smaller n become more noisy
|
||||
@ -284,6 +286,15 @@ float4 ps_main(PS_INPUT Input) : COLOR
|
||||
texel9 +
|
||||
texelA);
|
||||
|
||||
float3 bloomOverdrive = max(0.0f, texel0 + bloom - 1.0f) * OverdriveWeight;
|
||||
|
||||
bloom.r += bloomOverdrive.g * 0.5f;
|
||||
bloom.r += bloomOverdrive.b * 0.5f;
|
||||
bloom.g += bloomOverdrive.r * 0.5f;
|
||||
bloom.g += bloomOverdrive.b * 0.5f;
|
||||
bloom.b += bloomOverdrive.r * 0.5f;
|
||||
bloom.b += bloomOverdrive.g * 0.5f;
|
||||
|
||||
float2 NoiseCoord = Input.TexCoord01.xy;
|
||||
float3 NoiseFactor = GetNoiseFactor(bloom, random(NoiseCoord));
|
||||
|
||||
@ -291,7 +302,7 @@ float4 ps_main(PS_INPUT Input) : COLOR
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Downsample Effect
|
||||
// Bloom Effect
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
technique TestTechnique
|
||||
|
@ -452,6 +452,12 @@ void emu_options::parse_standard_inis(std::string &error_string)
|
||||
parse_one_ini("vector", OPTION_PRIORITY_SCREEN_INI, &error_string);
|
||||
break;
|
||||
}
|
||||
// parse "lcd.ini" for lcd games
|
||||
if (device->screen_type() == SCREEN_TYPE_LCD)
|
||||
{
|
||||
parse_one_ini("lcd", OPTION_PRIORITY_SCREEN_INI, &error_string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// next parse "source/<sourcefile>.ini"; if that doesn't exist, try <sourcefile>.ini
|
||||
|
@ -77,7 +77,9 @@ hlsl_options shaders::s_hlsl_presets[4] =
|
||||
1.2f,
|
||||
false, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0,
|
||||
0.9f, 4.0f,
|
||||
1.0f, 0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
1.0f,
|
||||
{ 0.0f, 0.0f, 0.0f },
|
||||
0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
},
|
||||
{ // 25% Shadow mask, 0% Scanlines, 3% Pincushion, 0 defocus, No Tint, 0.9 Exponent, 5% Floor, 25% Phosphor Return, 120% Saturation
|
||||
true,
|
||||
@ -100,7 +102,9 @@ hlsl_options shaders::s_hlsl_presets[4] =
|
||||
1.2f,
|
||||
false, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0,
|
||||
0.9f, 4.0f,
|
||||
1.0f, 0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
1.0f,
|
||||
{ 0.0f, 0.0f, 0.0f },
|
||||
0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
},
|
||||
{ // 25% Shadow mask, 0% Scanlines, 0% Pincushion, 0 defocus, No Tint, 0.9 Exponent, 5% Floor, 25% Phosphor Return, 120% Saturation
|
||||
true,
|
||||
@ -123,7 +127,9 @@ hlsl_options shaders::s_hlsl_presets[4] =
|
||||
1.2f,
|
||||
false, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0,
|
||||
0.9f, 4.0f,
|
||||
1.0f, 0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
1.0f,
|
||||
{ 0.0f, 0.0f, 0.0f },
|
||||
0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
},
|
||||
{ // 25% Shadow mask, 100% Scanlines, 15% Pincushion, 3 defocus, 24-degree Tint Out, 1.5 Exponent, 5% Floor, 70% Phosphor Return, 80% Saturation, Bad Convergence
|
||||
true,
|
||||
@ -146,7 +152,9 @@ hlsl_options shaders::s_hlsl_presets[4] =
|
||||
0.8f,
|
||||
false, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0,
|
||||
0.9f, 4.0f,
|
||||
1.0f, 0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
1.0f,
|
||||
{ 0.0f, 0.0f, 0.0f },
|
||||
0.21f, 0.19f, 0.17f, 0.15f, 0.14f, 0.13f, 0.12f, 0.11f, 0.10f, 0.09f
|
||||
},
|
||||
};
|
||||
|
||||
@ -824,6 +832,7 @@ void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *rende
|
||||
options->vector_length_scale = winoptions.screen_vector_length_scale();
|
||||
options->vector_length_ratio = winoptions.screen_vector_length_ratio();
|
||||
options->bloom_scale = winoptions.screen_bloom_scale();
|
||||
get_vector(winoptions.screen_bloom_overdrive(), 3, options->bloom_overdrive, TRUE);
|
||||
options->bloom_level0_weight = winoptions.screen_bloom_lvl0_weight();
|
||||
options->bloom_level1_weight = winoptions.screen_bloom_lvl1_weight();
|
||||
options->bloom_level2_weight = winoptions.screen_bloom_lvl2_weight();
|
||||
@ -1550,6 +1559,8 @@ int shaders::bloom_pass(render_target *rt, int source_index, poly_info *poly, in
|
||||
curr_effect->set_vector("Level89Size", 4, bloom_dims[8]);
|
||||
curr_effect->set_vector("LevelASize", 2, bloom_dims[10]);
|
||||
|
||||
curr_effect->set_vector("OverdriveWeight", 3, options->bloom_overdrive);
|
||||
|
||||
curr_effect->set_texture("DiffuseA", rt->prescale_texture[next_index]);
|
||||
|
||||
char name[9] = "Diffuse*";
|
||||
@ -2656,6 +2667,24 @@ static INT32 slider_bloom_scale(running_machine &machine, void *arg, std::string
|
||||
return slider_set(&(((hlsl_options*)arg)->bloom_scale), 0.001f, "%1.3f", str, newval);
|
||||
}
|
||||
|
||||
static INT32 slider_bloom_red_overdrive(running_machine &machine, void *arg, std::string *str, INT32 newval)
|
||||
{
|
||||
((hlsl_options*)arg)->params_dirty = true;
|
||||
return slider_set(&(((hlsl_options*)arg)->bloom_overdrive[0]), 0.001f, "%1.3f", str, newval);
|
||||
}
|
||||
|
||||
static INT32 slider_bloom_green_overdrive(running_machine &machine, void *arg, std::string *str, INT32 newval)
|
||||
{
|
||||
((hlsl_options*)arg)->params_dirty = true;
|
||||
return slider_set(&(((hlsl_options*)arg)->bloom_overdrive[1]), 0.001f, "%1.3f", str, newval);
|
||||
}
|
||||
|
||||
static INT32 slider_bloom_blue_overdrive(running_machine &machine, void *arg, std::string *str, INT32 newval)
|
||||
{
|
||||
((hlsl_options*)arg)->params_dirty = true;
|
||||
return slider_set(&(((hlsl_options*)arg)->bloom_overdrive[2]), 0.001f, "%1.3f", str, newval);
|
||||
}
|
||||
|
||||
static INT32 slider_bloom_lvl0_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
|
||||
{
|
||||
((hlsl_options*)arg)->params_dirty = true;
|
||||
@ -2789,6 +2818,9 @@ shaders::slider_desc shaders::s_sliders[] =
|
||||
{ "Vector Length Attenuation", 0, 80, 100, 1, slider_vector_attenuation },
|
||||
{ "Vector Attenuation Length Limit", 1, 500, 1000, 1, slider_vector_length_max },
|
||||
{ "Bloom Scale", 0, 250, 2000, 5, slider_bloom_scale },
|
||||
{ "Bloom Red Overdrive", 0, 250, 2000, 5, slider_bloom_red_overdrive },
|
||||
{ "Bloom Green Overdrive", 0, 250, 2000, 5, slider_bloom_green_overdrive },
|
||||
{ "Bloom Blue Overdrive", 0, 250, 2000, 5, slider_bloom_blue_overdrive },
|
||||
{ "Bloom Level 0 Scale", 0, 100, 100, 1, slider_bloom_lvl0_scale },
|
||||
{ "Bloom Level 1 Scale", 0, 21, 100, 1, slider_bloom_lvl1_scale },
|
||||
{ "Bloom Level 2 Scale", 0, 19, 100, 1, slider_bloom_lvl2_scale },
|
||||
|
@ -239,6 +239,7 @@ struct hlsl_options
|
||||
|
||||
// Bloom
|
||||
float bloom_scale;
|
||||
float bloom_overdrive[3];
|
||||
float bloom_level0_weight;
|
||||
float bloom_level1_weight;
|
||||
float bloom_level2_weight;
|
||||
|
@ -352,6 +352,7 @@ const options_entry windows_options::s_option_entries[] =
|
||||
/* Bloom below this line */
|
||||
{ NULL, NULL, OPTION_HEADER, "BLOOM POST-PROCESSING OPTIONS" },
|
||||
{ WINOPTION_BLOOM_SCALE, "0.25", OPTION_FLOAT, "Intensity factor for bloom" },
|
||||
{ WINOPTION_BLOOM_OVERDRIVE, "0.0,0.0,0.0",OPTION_STRING, "Overdrive factor for bloom" },
|
||||
{ WINOPTION_BLOOM_LEVEL0_WEIGHT, "1.0", OPTION_FLOAT, "Bloom level 0 (full-size target) weight" },
|
||||
{ WINOPTION_BLOOM_LEVEL1_WEIGHT, "0.21", OPTION_FLOAT, "Bloom level 1 (half-size target) weight" },
|
||||
{ WINOPTION_BLOOM_LEVEL2_WEIGHT, "0.19", OPTION_FLOAT, "Bloom level 2 (quarter-size target) weight" },
|
||||
|
@ -86,6 +86,7 @@
|
||||
#define WINOPTION_VECTOR_LENGTH_RATIO "vector_length_ratio"
|
||||
#define WINOPTION_VECTOR_TIME_PERIOD "vector_time_period"
|
||||
#define WINOPTION_BLOOM_SCALE "bloom_scale"
|
||||
#define WINOPTION_BLOOM_OVERDRIVE "bloom_overdrive"
|
||||
#define WINOPTION_BLOOM_LEVEL0_WEIGHT "bloom_lvl0_weight"
|
||||
#define WINOPTION_BLOOM_LEVEL1_WEIGHT "bloom_lvl1_weight"
|
||||
#define WINOPTION_BLOOM_LEVEL2_WEIGHT "bloom_lvl2_weight"
|
||||
@ -181,6 +182,7 @@ public:
|
||||
float screen_vector_length_ratio() const { return float_value(WINOPTION_VECTOR_LENGTH_RATIO); }
|
||||
float screen_vector_time_period() const { return float_value(WINOPTION_VECTOR_TIME_PERIOD); }
|
||||
float screen_bloom_scale() const { return float_value(WINOPTION_BLOOM_SCALE); }
|
||||
const char *screen_bloom_overdrive() const { return value(WINOPTION_BLOOM_OVERDRIVE); }
|
||||
float screen_bloom_lvl0_weight() const { return float_value(WINOPTION_BLOOM_LEVEL0_WEIGHT); }
|
||||
float screen_bloom_lvl1_weight() const { return float_value(WINOPTION_BLOOM_LEVEL1_WEIGHT); }
|
||||
float screen_bloom_lvl2_weight() const { return float_value(WINOPTION_BLOOM_LEVEL2_WEIGHT); }
|
||||
|
Loading…
Reference in New Issue
Block a user