diff options
author | Vas Crabb <vas@vastheman.com> | 2021-11-25 01:55:53 +1100 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2021-11-25 01:55:53 +1100 |
commit | c378ea087097d75cd7f4fb69da062048eaaae5e6 (patch) | |
tree | 0711e315d3d2a7fc74cae27f6faea01a6af37f34 /src/emu | |
parent | 4e74563abb4c8b385baa72d0c2d5f3987fa88652 (diff) |
A little more refactoring, and Coverity fixes:
* emu/ioport.h: Marked PORT_RESET deprecated.
* emu/rendlay.cpp: Removed old dot matrix components.
* emu/rendlay.cpp: Added warning message for reel components.
* Changed a few more fruit machines to eliminate reel components; also
made the reel lamps simpler and more efficient in these layouts.
* emu, frontend: Fixed various errors reported by Coverity, one of which
actaully breaks stuff.
Diffstat (limited to 'src/emu')
-rw-r--r-- | src/emu/ioport.h | 2 | ||||
-rw-r--r-- | src/emu/rendersw.hxx | 61 | ||||
-rw-r--r-- | src/emu/rendlay.cpp | 58 | ||||
-rw-r--r-- | src/emu/rendlay.h | 1 |
4 files changed, 25 insertions, 97 deletions
diff --git a/src/emu/ioport.h b/src/emu/ioport.h index 59f14b094d5..c767d44c250 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -914,6 +914,7 @@ public: { m_condition = condition; m_tag = tag; + m_port = nullptr; m_mask = mask; m_value = value; } @@ -1488,6 +1489,7 @@ public: ioport_configurer& field_set_toggle() { m_curfield->m_flags |= ioport_field::FIELD_FLAG_TOGGLE; return *this; } ioport_configurer& field_set_impulse(u8 impulse) { m_curfield->m_impulse = impulse; return *this; } ioport_configurer& field_set_analog_reverse() { m_curfield->m_flags |= ioport_field::ANALOG_FLAG_REVERSE; return *this; } + [[deprecated("PORT_RESET is deprecated; manage counter state explicitly")]] ioport_configurer& field_set_analog_reset() { m_curfield->m_flags |= ioport_field::ANALOG_FLAG_RESET; return *this; } ioport_configurer& field_set_optional() { m_curfield->m_flags |= ioport_field::FIELD_FLAG_OPTIONAL; return *this; } ioport_configurer& field_set_min_max(ioport_value minval, ioport_value maxval) { m_curfield->m_min = minval; m_curfield->m_max = maxval; return *this; } diff --git a/src/emu/rendersw.hxx b/src/emu/rendersw.hxx index 840f7fa5d8a..aca64c36ace 100644 --- a/src/emu/rendersw.hxx +++ b/src/emu/rendersw.hxx @@ -578,47 +578,33 @@ private: static void draw_rect(const render_primitive &prim, PixelType *dstdata, s32 width, s32 height, u32 pitch) { - render_bounds fpos = prim.bounds; + render_bounds const fpos = prim.bounds; assert(fpos.x0 <= fpos.x1); assert(fpos.y0 <= fpos.y1); - // clamp to integers - s32 startx = round_nearest(fpos.x0); - s32 starty = round_nearest(fpos.y0); - s32 endx = round_nearest(fpos.x1); - s32 endy = round_nearest(fpos.y1); - - // ensure we fit - if (startx < 0) startx = 0; - if (startx >= width) startx = width; - if (endx < 0) endx = 0; - if (endx >= width) endx = width; - if (starty < 0) starty = 0; - if (starty >= height) starty = height; - if (endy < 0) endy = 0; - if (endy >= height) endy = height; + // clamp to integers and ensure we fit + s32 const startx = std::clamp<s32>(round_nearest(fpos.x0), 0, width); + s32 const starty = std::clamp<s32>(round_nearest(fpos.y0), 0, width); + s32 const endx = std::clamp<s32>(round_nearest(fpos.x1), 0, height); + s32 const endy = std::clamp<s32>(round_nearest(fpos.y1), 0, height); // bail if nothing left - if (fpos.x0 > fpos.x1 || fpos.y0 > fpos.y1) + if ((startx > endx) || (starty > endy)) return; // only support alpha and "none" blendmodes assert(PRIMFLAG_GET_BLENDMODE(prim.flags) == BLENDMODE_NONE || PRIMFLAG_GET_BLENDMODE(prim.flags) == BLENDMODE_ALPHA); - // fast case: no alpha - if (PRIMFLAG_GET_BLENDMODE(prim.flags) == BLENDMODE_NONE || is_opaque(prim.color.a)) + if ((PRIMFLAG_GET_BLENDMODE(prim.flags) == BLENDMODE_NONE) || is_opaque(prim.color.a)) { - u32 r = u32(256.0f * prim.color.r); - u32 g = u32(256.0f * prim.color.g); - u32 b = u32(256.0f * prim.color.b); - u32 pix; + // fast case: no alpha // clamp R,G,B to 0-256 range - if (r > 0xff) { if (s32(r) < 0) r = 0; else r = 0xff; } - if (g > 0xff) { if (s32(g) < 0) g = 0; else g = 0xff; } - if (b > 0xff) { if (s32(b) < 0) b = 0; else b = 0xff; } - pix = dest_rgb_to_pixel(r, g, b); + u32 r = u32(std::clamp(256.0f * prim.color.r, 0.0f, 255.0f)); + u32 g = u32(std::clamp(256.0f * prim.color.g, 0.0f, 255.0f)); + u32 b = u32(std::clamp(256.0f * prim.color.b, 0.0f, 255.0f)); + u32 const pix = dest_rgb_to_pixel(r, g, b); // loop over rows for (s32 y = starty; y < endy; y++) @@ -630,23 +616,18 @@ private: *dest++ = pix; } } - - // alpha and/or coloring case else if (!is_transparent(prim.color.a)) { - u32 rmask = dest_rgb_to_pixel(0xff,0x00,0x00); - u32 gmask = dest_rgb_to_pixel(0x00,0xff,0x00); - u32 bmask = dest_rgb_to_pixel(0x00,0x00,0xff); - u32 r = u32(256.0f * prim.color.r * prim.color.a); - u32 g = u32(256.0f * prim.color.g * prim.color.a); - u32 b = u32(256.0f * prim.color.b * prim.color.a); - u32 inva = u32(256.0f * (1.0f - prim.color.a)); + // alpha and/or coloring case + u32 const rmask = dest_rgb_to_pixel(0xff,0x00,0x00); + u32 const gmask = dest_rgb_to_pixel(0x00,0xff,0x00); + u32 const bmask = dest_rgb_to_pixel(0x00,0x00,0xff); // clamp R,G,B and inverse A to 0-256 range - if (r > 0xff) { if (s32(r) < 0) r = 0; else r = 0xff; } - if (g > 0xff) { if (s32(g) < 0) g = 0; else g = 0xff; } - if (b > 0xff) { if (s32(b) < 0) b = 0; else b = 0xff; } - if (inva > 0x100) { if (s32(inva) < 0) inva = 0; else inva = 0x100; } + u32 r = u32(std::clamp(256.0f * prim.color.r * prim.color.a, 0.0f, 255.0f)); + u32 g = u32(std::clamp(256.0f * prim.color.g * prim.color.a, 0.0f, 255.0f)); + u32 b = u32(std::clamp(256.0f * prim.color.b * prim.color.a, 0.0f, 255.0f)); + u32 const inva = u32(std::clamp(256.0f * (1.0f - prim.color.a), 0.0f, 256.0f)); // pre-shift the RGBA pieces r = dest_rgb_to_pixel(r, 0, 0) << 8; diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp index 41075c2573b..28011b8372c 100644 --- a/src/emu/rendlay.cpp +++ b/src/emu/rendlay.cpp @@ -1246,9 +1246,6 @@ int get_blend_mode(emu::render::detail::view_environment &env, util::xml::data_n layout_element::make_component_map const layout_element::s_make_component{ { "image", &make_component<image_component> }, { "text", &make_component<text_component> }, - { "dotmatrix", &make_dotmatrix_component<8> }, - { "dotmatrix5dot", &make_dotmatrix_component<5> }, - { "dotmatrixdot", &make_dotmatrix_component<1> }, { "simplecounter", &make_component<simplecounter_component> }, { "reel", &make_component<reel_component> }, { "led7seg", &make_component<led7seg_component> }, @@ -3079,47 +3076,6 @@ protected: }; -// row of dots for a dotmatrix -class layout_element::dotmatrix_component : public component -{ -public: - // construction/destruction - dotmatrix_component(int dots, environment &env, util::xml::data_node const &compnode) - : component(env, compnode) - , m_dots(dots) - { - } - -protected: - // overrides - virtual int maxstate() const override { return (1 << m_dots) - 1; } - - virtual void draw_aligned(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state) override - { - const rgb_t onpen = rgb_t(0xff, 0xff, 0xff, 0xff); - const rgb_t offpen = rgb_t(0xff, 0x20, 0x20, 0x20); - - // sizes for computation - int bmheight = 300; - int dotwidth = 250; - - // allocate a temporary bitmap for drawing - bitmap_argb32 tempbitmap(dotwidth*m_dots, bmheight); - tempbitmap.fill(rgb_t(0xff, 0x00, 0x00, 0x00)); - - for (int i = 0; i < m_dots; i++) - draw_segment_decimal(tempbitmap, ((dotwidth / 2) + (i * dotwidth)), bmheight / 2, dotwidth, BIT(state, i) ? onpen : offpen); - - // resample to the target size - render_resample_argb_bitmap_hq(dest, tempbitmap, color(state)); - } - -private: - // internal state - int m_dots; -}; - - // simple counter class layout_element::simplecounter_component : public component { @@ -3163,6 +3119,8 @@ public: , m_searchpath(env.search_path() ? env.search_path() : "") , m_dirname(env.directory_name() ? env.directory_name() : "") { + osd_printf_warning("Warning: layout file contains deprecated reel component\n"); + std::string_view symbollist = env.get_attribute_string(compnode, "symbollist", "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"); // split out position names from string and figure out our number of symbols @@ -3558,18 +3516,6 @@ layout_element::component::ptr layout_element::make_component(environment &env, } -//------------------------------------------------- -// make_component - create dotmatrix component -// with given vertical resolution -//------------------------------------------------- - -template <int D> -layout_element::component::ptr layout_element::make_dotmatrix_component(environment &env, util::xml::data_node const &compnode) -{ - return std::make_unique<dotmatrix_component>(D, env, compnode); -} - - //************************************************************************** // LAYOUT ELEMENT TEXTURE diff --git a/src/emu/rendlay.h b/src/emu/rendlay.h index befae560bcd..da9edfcf752 100644 --- a/src/emu/rendlay.h +++ b/src/emu/rendlay.h @@ -146,7 +146,6 @@ private: class led16seg_component; class led14segsc_component; class led16segsc_component; - class dotmatrix_component; class simplecounter_component; class reel_component; |