Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-06-02 03:14:56 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-06-02 13:47:52 +0300
commite7e52f7cff3abf36f3a3a0b70c86db5c2ed86324 (patch)
tree17014997161c2343cbe2148d7a7b9ef320d5e900 /source/blender/draw/engines/external
parent114973584d49daa2020345970b696878ebc49cf7 (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.c35
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,
};