From e6252661627407c8ed1004856ccfc67d32cf825d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 13 Mar 2008 11:26:18 +0000 Subject: Fix for bug #8385: vector inputs of texture node in the compositor did not work correct, it should use bNodeStack inputs like other nodes. --- source/blender/nodes/intern/CMP_nodes/CMP_texture.c | 15 ++++++++++----- source/blender/nodes/intern/CMP_util.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'source/blender/nodes') diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_texture.c b/source/blender/nodes/intern/CMP_nodes/CMP_texture.c index 31afe74bd11..c0845a582d3 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_texture.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_texture.c @@ -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; } diff --git a/source/blender/nodes/intern/CMP_util.h b/source/blender/nodes/intern/CMP_util.h index a0e2f90f0da..0d7bda0604c 100644 --- a/source/blender/nodes/intern/CMP_util.h +++ b/source/blender/nodes/intern/CMP_util.h @@ -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 */ -- cgit v1.2.3