diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-04-07 19:21:25 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-04-07 19:21:25 +0400 |
commit | 6dec5db1e6e050067ee58d6db7a476b8153a5d0d (patch) | |
tree | b6a2e05ba5d54b7fc64956dee89a1f46932ca9ff /source/blender/nodes/intern/CMP_nodes/CMP_texture.c | |
parent | 77639a5cdeea0f9718acf205ab300645add02969 (diff) |
Fix for bug #8073: texture nodes connected to a viewer could crash.
Also fixed a bug where procedural buffers did not convert correctly
to different buffer types (e.g. value -> rgba would give red).
Diffstat (limited to 'source/blender/nodes/intern/CMP_nodes/CMP_texture.c')
-rw-r--r-- | source/blender/nodes/intern/CMP_nodes/CMP_texture.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_texture.c b/source/blender/nodes/intern/CMP_nodes/CMP_texture.c index c0845a582d3..c1f1948dba1 100644 --- a/source/blender/nodes/intern/CMP_nodes/CMP_texture.c +++ b/source/blender/nodes/intern/CMP_nodes/CMP_texture.c @@ -42,12 +42,12 @@ static bNodeSocketType cmp_node_texture_out[]= { }; /* called without rect allocated */ -static void texture_procedural(CompBuf *cbuf, float *col, float xco, float yco) +static void texture_procedural(CompBuf *cbuf, float *out, float xco, float yco) { bNode *node= cbuf->node; 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; + float vec[3], *size, nor[3]={0.0f, 0.0f, 0.0f}, col[4]; + int retval, type= cbuf->procedural_type; size= cbuf->procedural_size; @@ -79,6 +79,8 @@ static void texture_procedural(CompBuf *cbuf, float *col, float xco, float yco) else { VECCOPY(col, nor); } + + typecheck_compbuf_color(out, col, cbuf->type, cbuf->procedural_type); } /* texture node outputs get a small rect, to make sure all other nodes accept it */ @@ -107,6 +109,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in, prevbuf->node= node; VECCOPY(prevbuf->procedural_offset, in[0]->vec); VECCOPY(prevbuf->procedural_size, in[1]->vec); + prevbuf->procedural_type= CB_RGBA; composit1_pixel_processor(node, prevbuf, prevbuf, out[0]->vec, do_copy_rgba, CB_RGBA); generate_preview(node, prevbuf); free_compbuf(prevbuf); @@ -118,6 +121,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in, stackbuf->node= node; VECCOPY(stackbuf->procedural_offset, in[0]->vec); VECCOPY(stackbuf->procedural_size, in[1]->vec); + stackbuf->procedural_type= CB_VAL; out[0]->data= stackbuf; } @@ -128,6 +132,7 @@ static void node_composit_exec_texture(void *data, bNode *node, bNodeStack **in, stackbuf->node= node; VECCOPY(stackbuf->procedural_offset, in[0]->vec); VECCOPY(stackbuf->procedural_size, in[1]->vec); + stackbuf->procedural_type= CB_RGBA; out[1]->data= stackbuf; } |