summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hlsl/distortion.fx6
-rw-r--r--src/emu/emuopts.c26
-rw-r--r--src/emu/emuopts.h2
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.c48
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.h5
-rw-r--r--src/osd/windows/winmain.c4
-rw-r--r--src/osd/windows/winmain.h8
7 files changed, 52 insertions, 47 deletions
diff --git a/hlsl/distortion.fx b/hlsl/distortion.fx
index 61eda38defa..709628bcff9 100644
--- a/hlsl/distortion.fx
+++ b/hlsl/distortion.fx
@@ -206,8 +206,8 @@ float GetRoundCornerFactor(float2 coord, float radiusAmount, float smoothAmount)
float box = roundBox(ScreenDims * RoundCornerCoord, ScreenDims * RatioCorrection, radius);
// apply smooth
- // box *= smooth;
- // box += 1.0f - pow(smooth * 0.5f, 0.5f);
+ box *= smooth;
+ box += 1.0f - pow(smooth * 0.5f, 0.5f);
float border = smoothstep(1.0f, 0.0f, box);
@@ -296,7 +296,7 @@ float4 ps_main(PS_INPUT Input) : COLOR
// Round Corners Simulation
float2 RoundCornerCoord = BaseCoordCentered;
- float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerAmount, 0);
+ float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerAmount, SmoothBorderAmount);
BaseColor.rgb *= roundCornerFactor;
// // test code
diff --git a/src/emu/emuopts.c b/src/emu/emuopts.c
index c7df63d76d1..8d2e6c0e56f 100644
--- a/src/emu/emuopts.c
+++ b/src/emu/emuopts.c
@@ -435,17 +435,23 @@ void emu_options::parse_standard_inis(std::string &error_string)
parse_one_ini("computer", OPTION_PRIORITY_SYSTYPE_INI, &error_string);
else if (cursystem->flags & GAME_TYPE_OTHER)
parse_one_ini("othersys", OPTION_PRIORITY_SYSTYPE_INI, &error_string);
-
- // parse "vector.ini" for vector games
+
+ machine_config config(*cursystem, *this);
+ screen_device_iterator iter(config.root_device());
+ for (const screen_device *device = iter.first(); device != NULL; device = iter.next())
{
- machine_config config(*cursystem, *this);
- screen_device_iterator iter(config.root_device());
- for (const screen_device *device = iter.first(); device != NULL; device = iter.next())
- if (device->screen_type() == SCREEN_TYPE_VECTOR)
- {
- parse_one_ini("vector", OPTION_PRIORITY_VECTOR_INI, &error_string);
- break;
- }
+ // parse "raster.ini" for raster games
+ if (device->screen_type() == SCREEN_TYPE_RASTER)
+ {
+ parse_one_ini("raster", OPTION_PRIORITY_SCREEN_INI, &error_string);
+ break;
+ }
+ // parse "vector.ini" for vector games
+ if (device->screen_type() == SCREEN_TYPE_VECTOR)
+ {
+ parse_one_ini("vector", OPTION_PRIORITY_SCREEN_INI, &error_string);
+ break;
+ }
}
// next parse "source/<sourcefile>.ini"; if that doesn't exist, try <sourcefile>.ini
diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h
index 855e8eb19af..e471edfe95a 100644
--- a/src/emu/emuopts.h
+++ b/src/emu/emuopts.h
@@ -31,7 +31,7 @@ enum
OPTION_PRIORITY_DEBUG_INI,
OPTION_PRIORITY_ORIENTATION_INI,
OPTION_PRIORITY_SYSTYPE_INI,
- OPTION_PRIORITY_VECTOR_INI,
+ OPTION_PRIORITY_SCREEN_INI,
OPTION_PRIORITY_SOURCE_INI,
OPTION_PRIORITY_GPARENT_INI,
OPTION_PRIORITY_PARENT_INI,
diff --git a/src/osd/modules/render/d3d/d3dhlsl.c b/src/osd/modules/render/d3d/d3dhlsl.c
index d8a554e2e49..f03ba272e01 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.c
+++ b/src/osd/modules/render/d3d/d3dhlsl.c
@@ -59,7 +59,7 @@ hlsl_options shaders::s_hlsl_presets[4] =
{ // 25% Shadow mask, 50% Scanlines, 3% Pincushion, 0 defocus, No Tint, 0.9 Exponent, 5% Floor, 25% Phosphor Return, 120% Saturation
true,
0.25f, { "adapture-grill.png" }, 6, 6, 0.1875f, 0.1875f, 0.0f, 0.0f,
- 0.03f, 0.03f, 0.03f, 0.03f,
+ 0.03f, 0.0f, 0.0f, 0.0f, 0.0f,
0.5f, 1.0f, 0.5f, 1.0f, 0.0f, 0.0f,
{ 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
@@ -82,7 +82,7 @@ hlsl_options shaders::s_hlsl_presets[4] =
{ // 25% Shadow mask, 0% Scanlines, 3% Pincushion, 0 defocus, No Tint, 0.9 Exponent, 5% Floor, 25% Phosphor Return, 120% Saturation
true,
0.25f, { "adapture-grill.png" }, 6, 6, 0.1875f, 0.1875f, 0.0f, 0.0f,
- 0.03f, 0.03f, 0.03f, 0.03f,
+ 0.03f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.5f, 1.0f, 0.0f, 0.0f,
{ 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
@@ -105,7 +105,7 @@ hlsl_options shaders::s_hlsl_presets[4] =
{ // 25% Shadow mask, 0% Scanlines, 0% Pincushion, 0 defocus, No Tint, 0.9 Exponent, 5% Floor, 25% Phosphor Return, 120% Saturation
true,
0.25f, { "adapture-grill.png" }, 6, 6, 0.1875f, 0.1875f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.5f, 1.0f, 0.0f, 0.0f,
{ 0.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
@@ -128,7 +128,7 @@ hlsl_options shaders::s_hlsl_presets[4] =
{ // 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,
0.25f, { "adapture-grill.png" }, 6, 6, 0.1875f, 0.1875f, 0.0f, 0.0f,
- 0.15f, 0.15f, 0.15f, 0.15f,
+ 0.15f, 0.0f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.5f, 1.0f, 0.0f, 0.5f,
{ 3.0f, 3.0f },
{ 0.5f,-0.33f,0.7f },
@@ -780,6 +780,7 @@ void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *rende
options->shadow_mask_v_offset = winoptions.screen_shadow_mask_v_offset();
options->curvature = winoptions.screen_curvature();
options->round_corner = winoptions.screen_round_corner();
+ options->smooth_border = winoptions.screen_smooth_border();
options->reflection = winoptions.screen_reflection();
options->vignetting = winoptions.screen_vignetting();
options->scanline_alpha = winoptions.screen_scanline_amount();
@@ -822,8 +823,7 @@ void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *rende
options->yiq_phase_count = winoptions.screen_yiq_phase_count();
options->vector_length_scale = winoptions.screen_vector_length_scale();
options->vector_length_ratio = winoptions.screen_vector_length_ratio();
- options->vector_bloom_scale = winoptions.screen_vector_bloom_scale();
- options->raster_bloom_scale = winoptions.screen_raster_bloom_scale();
+ options->bloom_scale = winoptions.screen_bloom_scale();
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();
@@ -1105,6 +1105,7 @@ int shaders::create_resources(bool reset)
distortion_effect->add_uniform("VignettingAmount", uniform::UT_FLOAT, uniform::CU_POST_VIGNETTING);
distortion_effect->add_uniform("CurvatureAmount", uniform::UT_FLOAT, uniform::CU_POST_CURVATURE);
distortion_effect->add_uniform("RoundCornerAmount", uniform::UT_FLOAT, uniform::CU_POST_ROUND_CORNER);
+ distortion_effect->add_uniform("SmoothBorderAmount", uniform::UT_FLOAT, uniform::CU_POST_SMOOTH_BORDER);
distortion_effect->add_uniform("ReflectionAmount", uniform::UT_FLOAT, uniform::CU_POST_REFLECTION);
vector_effect->add_uniform("ScreenDims", uniform::UT_VEC2, uniform::CU_SCREEN_DIMS);
@@ -1467,9 +1468,7 @@ int shaders::downsample_pass(render_target *rt, int source_index, poly_info *pol
bool prepare_vector =
PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable;
- float bloom_rescale = prepare_vector
- ? options->vector_bloom_scale
- : options->raster_bloom_scale;
+ float bloom_rescale = options->bloom_scale;
// skip downsample if no influencing settings
if (bloom_rescale == 0.0f)
@@ -1513,11 +1512,7 @@ int shaders::bloom_pass(render_target *rt, int source_index, poly_info *poly, in
{
int next_index = source_index;
- bool prepare_vector =
- PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable;
- float bloom_rescale = prepare_vector
- ? options->vector_bloom_scale
- : options->raster_bloom_scale;
+ float bloom_rescale = options->bloom_scale;
// skip bloom if no influencing settings
if (bloom_rescale == 0.0f)
@@ -2355,6 +2350,12 @@ static INT32 slider_round_corner(running_machine &machine, void *arg, std::strin
return slider_set(&(((hlsl_options*)arg)->round_corner), 0.01f, "%2.2f", str, newval);
}
+static INT32 slider_smooth_border(running_machine &machine, void *arg, std::string *str, INT32 newval)
+{
+ ((hlsl_options*)arg)->params_dirty = true;
+ return slider_set(&(((hlsl_options*)arg)->smooth_border), 0.01f, "%2.2f", str, newval);
+}
+
static INT32 slider_reflection(running_machine &machine, void *arg, std::string *str, INT32 newval)
{
((hlsl_options*)arg)->params_dirty = true;
@@ -2649,16 +2650,10 @@ static INT32 slider_vector_length_max(running_machine &machine, void *arg, std::
return slider_set(&(((hlsl_options*)arg)->vector_length_ratio), 1.0f, "%4f", str, newval);
}
-static INT32 slider_vector_bloom_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
+static INT32 slider_bloom_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
{
((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->vector_bloom_scale), 0.001f, "%1.3f", str, newval);
-}
-
-static INT32 slider_raster_bloom_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->raster_bloom_scale), 0.001f, "%1.3f", str, newval);
+ return slider_set(&(((hlsl_options*)arg)->bloom_scale), 0.001f, "%1.3f", str, newval);
}
static INT32 slider_bloom_lvl0_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
@@ -2743,6 +2738,7 @@ shaders::slider_desc shaders::s_sliders[] =
{ "Shadow Mask Offset Y", -100, 0, 100, 1, slider_shadow_mask_voffset },
{ "Screen Curvature", 0, 3, 100, 1, slider_curvature },
{ "Screen Round Corner", 0, 3, 100, 1, slider_round_corner },
+ { "Screen Smooth Border", 0, 3, 100, 1, slider_smooth_border },
{ "Screen Reflection", 0, 3, 100, 1, slider_reflection },
{ "Image Vignetting", 0, 3, 100, 1, slider_vignetting },
{ "Scanline Darkness", 0, 100, 100, 1, slider_scanline_alpha },
@@ -2792,8 +2788,7 @@ shaders::slider_desc shaders::s_sliders[] =
{ "Blue Phosphor Life", 0, 40, 100, 1, slider_blue_phosphor_life },
{ "Vector Length Attenuation", 0, 80, 100, 1, slider_vector_attenuation },
{ "Vector Attenuation Length Limit", 1, 500, 1000, 1, slider_vector_length_max },
- { "Vector Bloom Scale", 0, 300, 1000, 5, slider_vector_bloom_scale },
- { "Raster Bloom Scale", 0, 225, 1000, 5, slider_raster_bloom_scale },
+ { "Bloom Scale", 0, 250, 2000, 5, slider_bloom_scale },
{ "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 },
@@ -3012,6 +3007,9 @@ void uniform::update()
case CU_POST_ROUND_CORNER:
m_shader->set_float("RoundCornerAmount", options->round_corner);
break;
+ case CU_POST_SMOOTH_BORDER:
+ m_shader->set_float("SmoothBorderAmount", options->smooth_border);
+ break;
case CU_POST_SHADOW_ALPHA:
m_shader->set_float("ShadowAlpha", shadersys->shadow_texture == NULL ? 0.0f : options->shadow_mask_alpha);
break;
@@ -3073,7 +3071,7 @@ void uniform::update()
break;
case CU_BLOOM_RESCALE:
- m_shader->set_float("BloomRescale", options->raster_bloom_scale);
+ m_shader->set_float("BloomRescale", options->bloom_scale);
break;
case CU_BLOOM_LVL0123_WEIGHTS:
{
diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h
index 9c6fbaec5eb..3a337d21a87 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.h
+++ b/src/osd/modules/render/d3d/d3dhlsl.h
@@ -79,6 +79,7 @@ public:
CU_POST_VIGNETTING,
CU_POST_CURVATURE,
CU_POST_ROUND_CORNER,
+ CU_POST_SMOOTH_BORDER,
CU_POST_REFLECTION,
CU_POST_SHADOW_ALPHA,
CU_POST_SHADOW_COUNT,
@@ -194,6 +195,7 @@ struct hlsl_options
float shadow_mask_v_offset;
float curvature;
float round_corner;
+ float smooth_border;
float reflection;
float vignetting;
float scanline_alpha;
@@ -236,8 +238,7 @@ struct hlsl_options
float vector_length_ratio;
// Bloom
- float vector_bloom_scale;
- float raster_bloom_scale;
+ float bloom_scale;
float bloom_level0_weight;
float bloom_level1_weight;
float bloom_level2_weight;
diff --git a/src/osd/windows/winmain.c b/src/osd/windows/winmain.c
index 54afff74298..7096f95f20e 100644
--- a/src/osd/windows/winmain.c
+++ b/src/osd/windows/winmain.c
@@ -304,6 +304,7 @@ const options_entry windows_options::s_option_entries[] =
{ WINOPTION_SHADOW_MASK_VOFFSET";fs_shadwov(-1.0-1.0)", "0.0", OPTION_FLOAT, "shadow mask texture offset in V direction" },
{ WINOPTION_CURVATURE";fs_curv(0.0-1.0)", "0.03", OPTION_FLOAT, "screen curvature amount" },
{ WINOPTION_ROUND_CORNER";fs_rndc(0.0-1.0)", "0.03", OPTION_FLOAT, "screen round corner amount" },
+ { WINOPTION_SMOOTH_BORDER";fs_smob(0.0-1.0)", "0.03", OPTION_FLOAT, "screen smooth border amount" },
{ WINOPTION_REFLECTION";fs_ref(0.0-1.0)", "0.03", OPTION_FLOAT, "screen reflection amount" },
{ WINOPTION_VIGNETTING";fs_vig(0.0-1.0)", "0.03", OPTION_FLOAT, "image vignetting amount" },
/* Beam-related values below this line*/
@@ -350,8 +351,7 @@ const options_entry windows_options::s_option_entries[] =
{ WINOPTION_VECTOR_LENGTH_RATIO";vecsize", "500.0", OPTION_FLOAT, "Vector fade length (4.0 - vectors fade the most at and above 4 pixels, etc.)" },
/* Bloom below this line */
{ NULL, NULL, OPTION_HEADER, "BLOOM POST-PROCESSING OPTIONS" },
- { WINOPTION_VECTOR_BLOOM_SCALE, "0.3", OPTION_FLOAT, "Intensity factor for vector bloom" },
- { WINOPTION_RASTER_BLOOM_SCALE, "0.225", OPTION_FLOAT, "Intensity factor for raster bloom" },
+ { WINOPTION_BLOOM_SCALE, "0.25", OPTION_FLOAT, "Intensity 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" },
diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h
index 3d0e035701d..dcb2fdcd1c0 100644
--- a/src/osd/windows/winmain.h
+++ b/src/osd/windows/winmain.h
@@ -48,6 +48,7 @@
#define WINOPTION_REFLECTION "reflection"
#define WINOPTION_CURVATURE "curvature"
#define WINOPTION_ROUND_CORNER "round_corner"
+#define WINOPTION_SMOOTH_BORDER "smooth_border"
#define WINOPTION_VIGNETTING "vignetting"
#define WINOPTION_SCANLINE_AMOUNT "scanline_alpha"
#define WINOPTION_SCANLINE_SCALE "scanline_size"
@@ -83,9 +84,8 @@
#define WINOPTION_YIQ_PHASE_COUNT "yiq_phase_count"
#define WINOPTION_VECTOR_LENGTH_SCALE "vector_length_scale"
#define WINOPTION_VECTOR_LENGTH_RATIO "vector_length_ratio"
-#define WINOPTION_VECTOR_BLOOM_SCALE "vector_bloom_scale"
#define WINOPTION_VECTOR_TIME_PERIOD "vector_time_period"
-#define WINOPTION_RASTER_BLOOM_SCALE "raster_bloom_scale"
+#define WINOPTION_BLOOM_SCALE "bloom_scale"
#define WINOPTION_BLOOM_LEVEL0_WEIGHT "bloom_lvl0_weight"
#define WINOPTION_BLOOM_LEVEL1_WEIGHT "bloom_lvl1_weight"
#define WINOPTION_BLOOM_LEVEL2_WEIGHT "bloom_lvl2_weight"
@@ -155,6 +155,7 @@ public:
float screen_reflection() const { return float_value(WINOPTION_REFLECTION); }
float screen_curvature() const { return float_value(WINOPTION_CURVATURE); }
float screen_round_corner() const { return float_value(WINOPTION_ROUND_CORNER); }
+ float screen_smooth_border() const { return float_value(WINOPTION_SMOOTH_BORDER); }
float screen_vignetting() const { return float_value(WINOPTION_VIGNETTING); }
const char *screen_defocus() const { return value(WINOPTION_DEFOCUS); }
const char *screen_converge_x() const { return value(WINOPTION_CONVERGE_X); }
@@ -178,9 +179,8 @@ public:
int screen_yiq_phase_count() const { return int_value(WINOPTION_YIQ_PHASE_COUNT); }
float screen_vector_length_scale() const { return float_value(WINOPTION_VECTOR_LENGTH_SCALE); }
float screen_vector_length_ratio() const { return float_value(WINOPTION_VECTOR_LENGTH_RATIO); }
- float screen_vector_bloom_scale() const { return float_value(WINOPTION_VECTOR_BLOOM_SCALE); }
float screen_vector_time_period() const { return float_value(WINOPTION_VECTOR_TIME_PERIOD); }
- float screen_raster_bloom_scale() const { return float_value(WINOPTION_RASTER_BLOOM_SCALE); }
+ float screen_bloom_scale() const { return float_value(WINOPTION_BLOOM_SCALE); }
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); }