diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-06-02 03:14:56 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-06-02 13:47:52 +0300 |
commit | e7e52f7cff3abf36f3a3a0b70c86db5c2ed86324 (patch) | |
tree | 17014997161c2343cbe2148d7a7b9ef320d5e900 /source/blender/draw/engines/external | |
parent | 114973584d49daa2020345970b696878ebc49cf7 (diff) |
Fix T65185: Cycles viewport render no refreshing overlays properly
Don't rely on detecting view matrix changes to refresh depth buffer, instead
detect redraw tags coming from progressive render samples.
Diffstat (limited to 'source/blender/draw/engines/external')
-rw-r--r-- | source/blender/draw/engines/external/external_engine.c | 35 |
1 files changed, 5 insertions, 30 deletions
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c index 9512304b94b..f6646ca575e 100644 --- a/source/blender/draw/engines/external/external_engine.c +++ b/source/blender/draw/engines/external/external_engine.c @@ -88,7 +88,6 @@ typedef struct EXTERNAL_PrivateData { /* Do we need to update the depth or can we reuse the last calculated texture. */ bool update_depth; - bool view_updated; float last_persmat[4][4]; } EXTERNAL_PrivateData; /* Transient data */ @@ -99,7 +98,7 @@ static void external_engine_init(void *vedata) { EXTERNAL_StorageList *stl = ((EXTERNAL_Data *)vedata)->stl; const DRWContextState *draw_ctx = DRW_context_state_get(); - RegionView3D *rv3d = draw_ctx->rv3d; + ARegion *ar = draw_ctx->ar; /* Depth prepass */ if (!e_data.depth_sh) { @@ -110,27 +109,12 @@ static void external_engine_init(void *vedata) /* Alloc transient pointers */ stl->g_data = MEM_mallocN(sizeof(*stl->g_data), __func__); stl->g_data->update_depth = true; - stl->g_data->view_updated = false; - } - - if (stl->g_data->update_depth == false) { - if (rv3d && rv3d->rflag & RV3D_NAVIGATING) { - stl->g_data->update_depth = true; - } } - if (stl->g_data->view_updated) { + /* Progressive render samples are tagged with no rebuild, in that case we + * can skip updating the depth buffer */ + if (!(ar && (ar->do_draw & RGN_DRAW_NO_REBUILD))) { stl->g_data->update_depth = true; - stl->g_data->view_updated = false; - } - - { - float persmat[4][4]; - DRW_view_persmat_get(NULL, persmat, false); - if (!equals_m4m4(persmat, stl->g_data->last_persmat)) { - stl->g_data->update_depth = true; - copy_m4_m4(stl->g_data->last_persmat, persmat); - } } } @@ -271,15 +255,6 @@ static void external_draw_scene(void *vedata) } } -static void external_view_update(void *vedata) -{ - EXTERNAL_Data *data = vedata; - EXTERNAL_StorageList *stl = data->stl; - if (stl && stl->g_data) { - stl->g_data->view_updated = true; - } -} - static void external_engine_free(void) { /* All shaders are builtin. */ @@ -299,7 +274,7 @@ static DrawEngineType draw_engine_external_type = { &external_cache_finish, NULL, &external_draw_scene, - &external_view_update, + NULL, NULL, NULL, }; |