summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/render.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/render.cpp')
-rw-r--r--src/emu/render.cpp72
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