From a992566a1d78c75fff2366aadfd7db19d69a76c0 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 21 Nov 2021 11:04:46 -0500 Subject: render.cpp: Use simple_list instead of std::list for containers; remove old remnants of "internal" debugger --- src/emu/render.cpp | 135 ++++++++++++++--------------------------------------- src/emu/render.h | 23 ++------- 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 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>()) , m_curview(0U) , m_flags(flags) , m_listindex(0) @@ -960,7 +958,7 @@ template render_target::render_target(render_manager &manager, T && // load the layout files load_layout_files(std::forward(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()) { @@ -1603,45 +1584,13 @@ 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(*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()); @@ -3340,29 +3289,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; 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 m_itemlist; // head of the item list fixed_allocator 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> m_filelist; // list of layout files + std::list 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 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 &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 m_texture_allocator;// texture allocator // containers for the UI and for screens - render_container * m_ui_container; // UI container - simple_list m_screen_container_list; // list of containers for the screen + std::unique_ptr m_ui_container; // UI container + std::list m_screen_container_list; // list of containers for the screen }; #endif // MAME_EMU_RENDER_H -- cgit v1.2.3