diff options
author | 2018-03-12 17:31:40 +1100 | |
---|---|---|
committer | 2018-03-12 17:31:40 +1100 | |
commit | af31f4b3deaf74cdcc4e4a8ff3447f4247f86f4f (patch) | |
tree | a78f35ffca9d3612a4ee3310e6ca087c0c76e3f7 /src/emu/render.cpp | |
parent | 58491dec69c06ca8b3d8291b2f9ad2b4bd217fa2 (diff) |
better handling for arbitrary numbers of screens (nw)
Diffstat (limited to 'src/emu/render.cpp')
-rw-r--r-- | src/emu/render.cpp | 72 |
1 files changed, 52 insertions, 20 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp index 318ff1c384f..d33590731e8 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -906,21 +906,31 @@ render_container::user_settings::user_settings() //------------------------------------------------- render_target::render_target(render_manager &manager, const internal_layout *layoutfile, u32 flags) - : m_next(nullptr), - m_manager(manager), - m_curview(nullptr), - m_flags(flags), - m_listindex(0), - m_width(640), - m_height(480), - m_pixel_aspect(0.0f), - m_max_refresh(0), - m_orientation(0), - m_base_view(nullptr), - m_base_orientation(ROT0), - m_maxtexwidth(65536), - m_maxtexheight(65536), - m_transform_container(true) + : render_target(manager, layoutfile, flags, CONSTRUCTOR_IMPL) +{ +} + +render_target::render_target(render_manager &manager, util::xml::data_node const &layout, u32 flags) + : render_target(manager, layout, flags, CONSTRUCTOR_IMPL) +{ +} + +template <typename T> render_target::render_target(render_manager &manager, T &&layout, u32 flags, constructor_impl_t) + : m_next(nullptr) + , m_manager(manager) + , m_curview(nullptr) + , m_flags(flags) + , m_listindex(0) + , m_width(640) + , m_height(480) + , m_pixel_aspect(0.0f) + , m_max_refresh(0) + , m_orientation(0) + , m_base_view(nullptr) + , m_base_orientation(ROT0) + , m_maxtexwidth(65536) + , m_maxtexheight(65536) + , m_transform_container(true) { // determine the base layer configuration based on options m_base_layerconfig.set_backdrops_enabled(manager.machine().options().use_backdrops()); @@ -967,7 +977,7 @@ render_target::render_target(render_manager &manager, const internal_layout *lay m_layerconfig = m_base_layerconfig; // load the layout files - load_layout_files(layoutfile, flags & RENDER_CREATE_SINGLE_FILE); + load_layout_files(std::forward<T>(layout), flags & RENDER_CREATE_SINGLE_FILE); // set the current view to the first one set_view(0); @@ -1574,9 +1584,7 @@ void render_target::update_layer_config() void render_target::load_layout_files(const internal_layout *layoutfile, bool singlefile) { - bool have_default = false; bool have_artwork = false; - bool have_override = false; // if there's an explicit file, load that first const char *basename = m_manager.machine().basename(); @@ -1584,8 +1592,27 @@ void render_target::load_layout_files(const internal_layout *layoutfile, bool si have_artwork |= load_layout_file(basename, layoutfile); // if we're only loading this file, we know our final result - if (singlefile) - return; + if (!singlefile) + load_additional_layout_files(basename, have_artwork); +} + +void render_target::load_layout_files(util::xml::data_node const &rootnode, bool singlefile) +{ + bool have_artwork = false; + + // if there's an explicit file, load that first + const char *basename = m_manager.machine().basename(); + have_artwork |= load_layout_file(basename, rootnode); + + // if we're only loading this file, we know our final result + if (!singlefile) + load_additional_layout_files(basename, have_artwork); +} + +void render_target::load_additional_layout_files(const char *basename, bool have_artwork) +{ + bool have_default = false; + bool have_override = false; // if override_artwork defined, load that and skip artwork other than default if (m_manager.machine().options().override_artwork()) @@ -2873,6 +2900,11 @@ render_target *render_manager::target_alloc(const internal_layout *layoutfile, u return &m_targetlist.append(*global_alloc(render_target(*this, layoutfile, flags))); } +render_target *render_manager::target_alloc(util::xml::data_node const &layout, u32 flags) +{ + return &m_targetlist.append(*global_alloc(render_target(*this, layout, flags))); +} + //------------------------------------------------- // target_free - free a target |