diff options
Diffstat (limited to 'source/blender/nodes/texture')
6 files changed, 75 insertions, 9 deletions
diff --git a/source/blender/nodes/texture/CMakeLists.txt b/source/blender/nodes/texture/CMakeLists.txt index 053b17e4e57..e595343b7d2 100644 --- a/source/blender/nodes/texture/CMakeLists.txt +++ b/source/blender/nodes/texture/CMakeLists.txt @@ -82,8 +82,5 @@ if(WITH_PYTHON) add_definitions(-DWITH_PYTHON) endif() -if(WITH_INTERNATIONAL) - add_definitions(-DWITH_INTERNATIONAL) -endif() blender_add_lib(bf_nodes_texture "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index 3d914d486c3..82ed43be779 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -170,6 +170,63 @@ void register_node_tree_type_tex(void) ntreeTypeAdd(tt); } +/**** Material/Texture trees ****/ + +bNodeThreadStack *ntreeGetThreadStack(bNodeTreeExec *exec, int thread) +{ + ListBase *lb = &exec->threadstack[thread]; + bNodeThreadStack *nts; + + for (nts = (bNodeThreadStack *)lb->first; nts; nts = nts->next) { + if (!nts->used) { + nts->used = true; + break; + } + } + + if (!nts) { + nts = MEM_callocN(sizeof(bNodeThreadStack), "bNodeThreadStack"); + nts->stack = (bNodeStack *)MEM_dupallocN(exec->stack); + nts->used = true; + BLI_addtail(lb, nts); + } + + return nts; +} + +void ntreeReleaseThreadStack(bNodeThreadStack *nts) +{ + nts->used = false; +} + +bool ntreeExecThreadNodes(bNodeTreeExec *exec, bNodeThreadStack *nts, void *callerdata, int thread) +{ + bNodeStack *nsin[MAX_SOCKET] = {NULL}; /* arbitrary... watch this */ + bNodeStack *nsout[MAX_SOCKET] = {NULL}; /* arbitrary... watch this */ + bNodeExec *nodeexec; + bNode *node; + int n; + + /* nodes are presorted, so exec is in order of list */ + + for (n = 0, nodeexec = exec->nodeexec; n < exec->totnodes; n++, nodeexec++) { + node = nodeexec->node; + if (node->need_exec) { + node_get_stack(node, nts->stack, nsin, nsout); + /* Handle muted nodes... + * If the mute func is not set, assume the node should never be muted, + * and hence execute it! + */ + if (node->typeinfo->exec_fn && !(node->flag & NODE_MUTED)) { + node->typeinfo->exec_fn(callerdata, thread, node, &nodeexec->data, nsin, nsout); + } + } + } + + /* signal to that all went OK, for render */ + return true; +} + bNodeTreeExec *ntreeTexBeginExecTree_internal(bNodeExecContext *context, bNodeTree *ntree, bNodeInstanceKey parent_key) diff --git a/source/blender/nodes/texture/node_texture_util.h b/source/blender/nodes/texture/node_texture_util.h index d53000058a3..7c8e39925bc 100644 --- a/source/blender/nodes/texture/node_texture_util.h +++ b/source/blender/nodes/texture/node_texture_util.h @@ -123,6 +123,18 @@ void tex_output(bNode *node, void params_from_cdata(TexParams *out, TexCallData *in); +struct bNodeThreadStack *ntreeGetThreadStack(struct bNodeTreeExec *exec, int thread); +void ntreeReleaseThreadStack(struct bNodeThreadStack *nts); +bool ntreeExecThreadNodes(struct bNodeTreeExec *exec, + struct bNodeThreadStack *nts, + void *callerdata, + int thread); + +struct bNodeTreeExec *ntreeTexBeginExecTree_internal(struct bNodeExecContext *context, + struct bNodeTree *ntree, + bNodeInstanceKey parent_key); +void ntreeTexEndExecTree_internal(struct bNodeTreeExec *exec); + #ifdef __cplusplus } #endif diff --git a/source/blender/nodes/texture/nodes/node_texture_output.c b/source/blender/nodes/texture/nodes/node_texture_output.c index 4911ab7ba9e..59c2d2766d0 100644 --- a/source/blender/nodes/texture/nodes/node_texture_output.c +++ b/source/blender/nodes/texture/nodes/node_texture_output.c @@ -49,10 +49,10 @@ static void exec(void *data, params_from_cdata(¶ms, cdata); if (in[1] && in[1]->hasinput && !in[0]->hasinput) { - tex_input_rgba(&target->tr, in[1], ¶ms, cdata->thread); + tex_input_rgba(target->trgba, in[1], ¶ms, cdata->thread); } else { - tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread); + tex_input_rgba(target->trgba, in[0], ¶ms, cdata->thread); } } else { @@ -61,9 +61,9 @@ static void exec(void *data, TexParams params; params_from_cdata(¶ms, cdata); - tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread); + tex_input_rgba(target->trgba, in[0], ¶ms, cdata->thread); - target->tin = (target->tr + target->tg + target->tb) / 3.0f; + target->tin = (target->trgba[0] + target->trgba[1] + target->trgba[2]) / 3.0f; target->talpha = true; if (target->nor) { diff --git a/source/blender/nodes/texture/nodes/node_texture_proc.c b/source/blender/nodes/texture/nodes/node_texture_proc.c index 8c294b5954d..38e4f0268e8 100644 --- a/source/blender/nodes/texture/nodes/node_texture_proc.c +++ b/source/blender/nodes/texture/nodes/node_texture_proc.c @@ -72,7 +72,7 @@ static void do_proc(float *result, } if (textype & TEX_RGB) { - copy_v4_v4(result, &texres.tr); + copy_v4_v4(result, texres.trgba); } else { copy_v4_v4(result, col1); diff --git a/source/blender/nodes/texture/nodes/node_texture_texture.c b/source/blender/nodes/texture/nodes/node_texture_texture.c index 083ae67ccb6..f8f8f25cb5a 100644 --- a/source/blender/nodes/texture/nodes/node_texture_texture.c +++ b/source/blender/nodes/texture/nodes/node_texture_texture.c @@ -71,7 +71,7 @@ static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor textype = multitex_nodes(nodetex, co, dxt, dyt, p->osatex, &texres, thread, 0, p->mtex, NULL); if (textype & TEX_RGB) { - copy_v4_v4(out, &texres.tr); + copy_v4_v4(out, texres.trgba); } else { copy_v4_v4(out, col1); |