Revision: 42019
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42019
Author:   mont29
Date:     2011-11-20 16:38:23 +0000 (Sun, 20 Nov 2011)
Log Message:
-----------
Muting node patch: second part. Also fix [#27636] Muting shading nodes is 
ignored

Now, compositing, shading and texture nodes have a consistent muting system, 
with default behaving as previous (for compo), and which can be optionaly 
customized by each node.
Shader nodes are also GLSL muted.

However, Cycles is currently unaware of muted nodes, will try to address 
this?\226?\128?\166

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.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/gpu/CMakeLists.txt
    trunk/blender/source/blender/gpu/GPU_material.h
    trunk/blender/source/blender/gpu/SConscript
    trunk/blender/source/blender/gpu/intern/gpu_codegen.c
    trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl
    trunk/blender/source/blender/gpu/intern/gpu_shader_material.glsl.c
    trunk/blender/source/blender/nodes/composite/node_composite_tree.c
    trunk/blender/source/blender/nodes/composite/node_composite_util.c
    trunk/blender/source/blender/nodes/composite/node_composite_util.h
    
trunk/blender/source/blender/nodes/composite/nodes/node_composite_composite.c
    
trunk/blender/source/blender/nodes/composite/nodes/node_composite_splitViewer.c
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_viewer.c
    trunk/blender/source/blender/nodes/intern/node_exec.c
    trunk/blender/source/blender/nodes/intern/node_util.c
    trunk/blender/source/blender/nodes/intern/node_util.h
    trunk/blender/source/blender/nodes/shader/node_shader_tree.c
    trunk/blender/source/blender/nodes/shader/node_shader_util.c
    trunk/blender/source/blender/nodes/shader/node_shader_util.h
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_output.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_output_lamp.c
    
trunk/blender/source/blender/nodes/shader/nodes/node_shader_output_material.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_output_world.c
    trunk/blender/source/blender/nodes/texture/node_texture_tree.c
    trunk/blender/source/blender/nodes/texture/node_texture_util.c
    trunk/blender/source/blender/nodes/texture/node_texture_util.h
    trunk/blender/source/blender/nodes/texture/nodes/node_texture_output.c
    trunk/blender/source/blender/nodes/texture/nodes/node_texture_viewer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h  2011-11-20 16:26:42 UTC 
(rev 42018)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h  2011-11-20 16:38:23 UTC 
(rev 42019)
@@ -190,10 +190,24 @@
         * when a final generic version of execution code is defined, this will 
be changed anyway
         */
        void (*newexecfunc)(void *data, int thread, struct bNode *, void 
*nodedata, struct bNodeStack **, struct bNodeStack **);
+       /* This is the muting callback.
+        * XXX Mimics the newexecfunc signature... Not sure all of this will be 
useful, we will see.
+        */
+       void (*mutefunc)(void *data, int thread, struct bNode *, void 
*nodedata, struct bNodeStack **, struct bNodeStack **);
+       /* And the muting util.
+        * Returns links as a ListBase, as pairs of bNodeStack* if in/out 
bNodeStacks were provided,
+        * else as pairs of bNodeSocket* if node tree was provided.
+        */
+       ListBase (*mutelinksfunc)(struct bNodeTree *, struct bNode *, struct 
bNodeStack **, struct bNodeStack **,
+                                 struct GPUNodeStack *, struct GPUNodeStack *);
        /* gpu */
        int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct 
GPUNodeStack *in, struct GPUNodeStack *out);
        /* extended gpu function */
        int (*gpuextfunc)(struct GPUMaterial *mat, struct bNode *node, void 
*nodedata, struct GPUNodeStack *in, struct GPUNodeStack *out);
+       /* This is the muting gpu callback.
+        * XXX Mimics the gpuextfunc signature... Not sure all of this will be 
useful, we will see.
+        */
+       int (*gpumutefunc)(struct GPUMaterial *, struct bNode *, void *, struct 
GPUNodeStack *, struct GPUNodeStack *);
 } bNodeType;
 
 /* node->exec, now in use for composites (#define for break is same as ready 
yes) */
@@ -270,6 +284,13 @@
        void (*update_node)(struct bNodeTree *ntree, struct bNode *node);
        
        int (*validate_link)(struct bNodeTree *ntree, struct bNodeLink *link);
+
+       /* Default muting pointers. */
+       void (*mutefunc)(void *data, int thread, struct bNode *, void 
*nodedata, struct bNodeStack **, struct bNodeStack **);
+       ListBase (*mutelinksfunc)(struct bNodeTree *, struct bNode *, struct 
bNodeStack **, struct bNodeStack **,
+                                 struct GPUNodeStack *, struct GPUNodeStack *);
+       /* gpu */
+       int (*gpumutefunc)(struct GPUMaterial *, struct bNode *, void *, struct 
GPUNodeStack *, struct GPUNodeStack *);
 } bNodeTreeType;
 
 /* ************** GENERIC API, TREES *************** */
@@ -391,13 +412,25 @@
                                                                         struct 
bNodeTree *(*group_edit_set)(struct bNode *node, int edit),
                                                                         void 
(*group_edit_clear)(struct bNode *node));
 
-void                   node_type_exec(struct bNodeType *ntype, void 
(*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack 
**));
+void                   node_type_exec(struct bNodeType *ntype, void 
(*execfunc)(void *data, struct bNode *, struct bNodeStack **,
+                                                                         
struct bNodeStack **));
 void                   node_type_exec_new(struct bNodeType *ntype,
                                                                   void 
*(*initexecfunc)(struct bNode *node),
                                                                   void 
(*freeexecfunc)(struct bNode *node, void *nodedata),
-                                                                  void 
(*newexecfunc)(void *data, int thread, struct bNode *, void *nodedata, struct 
bNodeStack **, struct bNodeStack **));
-void                   node_type_gpu(struct bNodeType *ntype, int 
(*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack 
*in, struct GPUNodeStack *out));
-void                   node_type_gpu_ext(struct bNodeType *ntype, int 
(*gpuextfunc)(struct GPUMaterial *mat, struct bNode *node, void *nodedata, 
struct GPUNodeStack *in, struct GPUNodeStack *out));
+                                                                  void 
(*newexecfunc)(void *data, int thread, struct bNode *, void *nodedata,
+                                                                               
       struct bNodeStack **, struct bNodeStack **));
+void                   node_type_mute(struct bNodeType *ntype,
+                               void (*mutefunc)(void *data, int thread, struct 
bNode *, void *nodedata,
+                                                struct bNodeStack **, struct 
bNodeStack **),
+                               ListBase (*mutelinksfunc)(struct bNodeTree *, 
struct bNode *, struct bNodeStack **,
+                                                         struct bNodeStack **, 
struct GPUNodeStack*, struct GPUNodeStack*));
+void                   node_type_gpu(struct bNodeType *ntype, int 
(*gpufunc)(struct GPUMaterial *mat, struct bNode *node,
+                                                                      struct 
GPUNodeStack *in, struct GPUNodeStack *out));
+void                   node_type_gpu_ext(struct bNodeType *ntype, int 
(*gpuextfunc)(struct GPUMaterial *mat, struct bNode *node,
+                                                                             
void *nodedata, struct GPUNodeStack *in,
+                                                                             
struct GPUNodeStack *out));
+void                   node_type_gpu_mute(struct bNodeType *ntype, int 
(*gpumutefunc)(struct GPUMaterial *, struct bNode *, void *,
+                                                                               
struct GPUNodeStack *, struct GPUNodeStack *));
 void                   node_type_compatibility(struct bNodeType *ntype, short 
compatibility);
 
 /* ************** COMMON NODES *************** */

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c       2011-11-20 
16:26:42 UTC (rev 42018)
+++ trunk/blender/source/blender/blenkernel/intern/node.c       2011-11-20 
16:38:23 UTC (rev 42019)
@@ -1643,15 +1643,22 @@
        }
 }
 
-void node_type_base(bNodeTreeType *UNUSED(ttype), bNodeType *ntype, int type, 
const char *name, short nclass, short flag)
+void node_type_base(bNodeTreeType *ttype, bNodeType *ntype, int type, const 
char *name, short nclass, short flag)
 {
        memset(ntype, 0, sizeof(bNodeType));
-       
+
        ntype->type = type;
        BLI_strncpy(ntype->name, name, sizeof(ntype->name));
        ntype->nclass = nclass;
        ntype->flag = flag;
-       
+
+       /* Default muting stuff. */
+       if(ttype) {
+               ntype->mutefunc      = ttype->mutefunc;
+               ntype->mutelinksfunc = ttype->mutelinksfunc;
+               ntype->gpumutefunc   = ttype->gpumutefunc;
+       }
+
        /* default size values */
        ntype->width = 140;
        ntype->minwidth = 100;
@@ -1746,6 +1753,16 @@
        ntype->newexecfunc = newexecfunc;
 }
 
+void node_type_mute(struct bNodeType *ntype,
+                    void (*mutefunc)(void *data, int thread, struct bNode *, 
void *nodedata,
+                                     struct bNodeStack **, struct bNodeStack 
**),
+                    ListBase (*mutelinksfunc)(struct bNodeTree *, struct bNode 
*, struct bNodeStack **, struct bNodeStack **,
+                                              struct GPUNodeStack *, struct 
GPUNodeStack *))
+{
+       ntype->mutefunc = mutefunc;
+       ntype->mutelinksfunc = mutelinksfunc;
+}
+
 void node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial 
*mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out))
 {
        ntype->gpufunc = gpufunc;
@@ -1756,6 +1773,12 @@
        ntype->gpuextfunc = gpuextfunc;
 }
 
+void node_type_gpu_mute(struct bNodeType *ntype, int (*gpumutefunc)(struct 
GPUMaterial *, struct bNode *, void *,
+                                                                    struct 
GPUNodeStack *, struct GPUNodeStack *))
+{
+       ntype->gpumutefunc = gpumutefunc;
+}
+
 void node_type_compatibility(struct bNodeType *ntype, short compatibility)
 {
        ntype->compatibility = compatibility;

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c 2011-11-20 
16:26:42 UTC (rev 42018)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c 2011-11-20 
16:38:23 UTC (rev 42019)
@@ -73,6 +73,8 @@
 #include "NOD_composite.h"
 #include "NOD_shader.h"
 
+#include "intern/node_util.h"
+
 #include "node_intern.h"
 
 /* width of socket columns in group display */
@@ -418,38 +420,41 @@
        return TH_NODE;
 }
 
-/* note: in cmp_util.c is similar code, for node_compo_pass_on() */
+/* note: in cmp_util.c is similar code, for node_compo_pass_on()
+ *       the same goes for shader and texture nodes. */
 /* note: in node_edit.c is similar code, for untangle node */
 static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node)
 {
-       static int types[]= { SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA };
+       ListBase links;
+       LinkInOutsMuteNode *lnk;
        bNodeLink link= {NULL};
        int i;
-       
-       /* connect the first input of each type with first output of the same 
type */
-       
+
+       if(node->typeinfo->mutelinksfunc == NULL)
+               return;
+
+       /* Get default muting links (as bNodeSocket pointers). */
+       links = node->typeinfo->mutelinksfunc(snode->edittree, node, NULL, 
NULL, NULL, NULL);
+
        glEnable(GL_BLEND);
-       glEnable( GL_LINE_SMOOTH );
-       
+       glEnable(GL_LINE_SMOOTH);
+
        link.fromnode = link.tonode = node;
-       for (i=0; i < 3; ++i) {
-               /* find input socket */
-               for (link.fromsock=node->inputs.first; link.fromsock; 
link.fromsock=link.fromsock->next)
-                       if (link.fromsock->type==types[i] && 
nodeCountSocketLinks(snode->edittree, link.fromsock))
-                               break;
-               if (link.fromsock) {
-                       for (link.tosock=node->outputs.first; link.tosock; 
link.tosock=link.tosock->next)
-                               if (link.tosock->type==types[i] && 
nodeCountSocketLinks(snode->edittree, link.tosock))
-                                       break;
-                       
-                       if (link.tosock) {
-                               node_draw_link_bezier(v2d, snode, &link, 
TH_REDALERT, 0, TH_WIRE, 0, TH_WIRE);
-                       }
+       for(lnk = links.first; lnk; lnk = lnk->next) {
+               for(i = 0; i < lnk->num_outs; i++) {
+                       link.fromsock = (bNodeSocket*)(lnk->in);
+                       link.tosock   = (bNodeSocket*)(lnk->outs)+i;
+                       node_draw_link_bezier(v2d, snode, &link, TH_REDALERT, 
0, TH_WIRE, 0, TH_WIRE);
                }
+               /* If num_outs > 1, lnk->outs was an allocated table of 
pointers... */
+               if(i > 1)
+                       MEM_freeN(lnk->outs);
        }
-       
+
        glDisable(GL_BLEND);
-       glDisable( GL_LINE_SMOOTH );
+       glDisable(GL_LINE_SMOOTH);
+
+       BLI_freelistN(&links);
 }
 
 /* this might have some more generic use */

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2011-11-20 
16:26:42 UTC (rev 42018)

@@ 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