[Bf-blender-cvs] [c42e68c4845] eevee-motionblur-object: EEVEE: Motion Blur: Fix rendering and center sample on current frame
Clément Foucault
noreply at git.blender.org
Tue Apr 14 19:09:13 CEST 2020
Commit: c42e68c48456b7e9b715054e9f19f8313d54659d
Author: Clément Foucault
Date: Wed Apr 1 00:43:11 2020 +0200
Branches: eevee-motionblur-object
https://developer.blender.org/rBc42e68c48456b7e9b715054e9f19f8313d54659d
EEVEE: Motion Blur: Fix rendering and center sample on current frame
===================================================================
M source/blender/draw/engines/eevee/eevee_engine.c
M source/blender/draw/engines/eevee/eevee_private.h
M source/blender/draw/engines/eevee/eevee_render.c
===================================================================
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index c061bd830df..89be24ff9fb 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -423,30 +423,39 @@ static void eevee_render_to_image(void *vedata,
struct RenderLayer *render_layer,
const rcti *rect)
{
+ EEVEE_Data *ved = (EEVEE_Data *)vedata;
const DRWContextState *draw_ctx = DRW_context_state_get();
- if (!EEVEE_render_init(vedata, engine, draw_ctx->depsgraph)) {
- return;
- }
-
- DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, EEVEE_render_cache);
-
- {
- EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
- memset(psl, 0, sizeof(*psl));
-
+ if (EEVEE_render_do_motion_blur(draw_ctx->depsgraph)) {
float time = DEG_get_ctime(draw_ctx->depsgraph);
- RE_engine_frame_set(engine, time - 1.0, 0.0f);
+ RE_engine_frame_set(engine, time - 1.0f, 0.0f);
- EEVEE_render_init(vedata, engine, draw_ctx->depsgraph);
+ if (!EEVEE_render_init(vedata, engine, draw_ctx->depsgraph)) {
+ return;
+ }
if (RE_engine_test_break(engine)) {
return;
}
DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, EEVEE_render_cache);
+
+ RE_engine_frame_set(engine, time, 0.0f);
+
+ /* Reset passlist. This is safe as they are stored into managed memory chunks. */
+ memset(ved->psl, 0, sizeof(*ved->psl));
+ }
+
+ if (!EEVEE_render_init(vedata, engine, draw_ctx->depsgraph)) {
+ return;
}
+ if (RE_engine_test_break(engine)) {
+ return;
+ }
+
+ DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, EEVEE_render_cache);
+
/* Actually do the rendering. */
EEVEE_render_draw(vedata, engine, render_layer, rect);
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 3d43cc8d12e..81280d1c285 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -1219,6 +1219,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata,
void EEVEE_render_update_passes(struct RenderEngine *engine,
struct Scene *scene,
struct ViewLayer *view_layer);
+bool EEVEE_render_do_motion_blur(const struct Depsgraph *depsgraph);
/** eevee_lookdev.c */
void EEVEE_lookdev_cache_init(EEVEE_Data *vedata,
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index 076738dcbdf..06cef8948cf 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -46,6 +46,12 @@
#include "eevee_private.h"
+bool EEVEE_render_do_motion_blur(const struct Depsgraph *depsgraph)
+{
+ Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ return (scene->eevee.flag & SCE_EEVEE_MOTION_BLUR_ENABLED) != 0;
+}
+
/* Return true if init properly. */
bool EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *depsgraph)
{
@@ -144,7 +150,9 @@ bool EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *
DRWView *view = DRW_view_create(viewmat, winmat, NULL, NULL, NULL);
DRW_view_camtexco_set(view, camtexcofac);
- DRW_view_default_set(view);
+ if (DRW_view_default_get() == NULL) {
+ DRW_view_default_set(view);
+ }
DRW_view_set_active(view);
/* `EEVEE_renderpasses_init` will set the active render passes used by `EEVEE_effects_init`.
More information about the Bf-blender-cvs
mailing list