[Bf-blender-cvs] [d5fe3929812] cycles_procedural_api: split Shader::need_update_geometry into different boolean flags
Kévin Dietrich
noreply at git.blender.org
Fri Oct 9 17:56:03 CEST 2020
Commit: d5fe3929812b4d112549badeded3724efac01aab
Author: Kévin Dietrich
Date: Thu Oct 8 06:32:19 2020 +0200
Branches: cycles_procedural_api
https://developer.blender.org/rBd5fe3929812b4d112549badeded3724efac01aab
split Shader::need_update_geometry into different boolean flags
===================================================================
M intern/cycles/blender/blender_geometry.cpp
M intern/cycles/render/film.cpp
M intern/cycles/render/geometry.cpp
M intern/cycles/render/shader.cpp
M intern/cycles/render/shader.h
===================================================================
diff --git a/intern/cycles/blender/blender_geometry.cpp b/intern/cycles/blender/blender_geometry.cpp
index 41dfa090d96..e4f0d4da86c 100644
--- a/intern/cycles/blender/blender_geometry.cpp
+++ b/intern/cycles/blender/blender_geometry.cpp
@@ -115,7 +115,7 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
foreach (Node *node, geom->get_used_shaders()) {
Shader *shader = static_cast<Shader *>(node);
- if (shader->need_update_geometry) {
+ if (shader->need_update_geometry()) {
attribute_recalc = true;
}
}
diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp
index 5c3778f6ae5..a3c3a13cafd 100644
--- a/intern/cycles/render/film.cpp
+++ b/intern/cycles/render/film.cpp
@@ -691,7 +691,7 @@ void Film::tag_passes_update(Scene *scene, const vector<Pass> &passes_, bool upd
scene->geometry_manager->tag_update(scene);
foreach (Shader *shader, scene->shaders)
- shader->need_update_geometry = true;
+ shader->need_update_uvs = true;
}
else if (Pass::contains(scene->passes, PASS_MOTION) != Pass::contains(passes_, PASS_MOTION)) {
scene->geometry_manager->tag_update(scene);
diff --git a/intern/cycles/render/geometry.cpp b/intern/cycles/render/geometry.cpp
index 12f2e16ca54..262e1b90a74 100644
--- a/intern/cycles/render/geometry.cpp
+++ b/intern/cycles/render/geometry.cpp
@@ -1257,8 +1257,20 @@ void GeometryManager::device_update(Device *device,
foreach (Geometry *geom, scene->geometry) {
foreach (Node *node, geom->get_used_shaders()) {
Shader *shader = static_cast<Shader *>(node);
- if (shader->need_update_geometry)
+ if (shader->need_update_uvs) {
+ // todo: attributes
geom->tag_modified();
+ }
+
+ if (shader->need_update_attribute) {
+ // todo: attributes
+ geom->tag_modified();
+ }
+
+ if (shader->need_update_displacement) {
+ // todo: tag all displacement related sockets as modified
+ geom->tag_modified();
+ }
}
if (geom->is_modified() &&
@@ -1447,7 +1459,9 @@ void GeometryManager::device_update(Device *device,
}
foreach (Shader *shader, scene->shaders) {
- shader->need_update_geometry = false;
+ shader->need_update_uvs = false;
+ shader->need_update_attribute = false;
+ shader->need_update_displacement = false;
}
Scene::MotionType need_motion = scene->need_motion();
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index cf49dedc426..ce95c179ea1 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -218,7 +218,9 @@ Shader::Shader() : Node(node_type)
id = -1;
used = false;
- need_update_geometry = true;
+ need_update_uvs = true;
+ need_update_attribute = true;
+ need_update_displacement = true;
}
Shader::~Shader()
@@ -291,7 +293,7 @@ void Shader::set_graph(ShaderGraph *graph_)
const char *new_hash = (graph_) ? graph_->displacement_hash.c_str() : "";
if (strcmp(old_hash, new_hash) != 0) {
- need_update_geometry = true;
+ need_update_displacement = true;
}
}
@@ -354,7 +356,7 @@ void Shader::tag_update(Scene *scene)
/* compare if the attributes changed, mesh manager will check
* need_update_geometry, update the relevant meshes and clear it. */
if (attributes.modified(prev_attributes)) {
- need_update_geometry = true;
+ need_update_attribute = true;
scene->geometry_manager->need_update = true;
}
@@ -375,6 +377,11 @@ void Shader::tag_used(Scene *scene)
}
}
+bool Shader::need_update_geometry() const
+{
+ return need_update_uvs || need_update_attribute || need_update_displacement;
+}
+
/* Shader Manager */
ShaderManager::ShaderManager()
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index f8f455a12f3..19bffadbfe8 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -100,7 +100,9 @@ class Shader : public Node {
float prev_volume_step_rate;
/* synchronization */
- bool need_update_geometry;
+ bool need_update_uvs;
+ bool need_update_attribute;
+ bool need_update_displacement ;
/* If the shader has only volume components, the surface is assumed to
* be transparent.
@@ -152,6 +154,8 @@ class Shader : public Node {
void set_graph(ShaderGraph *graph);
void tag_update(Scene *scene);
void tag_used(Scene *scene);
+
+ bool need_update_geometry() const;
};
/* Shader Manager virtual base class
More information about the Bf-blender-cvs
mailing list