summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
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
commitc378ea087097d75cd7f4fb69da062048eaaae5e6 (patch)
tree0711e315d3d2a7fc74cae27f6faea01a6af37f34 /src/emu
parent4e74563abb4c8b385baa72d0c2d5f3987fa88652 (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.h2
-rw-r--r--src/emu/rendersw.hxx61
-rw-r--r--src/emu/rendlay.cpp58
-rw-r--r--src/emu/rendlay.h1
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;