diff options
author | 2016-04-09 19:15:26 +0200 | |
---|---|---|
committer | 2016-04-09 19:15:47 +0200 | |
commit | 19d51345a18d0450ea1ef77dfb918290d1fa4e10 (patch) | |
tree | 7915c717c5fb5bfe3113a4aca2b02fd43f87f474 /src/osd/modules/render/bgfx/targetmanager.cpp | |
parent | cd243bd4aae7f0d0729fc443b31d07596b0fd0fd (diff) |
Add runtime screen chain selection, nw
Diffstat (limited to 'src/osd/modules/render/bgfx/targetmanager.cpp')
-rw-r--r-- | src/osd/modules/render/bgfx/targetmanager.cpp | 28 |
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; +} |