summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/bgfx/targetmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/render/bgfx/targetmanager.cpp')
-rw-r--r--src/osd/modules/render/bgfx/targetmanager.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/osd/modules/render/bgfx/targetmanager.cpp b/src/osd/modules/render/bgfx/targetmanager.cpp
index 6350829a4ed..e17b0e6915a 100644
--- a/src/osd/modules/render/bgfx/targetmanager.cpp
+++ b/src/osd/modules/render/bgfx/targetmanager.cpp
@@ -48,14 +48,26 @@ target_manager::~target_manager()
bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat::Enum format, uint16_t width, uint16_t height, uint32_t style, bool double_buffer, bool filter, uint16_t scale, uint32_t screen)
{
bgfx_target* target = new bgfx_target(name, format, width, height, style, double_buffer, filter, scale, screen);
+ std::string full_name = name + std::to_string(screen);
- m_targets[name + std::to_string(screen)] = target;
+ m_targets[full_name] = target;
- m_textures.add_provider(name + std::to_string(screen), target);
+ m_textures.add_provider(full_name, target);
return target;
}
+void target_manager::destroy_target(std::string name, uint32_t screen)
+{
+ std::string full_name = name + std::to_string(screen);
+ if (m_targets[full_name] != nullptr)
+ {
+ delete m_targets[full_name];
+ m_targets[full_name] = nullptr;
+ m_textures.remove_provider(full_name);
+ }
+}
+
bgfx_target* target_manager::create_backbuffer(void *handle, uint16_t width, uint16_t height)
{
bgfx_target* target = new bgfx_target(handle, width, height);
@@ -161,3 +173,15 @@ void target_manager::create_target_if_nonexistent(uint32_t screen, std::string n
create_target(name, bgfx::TextureFormat::RGBA8, width, height, style, double_buffered, filter, 1, screen);
}
+
+uint16_t target_manager::width(uint32_t style, uint32_t screen)
+{
+ std::vector<osd_dim>& sizes = style == TARGET_STYLE_GUEST ? m_guest_dims : m_native_dims;
+ return screen < sizes.size() ? sizes[screen].width() : 0;
+}
+
+uint16_t target_manager::height(uint32_t style, uint32_t screen)
+{
+ std::vector<osd_dim>& sizes = style == TARGET_STYLE_GUEST ? m_guest_dims : m_native_dims;
+ return screen < sizes.size() ? sizes[screen].height() : 0;
+}