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:
Diffstat (limited to 'intern/cycles/blender/blender_sync.cpp')
-rw-r--r--intern/cycles/blender/blender_sync.cpp53
1 files changed, 24 insertions, 29 deletions
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index e7e57b2be36..4ca202ac40d 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -103,6 +103,27 @@ bool BlenderSync::sync_recalc()
if(b_lamp->is_updated() || (b_lamp->node_tree() && b_lamp->node_tree().is_updated()))
shader_map.set_recalc(*b_lamp);
+ bool dicing_prop_changed = false;
+
+ if(experimental) {
+ PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
+
+ float updated_dicing_rate = preview ? RNA_float_get(&cscene, "preview_dicing_rate")
+ : RNA_float_get(&cscene, "dicing_rate");
+
+ if(dicing_rate != updated_dicing_rate) {
+ dicing_rate = updated_dicing_rate;
+ dicing_prop_changed = true;
+ }
+
+ int updated_max_subdivisions = RNA_int_get(&cscene, "max_subdivisions");
+
+ if(max_subdivisions != updated_max_subdivisions) {
+ max_subdivisions = updated_max_subdivisions;
+ dicing_prop_changed = true;
+ }
+ }
+
BL::BlendData::objects_iterator b_ob;
for(b_data.objects.begin(b_ob); b_ob != b_data.objects.end(); ++b_ob) {
@@ -112,7 +133,9 @@ bool BlenderSync::sync_recalc()
}
if(object_is_mesh(*b_ob)) {
- if(b_ob->is_updated_data() || b_ob->data().is_updated()) {
+ if(b_ob->is_updated_data() || b_ob->data().is_updated() ||
+ (dicing_prop_changed && object_subdivision_type(*b_ob, preview, experimental) != Mesh::SUBDIVISION_NONE))
+ {
BL::ID key = BKE_object_is_modified(*b_ob)? *b_ob: b_ob->data();
mesh_map.set_recalc(key);
}
@@ -129,42 +152,14 @@ bool BlenderSync::sync_recalc()
}
}
- bool dicing_prop_changed = false;
-
- if(experimental) {
- PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
-
- float updated_dicing_rate = preview ? RNA_float_get(&cscene, "preview_dicing_rate")
- : RNA_float_get(&cscene, "dicing_rate");
-
- if(dicing_rate != updated_dicing_rate) {
- dicing_rate = updated_dicing_rate;
- dicing_prop_changed = true;
- }
-
- int updated_max_subdivisions = RNA_int_get(&cscene, "max_subdivisions");
-
- if(max_subdivisions != updated_max_subdivisions) {
- max_subdivisions = updated_max_subdivisions;
- dicing_prop_changed = true;
- }
- }
-
BL::BlendData::meshes_iterator b_mesh;
for(b_data.meshes.begin(b_mesh); b_mesh != b_data.meshes.end(); ++b_mesh) {
if(b_mesh->is_updated()) {
mesh_map.set_recalc(*b_mesh);
}
- else if(dicing_prop_changed) {
- PointerRNA cmesh = RNA_pointer_get(&b_mesh->ptr, "cycles");
-
- if(RNA_enum_get(&cmesh, "subdivision_type"))
- mesh_map.set_recalc(*b_mesh);
- }
}
-
BL::BlendData::worlds_iterator b_world;
for(b_data.worlds.begin(b_world); b_world != b_data.worlds.end(); ++b_world) {