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/.ini"; if that doesn't exist, try .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); }