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>2021-04-21 23:06:52 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-04-21 23:06:52 +0300
commitda91f87764af282a373f1b218e2e2a3d7f86f806 (patch)
tree65d0e041cdfa073363f51ebd84b159b2f5b07ce1 /source/blender/draw/engines/eevee/eevee_instance.cc
parent610294205fb887536470ab80f1ce7ddde466efa6 (diff)
EEVEE: Check updates using recalc flag only an object maps.
This avoids having to reset accumulation if nothing affecting eevee changes.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_instance.cc')
-rw-r--r--source/blender/draw/engines/eevee/eevee_instance.cc24
1 files changed, 9 insertions, 15 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_instance.cc b/source/blender/draw/engines/eevee/eevee_instance.cc
index 4c8891405da..5776feb3ebf 100644
--- a/source/blender/draw/engines/eevee/eevee_instance.cc
+++ b/source/blender/draw/engines/eevee/eevee_instance.cc
@@ -124,22 +124,17 @@ void Instance::begin_sync()
void Instance::object_sync(Object *ob)
{
+ const bool is_renderable_type = ELEM(ob->type, OB_MESH, OB_LAMP);
const int ob_visibility = DRW_object_visibility_in_active_context(ob);
const bool partsys_is_visible = (ob_visibility & OB_VISIBLE_PARTICLES) != 0;
const bool object_is_visible = DRW_object_is_renderable(ob) &&
(ob_visibility & OB_VISIBLE_SELF) != 0;
- if (!partsys_is_visible && !object_is_visible) {
+ if (!is_renderable_type || (!partsys_is_visible && !object_is_visible)) {
return;
}
- /* Gather recalc flag. */
- DrawEngineType *owner = (DrawEngineType *)&DRW_engine_viewport_eevee_type;
- DrawData *dd = DRW_drawdata_ensure((ID *)ob, owner, sizeof(DrawData), nullptr, nullptr);
- if (dd->recalc != 0) {
- dd->recalc = 0;
- sampling.reset();
- }
+ ObjectHandle &ob_handle = sync.sync_object(ob);
if (partsys_is_visible) {
/* TODO render particle hair. */
@@ -148,16 +143,20 @@ void Instance::object_sync(Object *ob)
if (object_is_visible) {
switch (ob->type) {
case OB_LAMP:
- lights.sync_light(ob);
+ lights.sync_light(ob, ob_handle);
break;
case OB_MESH:
shading_passes.opaque.surface_add(ob, nullptr, 0);
- shading_passes.velocity.mesh_add(ob);
+ shading_passes.velocity.mesh_add(ob, ob_handle);
+
+ // shadows.sync_caster(ob);
break;
default:
break;
}
}
+
+ ob_handle.reset_recalc_flag();
}
/* Wrapper to use with DRW_render_object_iter. */
@@ -254,11 +253,6 @@ void Instance::draw_viewport(DefaultFramebufferList *dfbl)
}
}
-void Instance::view_update(void)
-{
- sampling.reset();
-}
-
bool Instance::finished(void) const
{
return sampling.finished();