diff --git a/rpcs3/Emu/Cell/lv2/sys_rsx.cpp b/rpcs3/Emu/Cell/lv2/sys_rsx.cpp index 68ec717219..27323bc671 100644 --- a/rpcs3/Emu/Cell/lv2/sys_rsx.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_rsx.cpp @@ -56,7 +56,13 @@ void _sys_rsx_init_cursor_overlay() { if (auto manager = g_fxo->try_get()) { - manager->create(); + auto cursor = manager->create(); + if (const auto avconfig = g_fxo->try_get()) + { + cursor->set_screen_size( + ::narrow(avconfig->resolution_x), + ::narrow(avconfig->resolution_y)); + } } } diff --git a/rpcs3/Emu/RSX/Overlays/overlay_cursor.cpp b/rpcs3/Emu/RSX/Overlays/overlay_cursor.cpp index bcd4f417db..e16016533f 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_cursor.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_cursor.cpp @@ -157,14 +157,26 @@ namespace rsx void bitmap_cursor::enable() { + std::lock_guard lock(m_mutex); + m_visible = true; } void bitmap_cursor::disable() { + std::lock_guard lock(m_mutex); + m_visible = false; } + void bitmap_cursor::set_screen_size(u16 w, u16 h) + { + std::lock_guard lock(m_mutex); + + m_virtual_width = w; + m_virtual_height = h; + } + void bitmap_cursor::set_pos(s32 x, s32 y) { std::lock_guard lock(m_mutex); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_cursor.h b/rpcs3/Emu/RSX/Overlays/overlay_cursor.h index 3f5711a508..b207b03a34 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_cursor.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_cursor.h @@ -57,7 +57,11 @@ namespace rsx void disable(); void set_pos(s32 x, s32 y); void set_bitmap(u32 address); + void set_screen_size(u16 w, u16 h); + compiled_resource get_compiled() override; + u16 get_virtual_width() const override { return m_virtual_width; } + u16 get_virtual_height() const override { return m_virtual_height; } private: bool m_visible = false; @@ -65,6 +69,9 @@ namespace rsx std::unique_ptr m_bitmap; overlays::memory_image_info m_image_storage; + u16 m_virtual_width = 1280; + u16 m_virtual_height = 720; + shared_mutex m_mutex; };