Fix for bug #8385: vector inputs of texture node in the compositor did
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Thu, 13 Mar 2008 11:26:18 +0000 (11:26 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Thu, 13 Mar 2008 11:26:18 +0000 (11:26 +0000)
not work correct, it should use bNodeStack inputs like other nodes.

source/blender/nodes/intern/CMP_nodes/CMP_texture.c
source/blender/nodes/intern/CMP_util.h

index 31afe74bd11403696fa764afa6de599df0cc5e74..c0845a582d3898205f32fa234352df3f0d73158f 100644 (file)
@@ -45,16 +45,15 @@ static bNodeSocketType cmp_node_texture_out[]= {
 static void texture_procedural(CompBuf *cbuf, float *col, float xco, float yco)
 {
        bNode *node= cbuf->node;
-       bNodeSocket *sock= node->inputs.first;
        TexResult texres= {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0, NULL};
        float vec[3], *size, nor[3]={0.0f, 0.0f, 0.0f};
        int retval, type= cbuf->type;
        
-       size= sock->next->ns.vec;
+       size= cbuf->procedural_size;
        
-       vec[0]= size[0]*(xco + sock->ns.vec[0]);
-       vec[1]= size[1]*(yco + sock->ns.vec[1]);
-       vec[2]= size[2]*sock->ns.vec[2];
+       vec[0]= size[0]*(xco + cbuf->procedural_offset[0]);
+       vec[1]= size[1]*(yco + cbuf->procedural_offset[1]);
+       vec[2]= size[2]*cbuf->procedural_offset[2];
        
        retval= multitex_ext((Tex *)node->id, vec, NULL, NULL, 0, &texres);
        
@@ -106,6 +105,8 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
                
                prevbuf->rect_procedural= texture_procedural;
                prevbuf->node= node;
+               VECCOPY(prevbuf->procedural_offset, in[0]->vec);
+               VECCOPY(prevbuf->procedural_size, in[1]->vec);
                composit1_pixel_processor(node, prevbuf, prevbuf, out[0]->vec, do_copy_rgba, CB_RGBA);
                generate_preview(node, prevbuf);
                free_compbuf(prevbuf);
@@ -115,6 +116,8 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
                        
                        stackbuf->rect_procedural= texture_procedural;
                        stackbuf->node= node;
+                       VECCOPY(stackbuf->procedural_offset, in[0]->vec);
+                       VECCOPY(stackbuf->procedural_size, in[1]->vec);
                        
                        out[0]->data= stackbuf; 
                }
@@ -123,6 +126,8 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in,
                        
                        stackbuf->rect_procedural= texture_procedural;
                        stackbuf->node= node;
+                       VECCOPY(stackbuf->procedural_offset, in[0]->vec);
+                       VECCOPY(stackbuf->procedural_size, in[1]->vec);
                        
                        out[1]->data= stackbuf;
                }
index a0e2f90f0dabe2fb7580a89aaa0ba04795256698..0d7bda0604cf97ca75654b84a51ada722295cc04 100644 (file)
@@ -107,6 +107,7 @@ typedef struct CompBuf {
        int xof, yof;           /* relative to center of target image */
        
        void (*rect_procedural)(struct CompBuf *, float *, float, float);
+       float procedural_size[3], procedural_offset[3];
        bNode *node;            /* only in use for procedural bufs */
        
        struct CompBuf *next, *prev;    /* for pass-on, works nicer than reference counting */