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:
authorTon Roosendaal <ton@blender.org>2012-10-26 15:29:30 +0400
committerTon Roosendaal <ton@blender.org>2012-10-26 15:29:30 +0400
commit13af773398a530cdcd3fbe0671146ae28f65fd19 (patch)
treee406be27f49a5ec2be69e324f5f2b8486bb75b31
parent0e3de1df4bee62d12a347e74216afa2b42632070 (diff)
Bugfix #32975
Shader nodes didn't redraw correct on preview-type changes. Also made shader node previews draw nicely, without flashing empty images.
-rw-r--r--source/blender/blenkernel/intern/node.c8
-rw-r--r--source/blender/makesrna/intern/rna_material.c13
2 files changed, 19 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 5613f25fca4..3f30da7f349 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -403,7 +403,13 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
node->new_node = nnode;
nnode->new_node = NULL;
- nnode->preview = NULL;
+
+ /* only shader nodes get pleasant preview updating this way, compo uses own system */
+ if (node->preview && ntree->type == NTREE_SHADER) {
+ nnode->preview = MEM_dupallocN(node->preview);
+ if (node->preview->rect)
+ nnode->preview->rect = MEM_dupallocN(node->preview->rect);
+ }
if (ntree)
ntree->update |= NTREE_UPDATE_NODES;
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 6c3270c8e99..5e8dda7c065 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -107,6 +107,17 @@ static void rna_Material_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *p
}
}
+static void rna_Material_update_previews(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ Material *ma = ptr->id.data;
+
+ if (ma->nodetree)
+ ntreeClearPreview(ma->nodetree);
+
+ rna_Material_update(bmain, scene, ptr);
+}
+
+
static void rna_Material_draw_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
Material *ma = ptr->id.data;
@@ -1757,7 +1768,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "pr_type");
RNA_def_property_enum_items(prop, preview_type_items);
RNA_def_property_ui_text(prop, "Preview render type", "Type of preview render");
- RNA_def_property_update(prop, 0, "rna_Material_update");
+ RNA_def_property_update(prop, 0, "rna_Material_update_previews");
prop = RNA_def_property(srna, "ambient", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "amb");