From 1f1ccd9b7d14d84a13d3950c2de7dfa3afaef638 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Thu, 26 May 2016 21:53:48 +0200 Subject: Fix debug crash with bgfx screen chains --- src/osd/modules/render/bgfx/chainmanager.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/osd/modules/render/bgfx/chainmanager.cpp') 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++; -- cgit v1.2.3-70-g09d2