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:
authorClément Foucault <foucault.clem@gmail.com>2020-08-06 20:58:35 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-08-07 00:06:18 +0300
commit4f59e4bddcb0c06e441adf68a5f252a4e5b4b260 (patch)
treee20c1698a3c89796b70597124a9609f2206b69fb /source/blender/draw/intern
parent3dcaca93a050eebf68e9b86e2c110476b7b9979c (diff)
Fix T78452 EEVEE: Motion Blur: Crash when using camera switching
This was caused by the ViewLayer being freed with all its engine data.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h4
-rw-r--r--source/blender/draw/intern/draw_manager.c8
2 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 7a889d9399e..16e6269aad6 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -632,6 +632,10 @@ void DRW_render_object_iter(void *vedata,
struct RenderEngine *engine,
struct Depsgraph *depsgraph));
void DRW_render_instance_buffer_finish(void);
+void DRW_render_set_time(struct RenderEngine *engine,
+ struct Depsgraph *depsgraph,
+ int frame,
+ float subframe);
void DRW_render_viewport_size_set(const int size[2]);
void DRW_custom_pipeline(DrawEngineType *draw_engine_type,
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 43025d9fef4..2beab021cfb 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1953,6 +1953,14 @@ void DRW_render_instance_buffer_finish(void)
drw_resource_buffer_finish(DST.vmempool);
}
+/* WARNING: Changing frame might free the ViewLayerEngineData */
+void DRW_render_set_time(RenderEngine *engine, Depsgraph *depsgraph, int frame, float subframe)
+{
+ RE_engine_frame_set(engine, frame, subframe);
+ DST.draw_ctx.scene = DEG_get_evaluated_scene(depsgraph);
+ DST.draw_ctx.view_layer = DEG_get_evaluated_view_layer(depsgraph);
+}
+
/**
* object mode select-loop, see: ED_view3d_draw_select_loop (legacy drawing).
*/