summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/render.cpp33
-rw-r--r--src/emu/render.h9
-rw-r--r--src/emu/rendlay.cpp13
-rw-r--r--src/mame/layout/model1io2.lay37
-rw-r--r--src/osd/modules/render/bgfx/chain.cpp2
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.cpp2
6 files changed, 49 insertions, 47 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index ef06e0c922c..83cd3524532 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -1082,13 +1082,14 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i
screen_device const &screen = screens[index() % screens.size()];
for (unsigned i = 0; !view && (m_views.size() > i); ++i)
{
- for (screen_device const &viewscreen : m_views[i].first.get().screens())
+ for (layout_view::item &viewitem : m_views[i].first.get().items())
{
- if (&viewscreen == &screen)
+ screen_device const *const viewscreen(viewitem.screen());
+ if (viewscreen == &screen)
{
view = &m_views[i].first.get();
}
- else
+ else if (viewscreen)
{
view = nullptr;
break;
@@ -1103,9 +1104,8 @@ unsigned render_target::configured_view(const char *viewname, int targetindex, i
for (unsigned i = 0; !view && (m_views.size() > i); ++i)
{
layout_view &curview = m_views[i].first;
- if (curview.screen_count() >= screens.size())
- if (std::find_if(screens.begin(), screens.end(), [&curview] (screen_device &screen) { return !curview.has_screen(screen); }) == screens.end())
- view = &curview;
+ if (std::find_if(screens.begin(), screens.end(), [&curview] (screen_device &screen) { return !curview.has_screen(screen); }) == screens.end())
+ view = &curview;
}
}
}
@@ -1467,7 +1467,7 @@ bool render_target::map_point_container(s32 target_x, s32 target_y, render_conta
std::swap(target_f.first, target_f.second);
// try to find the right container
- auto const &items(current_view().screen_items());
+ auto const &items(current_view().visible_screen_items());
auto const found(std::find_if(
items.begin(),
items.end(),
@@ -1905,20 +1905,17 @@ void render_target::load_additional_layout_files(const char *basename, bool have
int viewindex(0);
for (layout_view *view = nth_view(viewindex); need_tiles && view; view = nth_view(++viewindex))
{
- if (view->screen_count() >= screens.size())
+ bool screen_missing(false);
+ for (screen_device &screen : iter)
{
- bool screen_missing(false);
- for (screen_device &screen : iter)
+ if (!view->has_screen(screen))
{
- if (!view->has_screen(screen))
- {
- screen_missing = true;
- break;
- }
+ screen_missing = true;
+ break;
}
- if (!screen_missing)
- need_tiles = false;
}
+ if (!screen_missing)
+ need_tiles = false;
}
}
if (need_tiles)
@@ -3089,7 +3086,7 @@ bool render_manager::is_live(screen_device &screen) const
if (!target.hidden())
{
layout_view const *view = &target.current_view();
- if (view->has_screen(screen))
+ if (view->has_visible_screen(screen))
return true;
}
}
diff --git a/src/emu/render.h b/src/emu/render.h
index 1a32024045e..5ca922b408a 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -901,16 +901,17 @@ public:
// getters
item_list &items() { return m_items; }
+ bool has_screen(screen_device &screen);
const std::string &name() const { return m_name; }
- size_t screen_count() const { return m_screens.size(); }
+ size_t visible_screen_count() const { return m_screens.size(); }
float effective_aspect() const { return m_effaspect; }
const render_bounds &bounds() const { return m_bounds; }
- bool has_screen(screen_device &screen) const;
- const item_ref_vector &screen_items() const { return m_screen_items; }
+ bool has_visible_screen(screen_device &screen) const;
+ const item_ref_vector &visible_screen_items() const { return m_screen_items; }
const item_ref_vector &interactive_items() const { return m_interactive_items; }
const edge_vector &interactive_edges_x() const { return m_interactive_edges_x; }
const edge_vector &interactive_edges_y() const { return m_interactive_edges_y; }
- const screen_ref_vector &screens() const { return m_screens; }
+ const screen_ref_vector &visible_screens() const { return m_screens; }
const visibility_toggle_vector &visibility_toggles() const { return m_vistoggles; }
u32 default_visibility_mask() const { return m_defvismask; }
bool has_art() const { return m_has_art; }
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 5f3fb42b1a8..4c76c72a0c1 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -3446,7 +3446,18 @@ layout_view::~layout_view()
// the given screen
//-------------------------------------------------
-bool layout_view::has_screen(screen_device &screen) const
+bool layout_view::has_screen(screen_device &screen)
+{
+ return std::find_if(m_items.begin(), m_items.end(), [&screen] (auto &itm) { return itm.screen() == &screen; }) != m_items.end();
+}
+
+
+//-------------------------------------------------
+// has_visible_screen - return true if this view
+// has the given screen visble
+//-------------------------------------------------
+
+bool layout_view::has_visible_screen(screen_device &screen) const
{
return std::find_if(m_screens.begin(), m_screens.end(), [&screen] (auto const &scr) { return &scr.get() == &screen; }) != m_screens.end();
}
diff --git a/src/mame/layout/model1io2.lay b/src/mame/layout/model1io2.lay
index 785b3b4540e..493a8de92fb 100644
--- a/src/mame/layout/model1io2.lay
+++ b/src/mame/layout/model1io2.lay
@@ -21,29 +21,22 @@ license:CC0
</element>
<view name="Default">
- <!-- workaround for MAME selecting a 2-screen view by default -->
- <screen tag="ioboard:screen"><bounds left="0" top="0" right="1" bottom="1" /></screen>
-
- <screen tag="screen">
- <bounds left="0" top="0" right="4" bottom="3" />
- </screen>
- </view>
-
- <view name="Diagnostic">
- <element ref="background">
- <bounds x="0" y="0" width="496" height="419" />
- </element>
+ <collection name="Diagnostics" visible="no">
+ <element ref="background">
+ <bounds x="0" y="0" width="512" height="419" />
+ </element>
+ <screen tag="ioboard:screen">
+ <bounds left="8" top="392" right="129" bottom="411" />
+ </screen>
+ <element name="led_comm_err" ref="led_red">
+ <bounds x="141" y="399" width="5" height="5" />
+ </element>
+ <element ref="text_comm_err">
+ <bounds x="145" y="398" width="40" height="7" />
+ </element>
+ </collection>
<screen tag="screen">
- <bounds left="0" top="0" right="496" bottom="384" />
- </screen>
- <screen tag="ioboard:screen">
- <bounds left="8" top="392" right="129" bottom="411" />
+ <bounds left="0" top="0" right="512" bottom="384" />
</screen>
- <element name="led_comm_err" ref="led_red">
- <bounds x="141" y="399" width="5" height="5" />
- </element>
- <element ref="text_comm_err">
- <bounds x="145" y="398" width="40" height="7" />
- </element>
</view>
</mamelayout>
diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp
index 297d7686837..0efea9b6622 100644
--- a/src/osd/modules/render/bgfx/chain.cpp
+++ b/src/osd/modules/render/bgfx/chain.cpp
@@ -81,7 +81,7 @@ void bgfx_chain::process(chain_manager::screen_prim &prim, int view, int screen,
screen_device_iterator screen_iterator(window.machine().root_device());
screen_device* screen_device = screen_iterator.byindex(screen);
- uint16_t screen_count(window.target()->current_view().screen_count());
+ uint16_t screen_count(window.target()->current_view().visible_screen_count());
uint16_t screen_width = prim.m_quad_width;
uint16_t screen_height = prim.m_quad_height;
uint32_t rotation_type =
diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp
index 9fa89e0b1c7..e19f8882232 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.cpp
+++ b/src/osd/modules/render/d3d/d3dhlsl.cpp
@@ -2431,7 +2431,7 @@ void uniform::update()
}
case CU_SCREEN_COUNT:
{
- int screen_count = win->target()->current_view().screen_count();
+ int screen_count = win->target()->current_view().visible_screen_count();
m_shader->set_int("ScreenCount", screen_count);
break;
}