Revision: 42088
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42088
Author:   blendix
Date:     2011-11-23 15:16:41 +0000 (Wed, 23 Nov 2011)
Log Message:
-----------
Fix #28934: missing GLSL/icon update when changing materials used in nodes.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/render/render_update.c

Modified: trunk/blender/source/blender/editors/render/render_update.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_update.c 2011-11-23 
14:40:15 UTC (rev 42087)
+++ trunk/blender/source/blender/editors/render/render_update.c 2011-11-23 
15:16:41 UTC (rev 42088)
@@ -188,6 +188,10 @@
                        if(node->id == (ID*)tex) {
                                return 1;
                        }
+                       else if(GS(node->id->name) == ID_MA) {
+                               if(mtex_use_tex(((Material*)node->id)->mtex, 
MAX_MTEX, tex))
+                                       return 1;
+                       }
                        else if(node->type==NODE_GROUP) {
                                if(nodes_use_tex((bNodeTree *)node->id, tex))
                                        return 1;
@@ -198,14 +202,46 @@
        return 0;
 }
 
-static void material_changed(Main *UNUSED(bmain), Material *ma)
+static int nodes_use_material(bNodeTree *ntree, Material *ma)
 {
+       bNode *node;
+
+       for(node=ntree->nodes.first; node; node= node->next) {
+               if(node->id) {
+                       if(node->id == (ID*)ma) {
+                               return 1;
+                       }
+                       else if(node->type==NODE_GROUP) {
+                               if(nodes_use_material((bNodeTree *)node->id, 
ma))
+                                       return 1;
+                       }
+               }
+       }
+
+       return 0;
+}
+
+static void material_changed(Main *bmain, Material *ma)
+{
+       Material *parent;
+
        /* icons */
        BKE_icon_changed(BKE_icon_getid(&ma->id));
 
        /* glsl */
        if(ma->gpumaterial.first)
                GPU_material_free(ma);
+
+       /* find node materials using this */
+       for(parent=bmain->mat.first; parent; parent=parent->id.next) {
+               if(parent->use_nodes && parent->nodetree && 
nodes_use_material(parent->nodetree, ma));
+               else continue;
+
+               BKE_icon_changed(BKE_icon_getid(&parent->id));
+
+               if(parent->gpumaterial.first)
+                       GPU_material_free(parent);
+       }
 }
 
 static void texture_changed(Main *bmain, Tex *tex)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to