summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2021-11-21 11:04:46 -0500
committer AJR <ajrhacker@users.noreply.github.com>2021-11-21 11:05:00 -0500
commita992566a1d78c75fff2366aadfd7db19d69a76c0 (patch)
tree1a4ddf52c90b62b9fce54c8295390dd8ce3de74b /src
parent8c345c3cb3b00846d8669c9f8fefd17aa0323695 (diff)
render.cpp: Use simple_list instead of std::list for containers; remove old remnants of "internal" debugger
Diffstat (limited to 'src')
-rw-r--r--src/emu/render.cpp135
-rw-r--r--src/emu/render.h23
2 files changed, 39 insertions, 119 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 2790c213cf5..1f9918539d5 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -536,8 +536,7 @@ const rgb_t *render_texture::get_adjusted_palette(render_container &container, u
//-------------------------------------------------
render_container::render_container(render_manager &manager, screen_device *screen)
- : m_next(nullptr)
- , m_manager(manager)
+ : m_manager(manager)
, m_screen(screen)
, m_overlaybitmap(nullptr)
, m_overlaytexture(nullptr)
@@ -894,7 +893,6 @@ render_target::render_target(render_manager &manager, util::xml::data_node const
template <typename T> render_target::render_target(render_manager &manager, T &&layout, u32 flags, constructor_impl_t)
: m_next(nullptr)
, m_manager(manager)
- , m_filelist(std::make_unique<std::list<layout_file>>())
, m_curview(0U)
, m_flags(flags)
, m_listindex(0)
@@ -960,7 +958,7 @@ template <typename T> render_target::render_target(render_manager &manager, T &&
// load the layout files
load_layout_files(std::forward<T>(layout), flags & RENDER_CREATE_SINGLE_FILE);
- for (layout_file &file : *m_filelist)
+ for (layout_file &file : m_filelist)
for (layout_view &view : file.views())
if (!(m_flags & RENDER_CREATE_NO_ART) || !view.has_art())
m_views.emplace_back(view, view.default_visibility_mask());
@@ -1417,23 +1415,6 @@ render_primitive_list &render_target::get_primitives()
}
}
- // process the debug containers
- for (render_container &debug : m_debug_containers)
- {
- object_transform ui_xform;
- ui_xform.xoffs = 0;
- ui_xform.yoffs = 0;
- ui_xform.xscale = (float)m_width;
- ui_xform.yscale = (float)m_height;
- ui_xform.color.r = ui_xform.color.g = ui_xform.color.b = 1.0f;
- ui_xform.color.a = 0.9f;
- ui_xform.orientation = m_orientation;
- ui_xform.no_center = true;
-
- // add UI elements
- add_container_primitives(list, root_xform, ui_xform, debug, BLENDMODE_ALPHA);
- }
-
// process the UI if we are the UI target
if (is_ui_target())
{
@@ -1604,44 +1585,12 @@ void render_target::invalidate_all(void *refptr)
//-------------------------------------------------
-// debug_alloc - allocate a container for a debug
-// view
-//-------------------------------------------------
-
-render_container *render_target::debug_alloc()
-{
- return &m_debug_containers.append(*m_manager.container_alloc());
-}
-
-
-//-------------------------------------------------
-// debug_free - free a container for a debug view
-//-------------------------------------------------
-
-void render_target::debug_free(render_container &container)
-{
- m_debug_containers.remove(container);
-}
-
-
-//-------------------------------------------------
-// debug_append - move a debug view container to
-// the end of the list
-//-------------------------------------------------
-
-void render_target::debug_append(render_container &container)
-{
- m_debug_containers.append(m_debug_containers.detach(container));
-}
-
-
-//-------------------------------------------------
// resolve_tags - resolve tag lookups
//-------------------------------------------------
void render_target::resolve_tags()
{
- for (layout_file &file : *m_filelist)
+ for (layout_file &file : m_filelist)
file.resolve_tags();
current_view().recompute(visibility_mask(), m_layerconfig.zoom_to_screen());
@@ -1808,7 +1757,7 @@ void render_target::load_additional_layout_files(const char *basename, bool have
auto const nth_view =
[this] (unsigned n) -> layout_view *
{
- for (layout_file &file : *m_filelist)
+ for (layout_file &file : m_filelist)
for (layout_view &view : file.views())
if (!(m_flags & RENDER_CREATE_NO_ART) || !view.has_art())
if (n-- == 0)
@@ -1821,7 +1770,7 @@ void render_target::load_additional_layout_files(const char *basename, bool have
if (!nth_view(0))
{
load_layout_file(nullptr, layout_noscreens);
- if (m_filelist->empty())
+ if (m_filelist.empty())
throw emu_fatalerror("Couldn't parse default layout??");
}
}
@@ -2226,7 +2175,7 @@ bool render_target::load_layout_file(device_t &device, util::xml::data_node cons
// parse and catch any errors
try
{
- m_filelist->emplace_back(device, rootnode, searchpath, dirname);
+ m_filelist.emplace_back(device, rootnode, searchpath, dirname);
}
catch (emu_fatalerror &err)
{
@@ -3107,7 +3056,7 @@ render_manager::render_manager(running_machine &machine)
, m_ui_target(nullptr)
, m_live_textures(0)
, m_texture_id(0)
- , m_ui_container(new render_container(*this))
+ , m_ui_container(std::make_unique<render_container>(*this))
{
// register callbacks
machine.configuration().config_register(
@@ -3117,7 +3066,7 @@ render_manager::render_manager(running_machine &machine)
// create one container per screen
for (screen_device &screen : screen_device_enumerator(machine.root_device()))
- screen.set_container(*container_alloc(&screen));
+ screen.set_container(m_screen_container_list.emplace_back(*this, &screen));
}
@@ -3128,8 +3077,8 @@ render_manager::render_manager(running_machine &machine)
render_manager::~render_manager()
{
// free all the containers since they may own textures
- container_free(m_ui_container);
- m_screen_container_list.reset();
+ m_ui_container.reset();
+ m_screen_container_list.clear();
// better not be any outstanding textures when we die
assert(m_live_textures == 0);
@@ -3229,7 +3178,7 @@ float render_manager::ui_aspect(render_container *rc)
int orient;
float aspect;
- if (rc == m_ui_container || rc == nullptr) {
+ if (rc == m_ui_container.get() || rc == nullptr) {
// ui container, aggregated multi-screen target
orient = orientation_add(m_ui_target->orientation(), m_ui_container->orientation());
@@ -3341,29 +3290,6 @@ void render_manager::resolve_tags()
//-------------------------------------------------
-// container_alloc - allocate a new container
-//-------------------------------------------------
-
-render_container *render_manager::container_alloc(screen_device *screen)
-{
- auto container = new render_container(*this, screen);
- if (screen != nullptr)
- m_screen_container_list.append(*container);
- return container;
-}
-
-
-//-------------------------------------------------
-// container_free - release a container
-//-------------------------------------------------
-
-void render_manager::container_free(render_container *container)
-{
- m_screen_container_list.remove(*container);
-}
-
-
-//-------------------------------------------------
// config_load - read and apply data from the
// configuration file
//-------------------------------------------------
@@ -3395,24 +3321,29 @@ void render_manager::config_load(config_type cfg_type, config_level cfg_level, u
for (util::xml::data_node const *screennode = parentnode->get_child("screen"); screennode; screennode = screennode->get_next_sibling("screen"))
{
int const index = screennode->get_attribute_int("index", -1);
- render_container *container = m_screen_container_list.find(index);
+ render_container *container = nullptr;
+ if (index >= 0 && index < m_screen_container_list.size())
+ container = &*std::next(m_screen_container_list.begin(), index);
- // fetch current settings
- render_container::user_settings settings = container->get_user_settings();
+ if (container != nullptr)
+ {
+ // fetch current settings
+ render_container::user_settings settings = container->get_user_settings();
- // fetch color controls
- settings.m_brightness = screennode->get_attribute_float("brightness", settings.m_brightness);
- settings.m_contrast = screennode->get_attribute_float("contrast", settings.m_contrast);
- settings.m_gamma = screennode->get_attribute_float("gamma", settings.m_gamma);
+ // fetch color controls
+ settings.m_brightness = screennode->get_attribute_float("brightness", settings.m_brightness);
+ settings.m_contrast = screennode->get_attribute_float("contrast", settings.m_contrast);
+ settings.m_gamma = screennode->get_attribute_float("gamma", settings.m_gamma);
- // fetch positioning controls
- settings.m_xoffset = screennode->get_attribute_float("hoffset", settings.m_xoffset);
- settings.m_xscale = screennode->get_attribute_float("hstretch", settings.m_xscale);
- settings.m_yoffset = screennode->get_attribute_float("voffset", settings.m_yoffset);
- settings.m_yscale = screennode->get_attribute_float("vstretch", settings.m_yscale);
+ // fetch positioning controls
+ settings.m_xoffset = screennode->get_attribute_float("hoffset", settings.m_xoffset);
+ settings.m_xscale = screennode->get_attribute_float("hstretch", settings.m_xscale);
+ settings.m_yoffset = screennode->get_attribute_float("voffset", settings.m_yoffset);
+ settings.m_yscale = screennode->get_attribute_float("vstretch", settings.m_yscale);
- // set the new values
- container->set_user_settings(settings);
+ // set the new values
+ container->set_user_settings(settings);
+ }
}
}
@@ -3457,7 +3388,7 @@ void render_manager::config_save(config_type cfg_type, util::xml::data_node *par
// iterate over screen containers
int scrnum = 0;
- for (render_container *container = m_screen_container_list.first(); container != nullptr; container = container->next(), scrnum++)
+ for (render_container &container : m_screen_container_list)
{
// create a node
util::xml::data_node *const screennode = parentnode->add_child("screen", nullptr);
@@ -3468,7 +3399,7 @@ void render_manager::config_save(config_type cfg_type, util::xml::data_node *par
// output the basics
screennode->set_attribute_int("index", scrnum);
- render_container::user_settings settings = container->get_user_settings();
+ render_container::user_settings const settings = container.get_user_settings();
// output the color controls
if (settings.m_brightness != machine().options().brightness())
@@ -3518,5 +3449,7 @@ void render_manager::config_save(config_type cfg_type, util::xml::data_node *par
if (!changed)
screennode->delete_node();
}
+
+ scrnum++;
}
}
diff --git a/src/emu/render.h b/src/emu/render.h
index d1d8987ea9b..d4f99377d70 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -377,15 +377,14 @@ private:
// a render_container holds a list of items and an orientation for the entire collection
class render_container
{
- friend class simple_list<render_container>;
friend class render_manager;
friend class render_target;
+public:
// construction/destruction
render_container(render_manager &manager, screen_device *screen = nullptr);
~render_container();
-public:
// user settings describes the collected user-controllable settings
struct user_settings
{
@@ -404,7 +403,6 @@ public:
};
// getters
- render_container *next() const { return m_next; }
screen_device *screen() const { return m_screen; }
render_manager &manager() const { return m_manager; }
render_texture *overlay() const { return m_overlaytexture; }
@@ -478,7 +476,6 @@ private:
void update_palette();
// internal state
- render_container * m_next; // the next container in the list
render_manager & m_manager; // reference back to the owning manager
simple_list<item> m_itemlist; // head of the item list
fixed_allocator<item> m_item_allocator; // free container items
@@ -564,11 +561,6 @@ public:
// reference tracking
void invalidate_all(void *refptr);
- // debug containers
- render_container *debug_alloc();
- void debug_free(render_container &container);
- void debug_append(render_container &container);
-
// resolve tag lookups
void resolve_tags();
@@ -614,7 +606,7 @@ private:
// internal state
render_target * m_next; // link to next target
render_manager & m_manager; // reference to our owning manager
- std::unique_ptr<std::list<layout_file>> m_filelist; // list of layout files
+ std::list<layout_file> m_filelist; // list of layout files
view_mask_vector m_views; // views we consider
unsigned m_curview; // current view index
u32 m_flags; // creation flags
@@ -638,7 +630,6 @@ private:
render_layer_config m_base_layerconfig; // the layer configuration at the time of first frame
int m_maxtexwidth; // maximum width of a texture
int m_maxtexheight; // maximum height of a texture
- simple_list<render_container> m_debug_containers; // list of debug containers
s32 m_clear_extent_count; // number of clear extents
s32 m_clear_extents[MAX_CLEAR_EXTENTS]; // array of clear extents
bool m_transform_container; // determines whether the screen container is transformed by the core renderer,
@@ -671,7 +662,7 @@ public:
render_target *target_alloc(util::xml::data_node const &layout, u32 flags = 0);
void target_free(render_target *target);
const simple_list<render_target> &targets() const { return m_targetlist; }
- render_target *first_target() const { return m_targetlist.first(); }
+ render_target *first_target() { return m_targetlist.first(); }
render_target *target_by_index(int index) const;
// UI targets
@@ -696,10 +687,6 @@ public:
void resolve_tags();
private:
- // containers
- render_container *container_alloc(screen_device *screen = nullptr);
- void container_free(render_container *container);
-
// config callbacks
void config_load(config_type cfg_type, config_level cfg_lvl, util::xml::data_node const *parentnode);
void config_save(config_type cfg_type, util::xml::data_node *parentnode);
@@ -717,8 +704,8 @@ private:
fixed_allocator<render_texture> m_texture_allocator;// texture allocator
// containers for the UI and for screens
- render_container * m_ui_container; // UI container
- simple_list<render_container> m_screen_container_list; // list of containers for the screen
+ std::unique_ptr<render_container> m_ui_container; // UI container
+ std::list<render_container> m_screen_container_list; // list of containers for the screen
};
#endif // MAME_EMU_RENDER_H