diff --git a/rpcs3/Emu/RSX/GL/GLOverlays.cpp b/rpcs3/Emu/RSX/GL/GLOverlays.cpp index b9ea62f2f9..c5fac83404 100644 --- a/rpcs3/Emu/RSX/GL/GLOverlays.cpp +++ b/rpcs3/Emu/RSX/GL/GLOverlays.cpp @@ -303,7 +303,7 @@ namespace gl } // Create font file - const std::vector glyph_data = font->get_glyph_data(); + const std::vector& glyph_data = font->get_glyph_data(); auto tex = std::make_unique(GL_TEXTURE_2D_ARRAY, font_size.width, font_size.height, font_size.depth, 1, 1, GL_R8, RSX_FORMAT_CLASS_COLOR); tex->copy_from(glyph_data.data(), gl::texture::format::r, gl::texture::type::ubyte, {}); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp b/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp index 8f3c7173b4..f1df35125c 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp @@ -417,13 +417,14 @@ namespace rsx return {loc_x, loc_y}; } - std::vector font::get_glyph_data() const + const std::vector& font::get_glyph_data() const { - std::vector bytes; - const u32 page_size = codepage::bitmap_width * codepage::bitmap_height; + constexpr u32 page_size = codepage::bitmap_width * codepage::bitmap_height; const auto size = page_size * m_glyph_map.size(); + static thread_local std::vector bytes; bytes.resize(size); + u8* data = bytes.data(); for (const auto& e : m_glyph_map) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_fonts.h b/rpcs3/Emu/RSX/Overlays/overlay_fonts.h index 857c6e3cdd..c673c60ab2 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_fonts.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_fonts.h @@ -79,7 +79,7 @@ namespace rsx std::pair get_char_offset(const char32_t* text, usz max_length, u16 max_width = -1, bool wrap = false); - bool matches(const char* name, int size) const { return font_name == name && static_cast(size_pt) == size; } + bool matches(const char* name, int size) const { return static_cast(size_pt) == size && font_name == name; } std::string_view get_name() const { return font_name; } f32 get_size_pt() const { return size_pt; } f32 get_size_px() const { return size_px; } @@ -87,7 +87,7 @@ namespace rsx // Renderer info size3u get_glyph_data_dimensions() const { return { codepage::bitmap_width, codepage::bitmap_height, ::size32(m_glyph_map) }; } - std::vector get_glyph_data() const; + const std::vector& get_glyph_data() const; }; // TODO: Singletons are cancer @@ -99,7 +99,7 @@ namespace rsx font* find(const char* name, int size) { - for (auto& f : fonts) + for (const auto& f : fonts) { if (f->matches(name, size)) return f.get(); diff --git a/rpcs3/Emu/RSX/VK/VKOverlays.cpp b/rpcs3/Emu/RSX/VK/VKOverlays.cpp index 8f862cb6e3..2976d90c76 100644 --- a/rpcs3/Emu/RSX/VK/VKOverlays.cpp +++ b/rpcs3/Emu/RSX/VK/VKOverlays.cpp @@ -508,16 +508,14 @@ namespace vk { return found->second.get(); } - else - { - auto gc = vk::get_resource_manager(); - gc->dispose(font_cache[key]); - gc->dispose(view_cache[key]); - } + + auto gc = vk::get_resource_manager(); + gc->dispose(font_cache[key]); + gc->dispose(view_cache[key]); } // Create font resource - const std::vector bytes = font->get_glyph_data(); + const std::vector& bytes = font->get_glyph_data(); return upload_simple_texture(cmd.get_command_pool().get_owner(), cmd, upload_heap, key, image_size.width, image_size.height, image_size.depth, true, false, bytes.data(), -1);