Revision: 41474
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41474
Author:   blendix
Date:     2011-11-02 18:55:32 +0000 (Wed, 02 Nov 2011)
Log Message:
-----------
Nodes: add support for shader nodes on world and lamps, in addition to 
materials.
The internal render engine does not support them, and they are not accesible in
the UI yet, but cycles will use them.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_node.py
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/world.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/include/ED_node.h
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/editors/render/render_update.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/space_node.c
    trunk/blender/source/blender/makesdna/DNA_lamp_types.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesdna/DNA_world_types.h
    trunk/blender/source/blender/makesrna/intern/rna_lamp.c
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c
    trunk/blender/source/blender/makesrna/intern/rna_world.c
    trunk/blender/source/blender/nodes/shader/node_shader_tree.c
    trunk/blender/source/blender/nodes/shader/node_shader_util.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_node.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_node.py   2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/release/scripts/startup/bl_ui/space_node.py   2011-11-02 
18:55:32 UTC (rev 41474)
@@ -42,7 +42,7 @@
 
         layout.prop(snode, "tree_type", text="", expand=True)
 
-        if snode.tree_type == 'MATERIAL':
+        if snode.tree_type == 'SHADER':
             if id_from:
                 layout.template_ID(id_from, "active_material", 
new="material.new")
             if snode_id:

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c   2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c   2011-11-02 
18:55:32 UTC (rev 41474)
@@ -43,9 +43,11 @@
 #include "BLI_utildefines.h"
 
 #include "DNA_anim_types.h"
+#include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_texture_types.h"
+#include "DNA_world_types.h"
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
@@ -2291,7 +2293,7 @@
        EVAL_ANIM_NODETREE_IDS(main->tex.first, Tex, ADT_RECALC_ANIM);
        
        /* lamps */
-       EVAL_ANIM_IDS(main->lamp.first, ADT_RECALC_ANIM);
+       EVAL_ANIM_NODETREE_IDS(main->lamp.first, Lamp, ADT_RECALC_ANIM);
        
        /* materials */
        EVAL_ANIM_NODETREE_IDS(main->mat.first, Material, ADT_RECALC_ANIM);
@@ -2331,7 +2333,7 @@
        EVAL_ANIM_IDS(main->object.first, 0); 
        
        /* worlds */
-       EVAL_ANIM_IDS(main->world.first, ADT_RECALC_ANIM);
+       EVAL_ANIM_NODETREE_IDS(main->world.first, World, ADT_RECALC_ANIM);
        
        /* scenes */
        EVAL_ANIM_NODETREE_IDS(main->scene.first, Scene, ADT_RECALC_ANIM);

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c     2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenkernel/intern/object.c     2011-11-02 
18:55:32 UTC (rev 41474)
@@ -86,6 +86,7 @@
 #include "BKE_mesh.h"
 #include "BKE_mball.h"
 #include "BKE_modifier.h"
+#include "BKE_node.h"
 #include "BKE_object.h"
 #include "BKE_paint.h"
 #include "BKE_particle.h"
@@ -877,6 +878,9 @@
        }
        
        lan->curfalloff = curvemapping_copy(la->curfalloff);
+
+       if(la->nodetree)
+               lan->nodetree= ntreeCopyTree(la->nodetree);
        
        if(la->preview)
                lan->preview = BKE_previewimg_copy(la->preview);
@@ -903,6 +907,9 @@
        
        lan->curfalloff = curvemapping_copy(la->curfalloff);
 
+       if(la->nodetree)
+               lan->nodetree= ntreeLocalize(la->nodetree);
+       
        lan->preview= NULL;
        
        return lan;
@@ -978,6 +985,12 @@
        BKE_free_animdata((ID *)la);
 
        curvemapping_free(la->curfalloff);
+
+       /* is no lib link block, but lamp extension */
+       if(la->nodetree) {
+               ntreeFreeTree(la->nodetree);
+               MEM_freeN(la->nodetree);
+       }
        
        BKE_previewimg_free(&la->preview);
        BKE_icon_delete(&la->id);

Modified: trunk/blender/source/blender/blenkernel/intern/world.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/world.c      2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenkernel/intern/world.c      2011-11-02 
18:55:32 UTC (rev 41474)
@@ -42,12 +42,14 @@
 #include "BLI_utildefines.h"
 #include "BLI_bpath.h"
 
-#include "BKE_world.h"
-#include "BKE_library.h"
 #include "BKE_animsys.h"
 #include "BKE_global.h"
+#include "BKE_icons.h"
+#include "BKE_library.h"
+#include "BKE_library.h"
 #include "BKE_main.h"
-#include "BKE_icons.h"
+#include "BKE_node.h"
+#include "BKE_world.h"
 
 void free_world(World *wrld)
 {
@@ -63,6 +65,12 @@
 
        BKE_free_animdata((ID *)wrld);
 
+       /* is no lib link block, but world extension */
+       if(wrld->nodetree) {
+               ntreeFreeTree(wrld->nodetree);
+               MEM_freeN(wrld->nodetree);
+       }
+
        BKE_icon_delete((struct ID*)wrld);
        wrld->id.icon_id = 0;
 }
@@ -119,6 +127,9 @@
                        id_us_plus((ID *)wrldn->mtex[a]->tex);
                }
        }
+
+       if(wrld->nodetree)
+               wrldn->nodetree= ntreeCopyTree(wrld->nodetree);
        
        if(wrld->preview)
                wrldn->preview = BKE_previewimg_copy(wrld->preview);
@@ -143,6 +154,9 @@
                }
        }
 
+       if(wrld->nodetree)
+               wrldn->nodetree= ntreeLocalize(wrld->nodetree);
+       
        wrldn->preview= NULL;
        
        return wrldn;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2011-11-02 
18:55:32 UTC (rev 41474)
@@ -2182,6 +2182,7 @@
                for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
                        if (ntree->update)
                                ntreeUpdateTree(ntree);
+
                for (i=0; i < NUM_NTREE_TYPES; ++i) {
                        ntreetype= ntreeGetType(i);
                        if (ntreetype && ntreetype->foreach_nodetree)
@@ -2507,6 +2508,9 @@
                        }
                        
                        la->ipo= newlibadr_us(fd, la->id.lib, la->ipo); // XXX 
depreceated - old animation system
+
+                       if(la->nodetree)
+                               lib_link_ntree(fd, &la->id, la->nodetree);
                        
                        la->id.flag -= LIB_NEEDLINK;
                }
@@ -2528,6 +2532,10 @@
        la->curfalloff= newdataadr(fd, la->curfalloff);
        if(la->curfalloff)
                direct_link_curvemapping(fd, la->curfalloff);
+
+       la->nodetree= newdataadr(fd, la->nodetree);
+       if(la->nodetree)
+               direct_link_nodetree(fd, la->nodetree);
        
        la->preview = direct_link_preview_image(fd, la->preview);
 }
@@ -2670,6 +2678,9 @@
                                        mtex->object= newlibadr(fd, 
wrld->id.lib, mtex->object);
                                }
                        }
+
+                       if(wrld->nodetree)
+                               lib_link_ntree(fd, &wrld->id, wrld->nodetree);
                        
                        wrld->id.flag -= LIB_NEEDLINK;
                }
@@ -2687,6 +2698,11 @@
        for(a=0; a<MAX_MTEX; a++) {
                wrld->mtex[a]= newdataadr(fd, wrld->mtex[a]);
        }
+
+       wrld->nodetree= newdataadr(fd, wrld->nodetree);
+       if(wrld->nodetree)
+               direct_link_nodetree(fd, wrld->nodetree);
+
        wrld->preview = direct_link_preview_image(fd, wrld->preview);
 }
 
@@ -5004,6 +5020,10 @@
                                                        if(snode->id) {
                                                                
if(GS(snode->id->name)==ID_MA)
                                                                        
snode->nodetree= ((Material *)snode->id)->nodetree;
+                                                               else 
if(GS(snode->id->name)==ID_WO)
+                                                                       
snode->nodetree= ((World *)snode->id)->nodetree;
+                                                               else 
if(GS(snode->id->name)==ID_LA)
+                                                                       
snode->nodetree= ((Lamp *)snode->id)->nodetree;
                                                                else 
if(GS(snode->id->name)==ID_SCE)
                                                                        
snode->nodetree= ((Scene *)snode->id)->nodetree;
                                                                else 
if(GS(snode->id->name)==ID_TE)
@@ -12723,6 +12743,9 @@
        
        if (la->adt)
                expand_animdata(fd, mainvar, la->adt);
+
+       if(la->nodetree)
+               expand_nodetree(fd, mainvar, la->nodetree);
 }
 
 static void expand_lattice(FileData *fd, Main *mainvar, Lattice *lt)
@@ -12750,6 +12773,9 @@
        
        if (wrld->adt)
                expand_animdata(fd, mainvar, wrld->adt);
+
+       if(wrld->nodetree)
+               expand_nodetree(fd, mainvar, wrld->nodetree);
 }
 
 

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c  2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c  2011-11-02 
18:55:32 UTC (rev 41474)
@@ -1857,6 +1857,12 @@
                        for(a=0; a<MAX_MTEX; a++) {
                                if(wrld->mtex[a]) writestruct(wd, DATA, "MTex", 
1, wrld->mtex[a]);
                        }
+
+                       /* nodetree is integral part of lamps, no libdata */
+                       if(wrld->nodetree) {
+                               writestruct(wd, DATA, "bNodeTree", 1, 
wrld->nodetree);
+                               write_nodetree(wd, wrld->nodetree);
+                       }
                        
                        write_previews(wd, wrld->preview);
                }
@@ -1886,6 +1892,12 @@
                        if(la->curfalloff)
                                write_curvemapping(wd, la->curfalloff); 
                        
+                       /* nodetree is integral part of lamps, no libdata */
+                       if(la->nodetree) {
+                               writestruct(wd, DATA, "bNodeTree", 1, 
la->nodetree);
+                               write_nodetree(wd, la->nodetree);
+                       }
+
                        write_previews(wd, la->preview);
                        
                }

Modified: trunk/blender/source/blender/editors/include/ED_node.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_node.h      2011-11-02 
18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/editors/include/ED_node.h      2011-11-02 
18:55:32 UTC (rev 41474)
@@ -51,7 +51,7 @@
 void ED_node_generic_update(struct Main *bmain, struct bNodeTree *ntree, 
struct bNode *node);
 
 /* node_edit.c */
-void ED_node_shader_default(struct Material *ma);
+void ED_node_shader_default(struct Scene *scene, struct ID *id);
 void ED_node_composit_default(struct Scene *sce);
 void ED_node_texture_default(struct Tex *tex);
 void ED_node_link_intersect_test(struct ScrArea *sa, int test);

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c        
2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/editors/render/render_preview.c        
2011-11-02 18:55:32 UTC (rev 41474)
@@ -420,6 +420,12 @@
                                                base->object->data= la;
                                }
                        }
+
+                       if(la && la->nodetree && sp->pr_method==PR_NODE_RENDER) 
{
+                               /* two previews, they get copied by wmJob */
+                               ntreeInitPreview(origla->nodetree, sp->sizex, 
sp->sizey);
+                               ntreeInitPreview(la->nodetree, sp->sizex, 
sp->sizey);
+                       }
                }
                else if(id_type==ID_WO) {
                        World *wrld= NULL, *origwrld= (World *)id;
@@ -432,6 +438,12 @@
 
                        sce->lay= 1<<MA_SKY;
                        sce->world= wrld;
+
+                       if(wrld && wrld->nodetree && 
sp->pr_method==PR_NODE_RENDER) {
+                               /* two previews, they get copied by wmJob */
+                               ntreeInitPreview(wrld->nodetree, sp->sizex, 
sp->sizey);
+                               ntreeInitPreview(origwrld->nodetree, sp->sizex, 
sp->sizey);
+                       }
                }
                
                return sce;
@@ -566,6 +578,18 @@
                                if(sp->texcopy && tex->nodetree && 
sp->texcopy->nodetree)
                                        ntreeLocalSync(sp->texcopy->nodetree, 
tex->nodetree);
                        }
+                       else if( GS(sp->id->name) == ID_WO) {
+                               World *wrld= (World *)sp->id;
+                               
+                               if(sp->worldcopy && wrld->nodetree && 
sp->worldcopy->nodetree)
+                                       ntreeLocalSync(sp->worldcopy->nodetree, 
wrld->nodetree);
+                       }
+                       else if( GS(sp->id->name) == ID_LA) {
+                               Lamp *la= (Lamp *)sp->id;
+                               
+                               if(sp->lampcopy && la->nodetree && 
sp->lampcopy->nodetree)
+                                       ntreeLocalSync(sp->lampcopy->nodetree, 
la->nodetree);
+                       }
                }               
        }
 }

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

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to