mirror of
https://github.com/holub/mame
synced 2025-04-26 10:13:37 +03:00
emu/render.cpp: Consider that screens can be hidden when choosing a default view.
This commit is contained in:
parent
c0754c36cd
commit
ae3560c57c
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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; }
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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>
|
||||
|
||||
<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="4" bottom="3" />
|
||||
<bounds left="0" top="0" right="512" bottom="384" />
|
||||
</screen>
|
||||
</view>
|
||||
|
||||
<view name="Diagnostic">
|
||||
<element ref="background">
|
||||
<bounds x="0" y="0" width="496" height="419" />
|
||||
</element>
|
||||
<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" />
|
||||
</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>
|
||||
|
@ -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 =
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user