diff options
author | 2016-05-26 21:53:48 +0200 | |
---|---|---|
committer | 2016-05-26 21:54:03 +0200 | |
commit | 1f1ccd9b7d14d84a13d3950c2de7dfa3afaef638 (patch) | |
tree | 0fdfae36fd6abbe778726c7cf9b2a2f7357393ff /src/osd/modules/render/bgfx/chainmanager.cpp | |
parent | 87429e74d90481317db41dfc45c7751039cd8b48 (diff) |
Fix debug crash with bgfx screen chains
Diffstat (limited to 'src/osd/modules/render/bgfx/chainmanager.cpp')
-rw-r--r-- | src/osd/modules/render/bgfx/chainmanager.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp index 6160bb2ccd0..a5964afc502 100644 --- a/src/osd/modules/render/bgfx/chainmanager.cpp +++ b/src/osd/modules/render/bgfx/chainmanager.cpp @@ -295,7 +295,14 @@ void chain_manager::process_screen_quad(uint32_t view, uint32_t screen, render_p bgfx_texture *texture = new bgfx_texture(full_name, bgfx::TextureFormat::RGBA8, tex_width, tex_height, mem, BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_MIN_POINT | BGFX_TEXTURE_MAG_POINT | BGFX_TEXTURE_MIP_POINT); m_textures.add_provider(full_name, texture); - m_targets.update_target_sizes(screen, tex_width, tex_height, TARGET_STYLE_GUEST); + const bool any_targets_rebuilt = m_targets.update_target_sizes(screen, tex_width, tex_height, TARGET_STYLE_GUEST); + if (any_targets_rebuilt) + { + for (bgfx_chain* chain : m_screen_chains) + { + chain->repopulate_targets(); + } + } bgfx_chain* chain = screen_chain(screen); chain->process(prim, view, screen, m_textures, window, bgfx_util::get_blend_state(PRIMFLAG_GET_BLENDMODE(prim->flags))); @@ -440,8 +447,14 @@ uint32_t chain_manager::handle_screen_chains(uint32_t view, render_primitive *st std::swap(screen_width, screen_height); } - m_targets.update_target_sizes(screen_index, screen_width, screen_height, TARGET_STYLE_NATIVE); - process_screen_quad(view + used_views, screen_index, prim, window); + const bool any_targets_rebuilt = m_targets.update_target_sizes(screen_index, screen_width, screen_height, TARGET_STYLE_NATIVE); + if (any_targets_rebuilt) { + for (bgfx_chain* chain : m_screen_chains) { + chain->repopulate_targets(); + } + } + + process_screen_quad(view + used_views, screen_index, prim, window); used_views += screen_chain(screen_index)->applicable_passes(); screen_index++; |