diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/nodes/texture | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/nodes/texture')
26 files changed, 1654 insertions, 1561 deletions
diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c index 6aeaf8d0179..76b906f5f22 100644 --- a/source/blender/nodes/texture/node_texture_tree.c +++ b/source/blender/nodes/texture/node_texture_tree.c @@ -21,7 +21,6 @@ * \ingroup nodes */ - #include <string.h> #include "DNA_texture_types.h" @@ -51,57 +50,60 @@ #include "RE_shader_ext.h" -static void texture_get_from_context( - const bContext *C, bNodeTreeType *UNUSED(treetype), bNodeTree **r_ntree, ID **r_id, ID **r_from) +static void texture_get_from_context(const bContext *C, + bNodeTreeType *UNUSED(treetype), + bNodeTree **r_ntree, + ID **r_id, + ID **r_from) { - SpaceNode *snode = CTX_wm_space_node(C); - Scene *scene = CTX_data_scene(C); - ViewLayer *view_layer = CTX_data_view_layer(C); - Object *ob = OBACT(view_layer); - Tex *tx = NULL; - - if (snode->texfrom == SNODE_TEX_BRUSH) { - struct Brush *brush = NULL; - - if (ob && (ob->mode & OB_MODE_SCULPT)) - brush = BKE_paint_brush(&scene->toolsettings->sculpt->paint); - else - brush = BKE_paint_brush(&scene->toolsettings->imapaint.paint); - - if (brush) { - *r_from = (ID *)brush; - tx = give_current_brush_texture(brush); - if (tx) { - *r_id = &tx->id; - *r_ntree = tx->nodetree; - } - } - } - else if (snode->texfrom == SNODE_TEX_LINESTYLE) { - FreestyleLineStyle *linestyle = BKE_linestyle_active_from_view_layer(view_layer); - if (linestyle) { - *r_from = (ID *)linestyle; - tx = give_current_linestyle_texture(linestyle); - if (tx) { - *r_id = &tx->id; - *r_ntree = tx->nodetree; - } - } - } + SpaceNode *snode = CTX_wm_space_node(C); + Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + Object *ob = OBACT(view_layer); + Tex *tx = NULL; + + if (snode->texfrom == SNODE_TEX_BRUSH) { + struct Brush *brush = NULL; + + if (ob && (ob->mode & OB_MODE_SCULPT)) + brush = BKE_paint_brush(&scene->toolsettings->sculpt->paint); + else + brush = BKE_paint_brush(&scene->toolsettings->imapaint.paint); + + if (brush) { + *r_from = (ID *)brush; + tx = give_current_brush_texture(brush); + if (tx) { + *r_id = &tx->id; + *r_ntree = tx->nodetree; + } + } + } + else if (snode->texfrom == SNODE_TEX_LINESTYLE) { + FreestyleLineStyle *linestyle = BKE_linestyle_active_from_view_layer(view_layer); + if (linestyle) { + *r_from = (ID *)linestyle; + tx = give_current_linestyle_texture(linestyle); + if (tx) { + *r_id = &tx->id; + *r_ntree = tx->nodetree; + } + } + } } static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func) { - func(calldata, NODE_CLASS_INPUT, N_("Input")); - func(calldata, NODE_CLASS_OUTPUT, N_("Output")); - func(calldata, NODE_CLASS_OP_COLOR, N_("Color")); - func(calldata, NODE_CLASS_PATTERN, N_("Patterns")); - func(calldata, NODE_CLASS_TEXTURE, N_("Textures")); - func(calldata, NODE_CLASS_CONVERTOR, N_("Convertor")); - func(calldata, NODE_CLASS_DISTORT, N_("Distort")); - func(calldata, NODE_CLASS_GROUP, N_("Group")); - func(calldata, NODE_CLASS_INTERFACE, N_("Interface")); - func(calldata, NODE_CLASS_LAYOUT, N_("Layout")); + func(calldata, NODE_CLASS_INPUT, N_("Input")); + func(calldata, NODE_CLASS_OUTPUT, N_("Output")); + func(calldata, NODE_CLASS_OP_COLOR, N_("Color")); + func(calldata, NODE_CLASS_PATTERN, N_("Patterns")); + func(calldata, NODE_CLASS_TEXTURE, N_("Textures")); + func(calldata, NODE_CLASS_CONVERTOR, N_("Convertor")); + func(calldata, NODE_CLASS_DISTORT, N_("Distort")); + func(calldata, NODE_CLASS_GROUP, N_("Group")); + func(calldata, NODE_CLASS_INTERFACE, N_("Interface")); + func(calldata, NODE_CLASS_LAYOUT, N_("Layout")); } /* XXX muting disabled in previews because of threading issues with the main execution @@ -110,17 +112,17 @@ static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCa #if 1 static void localize(bNodeTree *localtree, bNodeTree *UNUSED(ntree)) { - bNode *node, *node_next; + bNode *node, *node_next; - /* replace muted nodes and reroute nodes by internal links */ - for (node = localtree->nodes.first; node; node = node_next) { - node_next = node->next; + /* replace muted nodes and reroute nodes by internal links */ + for (node = localtree->nodes.first; node; node = node_next) { + node_next = node->next; - if (node->flag & NODE_MUTED || node->type == NODE_REROUTE) { - nodeInternalRelink(localtree, node); - ntreeFreeLocalNode(localtree, node); - } - } + if (node->flag & NODE_MUTED || node->type == NODE_REROUTE) { + nodeInternalRelink(localtree, node); + ntreeFreeLocalNode(localtree, node); + } + } } #else static void localize(bNodeTree *UNUSED(localtree), bNodeTree *UNUSED(ntree)) @@ -130,206 +132,212 @@ static void localize(bNodeTree *UNUSED(localtree), bNodeTree *UNUSED(ntree)) static void local_sync(bNodeTree *localtree, bNodeTree *ntree) { - BKE_node_preview_sync_tree(ntree, localtree); + BKE_node_preview_sync_tree(ntree, localtree); } static void local_merge(Main *UNUSED(bmain), bNodeTree *localtree, bNodeTree *ntree) { - BKE_node_preview_merge_tree(ntree, localtree, true); + BKE_node_preview_merge_tree(ntree, localtree, true); } static void update(bNodeTree *ntree) { - ntree_update_reroute_nodes(ntree); + ntree_update_reroute_nodes(ntree); - if (ntree->update & NTREE_UPDATE_NODES) { - /* clean up preview cache, in case nodes have been removed */ - BKE_node_preview_remove_unused(ntree); - } + if (ntree->update & NTREE_UPDATE_NODES) { + /* clean up preview cache, in case nodes have been removed */ + BKE_node_preview_remove_unused(ntree); + } } bNodeTreeType *ntreeType_Texture; void register_node_tree_type_tex(void) { - bNodeTreeType *tt = ntreeType_Texture = MEM_callocN(sizeof(bNodeTreeType), "texture node tree type"); + bNodeTreeType *tt = ntreeType_Texture = MEM_callocN(sizeof(bNodeTreeType), + "texture node tree type"); - tt->type = NTREE_TEXTURE; - strcpy(tt->idname, "TextureNodeTree"); - strcpy(tt->ui_name, N_("Texture Node Editor")); - tt->ui_icon = 0; /* defined in drawnode.c */ - strcpy(tt->ui_description, N_("Texture nodes")); + tt->type = NTREE_TEXTURE; + strcpy(tt->idname, "TextureNodeTree"); + strcpy(tt->ui_name, N_("Texture Node Editor")); + tt->ui_icon = 0; /* defined in drawnode.c */ + strcpy(tt->ui_description, N_("Texture nodes")); - tt->foreach_nodeclass = foreach_nodeclass; - tt->update = update; - tt->localize = localize; - tt->local_sync = local_sync; - tt->local_merge = local_merge; - tt->get_from_context = texture_get_from_context; + tt->foreach_nodeclass = foreach_nodeclass; + tt->update = update; + tt->localize = localize; + tt->local_sync = local_sync; + tt->local_merge = local_merge; + tt->get_from_context = texture_get_from_context; - tt->ext.srna = &RNA_TextureNodeTree; + tt->ext.srna = &RNA_TextureNodeTree; - ntreeTypeAdd(tt); + ntreeTypeAdd(tt); } int ntreeTexTagAnimated(bNodeTree *ntree) { - bNode *node; - - if (ntree == NULL) return 0; - - for (node = ntree->nodes.first; node; node = node->next) { - if (node->type == TEX_NODE_CURVE_TIME) { - nodeUpdate(ntree, node); - return 1; - } - else if (node->type == NODE_GROUP) { - if (ntreeTexTagAnimated((bNodeTree *)node->id) ) { - return 1; - } - } - } - - return 0; + bNode *node; + + if (ntree == NULL) + return 0; + + for (node = ntree->nodes.first; node; node = node->next) { + if (node->type == TEX_NODE_CURVE_TIME) { + nodeUpdate(ntree, node); + return 1; + } + else if (node->type == NODE_GROUP) { + if (ntreeTexTagAnimated((bNodeTree *)node->id)) { + return 1; + } + } + } + + return 0; } -bNodeTreeExec *ntreeTexBeginExecTree_internal(bNodeExecContext *context, bNodeTree *ntree, bNodeInstanceKey parent_key) +bNodeTreeExec *ntreeTexBeginExecTree_internal(bNodeExecContext *context, + bNodeTree *ntree, + bNodeInstanceKey parent_key) { - bNodeTreeExec *exec; - bNode *node; + bNodeTreeExec *exec; + bNode *node; - /* common base initialization */ - exec = ntree_exec_begin(context, ntree, parent_key); + /* common base initialization */ + exec = ntree_exec_begin(context, ntree, parent_key); - /* allocate the thread stack listbase array */ - exec->threadstack = MEM_callocN(BLENDER_MAX_THREADS * sizeof(ListBase), "thread stack array"); + /* allocate the thread stack listbase array */ + exec->threadstack = MEM_callocN(BLENDER_MAX_THREADS * sizeof(ListBase), "thread stack array"); - for (node = exec->nodetree->nodes.first; node; node = node->next) - node->need_exec = 1; + for (node = exec->nodetree->nodes.first; node; node = node->next) + node->need_exec = 1; - return exec; + return exec; } bNodeTreeExec *ntreeTexBeginExecTree(bNodeTree *ntree) { - bNodeExecContext context; - bNodeTreeExec *exec; + bNodeExecContext context; + bNodeTreeExec *exec; - /* XXX hack: prevent exec data from being generated twice. - * this should be handled by the renderer! - */ - if (ntree->execdata) - return ntree->execdata; + /* XXX hack: prevent exec data from being generated twice. + * this should be handled by the renderer! + */ + if (ntree->execdata) + return ntree->execdata; - context.previews = ntree->previews; + context.previews = ntree->previews; - exec = ntreeTexBeginExecTree_internal(&context, ntree, NODE_INSTANCE_KEY_BASE); + exec = ntreeTexBeginExecTree_internal(&context, ntree, NODE_INSTANCE_KEY_BASE); - /* XXX this should not be necessary, but is still used for cmp/sha/tex nodes, - * which only store the ntree pointer. Should be fixed at some point! - */ - ntree->execdata = exec; + /* XXX this should not be necessary, but is still used for cmp/sha/tex nodes, + * which only store the ntree pointer. Should be fixed at some point! + */ + ntree->execdata = exec; - return exec; + return exec; } /* free texture delegates */ static void tex_free_delegates(bNodeTreeExec *exec) { - bNodeThreadStack *nts; - bNodeStack *ns; - int th, a; - - for (th = 0; th < BLENDER_MAX_THREADS; th++) - for (nts = exec->threadstack[th].first; nts; nts = nts->next) - for (ns = nts->stack, a = 0; a < exec->stacksize; a++, ns++) - if (ns->data && !ns->is_copy) - MEM_freeN(ns->data); + bNodeThreadStack *nts; + bNodeStack *ns; + int th, a; + + for (th = 0; th < BLENDER_MAX_THREADS; th++) + for (nts = exec->threadstack[th].first; nts; nts = nts->next) + for (ns = nts->stack, a = 0; a < exec->stacksize; a++, ns++) + if (ns->data && !ns->is_copy) + MEM_freeN(ns->data); } void ntreeTexEndExecTree_internal(bNodeTreeExec *exec) { - bNodeThreadStack *nts; - int a; + bNodeThreadStack *nts; + int a; - if (exec->threadstack) { - tex_free_delegates(exec); + if (exec->threadstack) { + tex_free_delegates(exec); - for (a = 0; a < BLENDER_MAX_THREADS; a++) { - for (nts = exec->threadstack[a].first; nts; nts = nts->next) - if (nts->stack) MEM_freeN(nts->stack); - BLI_freelistN(&exec->threadstack[a]); - } + for (a = 0; a < BLENDER_MAX_THREADS; a++) { + for (nts = exec->threadstack[a].first; nts; nts = nts->next) + if (nts->stack) + MEM_freeN(nts->stack); + BLI_freelistN(&exec->threadstack[a]); + } - MEM_freeN(exec->threadstack); - exec->threadstack = NULL; - } + MEM_freeN(exec->threadstack); + exec->threadstack = NULL; + } - ntree_exec_end(exec); + ntree_exec_end(exec); } void ntreeTexEndExecTree(bNodeTreeExec *exec) { - if (exec) { - /* exec may get freed, so assign ntree */ - bNodeTree *ntree = exec->nodetree; - ntreeTexEndExecTree_internal(exec); - - /* XXX clear nodetree backpointer to exec data, same problem as noted in ntreeBeginExecTree */ - ntree->execdata = NULL; - } + if (exec) { + /* exec may get freed, so assign ntree */ + bNodeTree *ntree = exec->nodetree; + ntreeTexEndExecTree_internal(exec); + + /* XXX clear nodetree backpointer to exec data, same problem as noted in ntreeBeginExecTree */ + ntree->execdata = NULL; + } } -int ntreeTexExecTree( - bNodeTree *nodes, - TexResult *texres, - float co[3], - float dxt[3], float dyt[3], - int osatex, - const short thread, - Tex *UNUSED(tex), - short which_output, - int cfra, - int preview, - MTex *mtex) +int ntreeTexExecTree(bNodeTree *nodes, + TexResult *texres, + float co[3], + float dxt[3], + float dyt[3], + int osatex, + const short thread, + Tex *UNUSED(tex), + short which_output, + int cfra, + int preview, + MTex *mtex) { - TexCallData data; - float *nor = texres->nor; - int retval = TEX_INT; - bNodeThreadStack *nts = NULL; - bNodeTreeExec *exec = nodes->execdata; - - data.co = co; - data.dxt = dxt; - data.dyt = dyt; - data.osatex = osatex; - data.target = texres; - data.do_preview = preview; - data.do_manage = true; - data.thread = thread; - data.which_output = which_output; - data.cfra = cfra; - data.mtex = mtex; - - /* ensure execdata is only initialized once */ - if (!exec) { - BLI_thread_lock(LOCK_NODES); - if (!nodes->execdata) - ntreeTexBeginExecTree(nodes); - BLI_thread_unlock(LOCK_NODES); - - exec = nodes->execdata; - } - - nts = ntreeGetThreadStack(exec, thread); - ntreeExecThreadNodes(exec, nts, &data, thread); - ntreeReleaseThreadStack(nts); - - if (texres->nor) retval |= TEX_NOR; - retval |= TEX_RGB; - /* confusing stuff; the texture output node sets this to NULL to indicate no normal socket was set - * however, the texture code checks this for other reasons (namely, a normal is required for material) */ - texres->nor = nor; - - return retval; + TexCallData data; + float *nor = texres->nor; + int retval = TEX_INT; + bNodeThreadStack *nts = NULL; + bNodeTreeExec *exec = nodes->execdata; + + data.co = co; + data.dxt = dxt; + data.dyt = dyt; + data.osatex = osatex; + data.target = texres; + data.do_preview = preview; + data.do_manage = true; + data.thread = thread; + data.which_output = which_output; + data.cfra = cfra; + data.mtex = mtex; + + /* ensure execdata is only initialized once */ + if (!exec) { + BLI_thread_lock(LOCK_NODES); + if (!nodes->execdata) + ntreeTexBeginExecTree(nodes); + BLI_thread_unlock(LOCK_NODES); + + exec = nodes->execdata; + } + + nts = ntreeGetThreadStack(exec, thread); + ntreeExecThreadNodes(exec, nts, &data, thread); + ntreeReleaseThreadStack(nts); + + if (texres->nor) + retval |= TEX_NOR; + retval |= TEX_RGB; + /* confusing stuff; the texture output node sets this to NULL to indicate no normal socket was set + * however, the texture code checks this for other reasons (namely, a normal is required for material) */ + texres->nor = nor; + + return retval; } diff --git a/source/blender/nodes/texture/node_texture_util.c b/source/blender/nodes/texture/node_texture_util.c index cc4ecbfb1d9..ba65a692835 100644 --- a/source/blender/nodes/texture/node_texture_util.c +++ b/source/blender/nodes/texture/node_texture_util.c @@ -21,7 +21,6 @@ * \ingroup nodes */ - /* * HOW TEXTURE NODES WORK * @@ -41,142 +40,147 @@ #include <assert.h> #include "node_texture_util.h" - bool tex_node_poll_default(bNodeType *UNUSED(ntype), bNodeTree *ntree) { - return STREQ(ntree->idname, "TextureNodeTree"); + return STREQ(ntree->idname, "TextureNodeTree"); } -void tex_node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag) +void tex_node_type_base( + struct bNodeType *ntype, int type, const char *name, short nclass, short flag) { - node_type_base(ntype, type, name, nclass, flag); + node_type_base(ntype, type, name, nclass, flag); - ntype->poll = tex_node_poll_default; - ntype->insert_link = node_insert_link_default; - ntype->update_internal_links = node_update_internal_links_default; + ntype->poll = tex_node_poll_default; + ntype->insert_link = node_insert_link_default; + ntype->update_internal_links = node_update_internal_links_default; } - static void tex_call_delegate(TexDelegate *dg, float *out, TexParams *params, short thread) { - if (dg->node->need_exec) { - dg->fn(out, params, dg->node, dg->in, thread); + if (dg->node->need_exec) { + dg->fn(out, params, dg->node, dg->in, thread); - if (dg->cdata->do_preview) - tex_do_preview(dg->preview, params->previewco, out, dg->cdata->do_manage); - } + if (dg->cdata->do_preview) + tex_do_preview(dg->preview, params->previewco, out, dg->cdata->do_manage); + } } static void tex_input(float *out, int sz, bNodeStack *in, TexParams *params, short thread) { - TexDelegate *dg = in->data; - if (dg) { - tex_call_delegate(dg, in->vec, params, thread); - - if (in->hasoutput && in->sockettype == SOCK_FLOAT) - in->vec[1] = in->vec[2] = in->vec[0]; - } - memcpy(out, in->vec, sz * sizeof(float)); + TexDelegate *dg = in->data; + if (dg) { + tex_call_delegate(dg, in->vec, params, thread); + + if (in->hasoutput && in->sockettype == SOCK_FLOAT) + in->vec[1] = in->vec[2] = in->vec[0]; + } + memcpy(out, in->vec, sz * sizeof(float)); } void tex_input_vec(float *out, bNodeStack *in, TexParams *params, short thread) { - tex_input(out, 3, in, params, thread); + tex_input(out, 3, in, params, thread); } void tex_input_rgba(float *out, bNodeStack *in, TexParams *params, short thread) { - tex_input(out, 4, in, params, thread); - - if (in->hasoutput && in->sockettype == SOCK_FLOAT) { - out[1] = out[2] = out[0]; - out[3] = 1; - } - - if (in->hasoutput && in->sockettype == SOCK_VECTOR) { - out[0] = out[0] * 0.5f + 0.5f; - out[1] = out[1] * 0.5f + 0.5f; - out[2] = out[2] * 0.5f + 0.5f; - out[3] = 1; - } + tex_input(out, 4, in, params, thread); + + if (in->hasoutput && in->sockettype == SOCK_FLOAT) { + out[1] = out[2] = out[0]; + out[3] = 1; + } + + if (in->hasoutput && in->sockettype == SOCK_VECTOR) { + out[0] = out[0] * 0.5f + 0.5f; + out[1] = out[1] * 0.5f + 0.5f; + out[2] = out[2] * 0.5f + 0.5f; + out[3] = 1; + } } float tex_input_value(bNodeStack *in, TexParams *params, short thread) { - float out[4]; - tex_input_vec(out, in, params, thread); - return out[0]; + float out[4]; + tex_input_vec(out, in, params, thread); + return out[0]; } void params_from_cdata(TexParams *out, TexCallData *in) { - out->co = in->co; - out->dxt = in->dxt; - out->dyt = in->dyt; - out->previewco = in->co; - out->osatex = in->osatex; - out->cfra = in->cfra; - out->mtex = in->mtex; + out->co = in->co; + out->dxt = in->dxt; + out->dyt = in->dyt; + out->previewco = in->co; + out->osatex = in->osatex; + out->cfra = in->cfra; + out->mtex = in->mtex; } -void tex_do_preview(bNodePreview *preview, const float coord[2], const float col[4], bool do_manage) +void tex_do_preview(bNodePreview *preview, + const float coord[2], + const float col[4], + bool do_manage) { - if (preview) { - int xs = ((coord[0] + 1.0f) * 0.5f) * preview->xsize; - int ys = ((coord[1] + 1.0f) * 0.5f) * preview->ysize; + if (preview) { + int xs = ((coord[0] + 1.0f) * 0.5f) * preview->xsize; + int ys = ((coord[1] + 1.0f) * 0.5f) * preview->ysize; - BKE_node_preview_set_pixel(preview, col, xs, ys, do_manage); - } + BKE_node_preview_set_pixel(preview, col, xs, ys, do_manage); + } } -void tex_output(bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack *out, TexFn texfn, TexCallData *cdata) +void tex_output(bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack *out, + TexFn texfn, + TexCallData *cdata) { - TexDelegate *dg; - - if (node->flag & NODE_MUTED) { - /* do not add a delegate if the node is muted */ - return; - } - else { - if (!out->data) - /* Freed in tex_end_exec (node.c) */ - dg = out->data = MEM_mallocN(sizeof(TexDelegate), "tex delegate"); - else - dg = out->data; - } - - - dg->cdata = cdata; - dg->fn = texfn; - dg->node = node; - dg->preview = execdata->preview; - memcpy(dg->in, in, MAX_SOCKET * sizeof(bNodeStack *)); - dg->type = out->sockettype; + TexDelegate *dg; + + if (node->flag & NODE_MUTED) { + /* do not add a delegate if the node is muted */ + return; + } + else { + if (!out->data) + /* Freed in tex_end_exec (node.c) */ + dg = out->data = MEM_mallocN(sizeof(TexDelegate), "tex delegate"); + else + dg = out->data; + } + + dg->cdata = cdata; + dg->fn = texfn; + dg->node = node; + dg->preview = execdata->preview; + memcpy(dg->in, in, MAX_SOCKET * sizeof(bNodeStack *)); + dg->type = out->sockettype; } void ntreeTexCheckCyclics(struct bNodeTree *ntree) { - bNode *node; - for (node = ntree->nodes.first; node; node = node->next) { - - if (node->type == TEX_NODE_TEXTURE && node->id) { - /* custom2 stops the node from rendering */ - if (node->custom1) { - node->custom2 = 1; - node->custom1 = 0; - } - else { - Tex *tex = (Tex *)node->id; - - node->custom2 = 0; - - node->custom1 = 1; - if (tex->use_nodes && tex->nodetree) { - ntreeTexCheckCyclics(tex->nodetree); - } - node->custom1 = 0; - } - } - - } + bNode *node; + for (node = ntree->nodes.first; node; node = node->next) { + + if (node->type == TEX_NODE_TEXTURE && node->id) { + /* custom2 stops the node from rendering */ + if (node->custom1) { + node->custom2 = 1; + node->custom1 = 0; + } + else { + Tex *tex = (Tex *)node->id; + + node->custom2 = 0; + + node->custom1 = 1; + if (tex->use_nodes && tex->nodetree) { + ntreeTexCheckCyclics(tex->nodetree); + } + node->custom1 = 0; + } + } + } } diff --git a/source/blender/nodes/texture/node_texture_util.h b/source/blender/nodes/texture/node_texture_util.h index 111b747fa9c..f638bdb0eec 100644 --- a/source/blender/nodes/texture/node_texture_util.h +++ b/source/blender/nodes/texture/node_texture_util.h @@ -21,7 +21,6 @@ * \ingroup nodes */ - #ifndef __NODE_TEXTURE_UTIL_H__ #define __NODE_TEXTURE_UTIL_H__ @@ -66,54 +65,62 @@ #include "RE_shader_ext.h" typedef struct TexCallData { - TexResult *target; - /* all float[3] */ - float *co; - float *dxt, *dyt; - - int osatex; - bool do_preview; - bool do_manage; - short thread; - short which_output; - int cfra; - - MTex *mtex; + TexResult *target; + /* all float[3] */ + float *co; + float *dxt, *dyt; + + int osatex; + bool do_preview; + bool do_manage; + short thread; + short which_output; + int cfra; + + MTex *mtex; } TexCallData; typedef struct TexParams { - float *co; - float *dxt, *dyt; - const float *previewco; - int cfra; - int osatex; - - /* optional. we don't really want these here, but image - * textures need to do mapping & color correction */ - MTex *mtex; + float *co; + float *dxt, *dyt; + const float *previewco; + int cfra; + int osatex; + + /* optional. we don't really want these here, but image + * textures need to do mapping & color correction */ + MTex *mtex; } TexParams; -typedef void(*TexFn) (float *out, TexParams *params, bNode *node, bNodeStack **in, short thread); +typedef void (*TexFn)(float *out, TexParams *params, bNode *node, bNodeStack **in, short thread); typedef struct TexDelegate { - TexCallData *cdata; - TexFn fn; - bNode *node; - bNodePreview *preview; - bNodeStack *in[MAX_SOCKET]; - int type; + TexCallData *cdata; + TexFn fn; + bNode *node; + bNodePreview *preview; + bNodeStack *in[MAX_SOCKET]; + int type; } TexDelegate; - bool tex_node_poll_default(struct bNodeType *ntype, struct bNodeTree *ntree); -void tex_node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass, short flag); +void tex_node_type_base( + struct bNodeType *ntype, int type, const char *name, short nclass, short flag); void tex_input_rgba(float *out, bNodeStack *in, TexParams *params, short thread); void tex_input_vec(float *out, bNodeStack *in, TexParams *params, short thread); float tex_input_value(bNodeStack *in, TexParams *params, short thread); -void tex_output(bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack *out, TexFn texfn, TexCallData *data); -void tex_do_preview(bNodePreview *preview, const float coord[2], const float col[4], bool do_manage); +void tex_output(bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack *out, + TexFn texfn, + TexCallData *data); +void tex_do_preview(bNodePreview *preview, + const float coord[2], + const float col[4], + bool do_manage); void params_from_cdata(TexParams *out, TexCallData *in); diff --git a/source/blender/nodes/texture/nodes/node_texture_at.c b/source/blender/nodes/texture/nodes/node_texture_at.c index 82e545cfd8e..f645b04a161 100644 --- a/source/blender/nodes/texture/nodes/node_texture_at.c +++ b/source/blender/nodes/texture/nodes/node_texture_at.c @@ -21,43 +21,47 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Texture"), 0.0f, 0.0f, 0.0f, 1.0f }, - { SOCK_VECTOR, 1, N_("Coordinates"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Texture"), 0.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_VECTOR, 1, N_("Coordinates"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Texture") }, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Texture")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - TexParams np = *p; - float new_co[3]; - np.co = new_co; + TexParams np = *p; + float new_co[3]; + np.co = new_co; - tex_input_vec(new_co, in[1], p, thread); - tex_input_rgba(out, in[0], &np, thread); + tex_input_vec(new_co, in[1], p, thread); + tex_input_rgba(out, in[0], &np, thread); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_at(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_AT, "At", NODE_CLASS_DISTORT, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_size(&ntype, 140, 100, 320); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_AT, "At", NODE_CLASS_DISTORT, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_size(&ntype, 140, 100, 320); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_bricks.c b/source/blender/nodes/texture/nodes/node_texture_bricks.c index 0f034de99ec..c500fa31d34 100644 --- a/source/blender/nodes/texture/nodes/node_texture_bricks.c +++ b/source/blender/nodes/texture/nodes/node_texture_bricks.c @@ -21,107 +21,109 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" #include <math.h> static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Bricks 1"), 0.596f, 0.282f, 0.0f, 1.0f }, - { SOCK_RGBA, 1, N_("Bricks 2"), 0.632f, 0.504f, 0.05f, 1.0f }, - { SOCK_RGBA, 1, N_("Mortar"), 0.0f, 0.0f, 0.0f, 1.0f }, - { SOCK_FLOAT, 1, N_("Thickness"), 0.02f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Bias"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("Brick Width"), 0.5f, 0.0f, 0.0f, 0.0f, 0.001f, 99.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Row Height"), 0.25f, 0.0f, 0.0f, 0.0f, 0.001f, 99.0f, PROP_UNSIGNED }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Bricks 1"), 0.596f, 0.282f, 0.0f, 1.0f}, + {SOCK_RGBA, 1, N_("Bricks 2"), 0.632f, 0.504f, 0.05f, 1.0f}, + {SOCK_RGBA, 1, N_("Mortar"), 0.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_FLOAT, 1, N_("Thickness"), 0.02f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Bias"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("Brick Width"), 0.5f, 0.0f, 0.0f, 0.0f, 0.001f, 99.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Row Height"), 0.25f, 0.0f, 0.0f, 0.0f, 0.001f, 99.0f, PROP_UNSIGNED}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, ""}, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void init(bNodeTree *UNUSED(ntree), bNode *node) { - node->custom3 = 0.5; /* offset */ - node->custom4 = 1.0; /* squash */ + node->custom3 = 0.5; /* offset */ + node->custom4 = 1.0; /* squash */ } static float noise(int n) /* fast integer noise */ { - int nn; - n = (n >> 13) ^ n; - nn = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff; - return 0.5f * ((float)nn / 1073741824.0f); + int nn; + n = (n >> 13) ^ n; + nn = (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff; + return 0.5f * ((float)nn / 1073741824.0f); } static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - const float *co = p->co; - - float x = co[0]; - float y = co[1]; - - int bricknum, rownum; - float offset = 0; - float ins_x, ins_y; - float tint; - - float bricks1[4]; - float bricks2[4]; - float mortar[4]; - - float mortar_thickness = tex_input_value(in[3], p, thread); - float bias = tex_input_value(in[4], p, thread); - float brick_width = tex_input_value(in[5], p, thread); - float row_height = tex_input_value(in[6], p, thread); - - tex_input_rgba(bricks1, in[0], p, thread); - tex_input_rgba(bricks2, in[1], p, thread); - tex_input_rgba(mortar, in[2], p, thread); - - rownum = (int)floor(y / row_height); - - if (node->custom1 && node->custom2) { - brick_width *= ((int)(rownum) % node->custom2) ? 1.0f : node->custom4; /* squash */ - offset = ((int)(rownum) % node->custom1) ? 0 : (brick_width * node->custom3); /* offset */ - } - - bricknum = (int)floor((x + offset) / brick_width); - - ins_x = (x + offset) - brick_width * bricknum; - ins_y = y - row_height * rownum; - - tint = noise((rownum << 16) + (bricknum & 0xFFFF)) + bias; - CLAMP(tint, 0.0f, 1.0f); - - if (ins_x < mortar_thickness || ins_y < mortar_thickness || - ins_x > (brick_width - mortar_thickness) || - ins_y > (row_height - mortar_thickness)) - { - copy_v4_v4(out, mortar); - } - else { - copy_v4_v4(out, bricks1); - ramp_blend(MA_RAMP_BLEND, out, tint, bricks2); - } + const float *co = p->co; + + float x = co[0]; + float y = co[1]; + + int bricknum, rownum; + float offset = 0; + float ins_x, ins_y; + float tint; + + float bricks1[4]; + float bricks2[4]; + float mortar[4]; + + float mortar_thickness = tex_input_value(in[3], p, thread); + float bias = tex_input_value(in[4], p, thread); + float brick_width = tex_input_value(in[5], p, thread); + float row_height = tex_input_value(in[6], p, thread); + + tex_input_rgba(bricks1, in[0], p, thread); + tex_input_rgba(bricks2, in[1], p, thread); + tex_input_rgba(mortar, in[2], p, thread); + + rownum = (int)floor(y / row_height); + + if (node->custom1 && node->custom2) { + brick_width *= ((int)(rownum) % node->custom2) ? 1.0f : node->custom4; /* squash */ + offset = ((int)(rownum) % node->custom1) ? 0 : (brick_width * node->custom3); /* offset */ + } + + bricknum = (int)floor((x + offset) / brick_width); + + ins_x = (x + offset) - brick_width * bricknum; + ins_y = y - row_height * rownum; + + tint = noise((rownum << 16) + (bricknum & 0xFFFF)) + bias; + CLAMP(tint, 0.0f, 1.0f); + + if (ins_x < mortar_thickness || ins_y < mortar_thickness || + ins_x > (brick_width - mortar_thickness) || ins_y > (row_height - mortar_thickness)) { + copy_v4_v4(out, mortar); + } + else { + copy_v4_v4(out, bricks1); + ramp_blend(MA_RAMP_BLEND, out, tint, bricks2); + } } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_bricks(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_BRICKS, "Bricks", NODE_CLASS_PATTERN, NODE_PREVIEW); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); - node_type_init(&ntype, init); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_BRICKS, "Bricks", NODE_CLASS_PATTERN, NODE_PREVIEW); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); + node_type_init(&ntype, init); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_checker.c b/source/blender/nodes/texture/nodes/node_texture_checker.c index 8cc40b7d5b0..33fc1a2c1f3 100644 --- a/source/blender/nodes/texture/nodes/node_texture_checker.c +++ b/source/blender/nodes/texture/nodes/node_texture_checker.c @@ -21,54 +21,58 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" #include <math.h> static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color1"), 1.0f, 0.0f, 0.0f, 1.0f }, - { SOCK_RGBA, 1, N_("Color2"), 1.0f, 1.0f, 1.0f, 1.0f }, - { SOCK_FLOAT, 1, N_("Size"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 100.0f, PROP_UNSIGNED }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color1"), 1.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_RGBA, 1, N_("Color2"), 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_FLOAT, 1, N_("Size"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 100.0f, PROP_UNSIGNED}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color") }, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float x = p->co[0]; - float y = p->co[1]; - float z = p->co[2]; - float sz = tex_input_value(in[2], p, thread); + float x = p->co[0]; + float y = p->co[1]; + float z = p->co[2]; + float sz = tex_input_value(in[2], p, thread); - /* 0.00001 because of unit sized stuff */ - int xi = (int)fabs(floor(0.00001f + x / sz)); - int yi = (int)fabs(floor(0.00001f + y / sz)); - int zi = (int)fabs(floor(0.00001f + z / sz)); + /* 0.00001 because of unit sized stuff */ + int xi = (int)fabs(floor(0.00001f + x / sz)); + int yi = (int)fabs(floor(0.00001f + y / sz)); + int zi = (int)fabs(floor(0.00001f + z / sz)); - if ( (xi % 2 == yi % 2) == (zi % 2) ) { - tex_input_rgba(out, in[0], p, thread); - } - else { - tex_input_rgba(out, in[1], p, thread); - } + if ((xi % 2 == yi % 2) == (zi % 2)) { + tex_input_rgba(out, in[0], p, thread); + } + else { + tex_input_rgba(out, in[1], p, thread); + } } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_checker(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_CHECKER, "Checker", NODE_CLASS_PATTERN, NODE_PREVIEW); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_CHECKER, "Checker", NODE_CLASS_PATTERN, NODE_PREVIEW); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_common.c b/source/blender/nodes/texture/nodes/node_texture_common.c index 3efc01d25d6..9f76c464c12 100644 --- a/source/blender/nodes/texture/nodes/node_texture_common.c +++ b/source/blender/nodes/texture/nodes/node_texture_common.c @@ -22,7 +22,6 @@ * \ingroup texnodes */ - #include "DNA_node_types.h" #include "BLI_utildefines.h" @@ -38,37 +37,37 @@ static void copy_stack(bNodeStack *to, bNodeStack *from) { - if (to != from) { - copy_v4_v4(to->vec, from->vec); - to->data = from->data; - to->datatype = from->datatype; - - /* tag as copy to prevent freeing */ - to->is_copy = 1; - } + if (to != from) { + copy_v4_v4(to->vec, from->vec); + to->data = from->data; + to->datatype = from->datatype; + + /* tag as copy to prevent freeing */ + to->is_copy = 1; + } } /**** GROUP ****/ static void *group_initexec(bNodeExecContext *context, bNode *node, bNodeInstanceKey key) { - bNodeTree *ngroup = (bNodeTree *)node->id; - void *exec; + bNodeTree *ngroup = (bNodeTree *)node->id; + void *exec; - if (!ngroup) - return NULL; + if (!ngroup) + return NULL; - /* initialize the internal node tree execution */ - exec = ntreeTexBeginExecTree_internal(context, ngroup, key); + /* initialize the internal node tree execution */ + exec = ntreeTexBeginExecTree_internal(context, ngroup, key); - return exec; + return exec; } static void group_freeexec(void *nodedata) { - bNodeTreeExec *gexec = (bNodeTreeExec *)nodedata; + bNodeTreeExec *gexec = (bNodeTreeExec *)nodedata; - ntreeTexEndExecTree_internal(gexec); + ntreeTexEndExecTree_internal(gexec); } /* Copy inputs to the internal stack. @@ -76,99 +75,104 @@ static void group_freeexec(void *nodedata) */ static void group_copy_inputs(bNode *gnode, bNodeStack **in, bNodeStack *gstack) { - bNodeTree *ngroup = (bNodeTree *)gnode->id; - bNode *node; - bNodeSocket *sock; - bNodeStack *ns; - int a; - - for (node = ngroup->nodes.first; node; node = node->next) { - if (node->type == NODE_GROUP_INPUT) { - for (sock = node->outputs.first, a = 0; sock; sock = sock->next, ++a) { - if (in[a]) { /* shouldn't need to check this [#36694] */ - ns = node_get_socket_stack(gstack, sock); - if (ns) { - copy_stack(ns, in[a]); - } - } - } - } - } + bNodeTree *ngroup = (bNodeTree *)gnode->id; + bNode *node; + bNodeSocket *sock; + bNodeStack *ns; + int a; + + for (node = ngroup->nodes.first; node; node = node->next) { + if (node->type == NODE_GROUP_INPUT) { + for (sock = node->outputs.first, a = 0; sock; sock = sock->next, ++a) { + if (in[a]) { /* shouldn't need to check this [#36694] */ + ns = node_get_socket_stack(gstack, sock); + if (ns) { + copy_stack(ns, in[a]); + } + } + } + } + } } /* Copy internal results to the external outputs. */ static void group_copy_outputs(bNode *gnode, bNodeStack **out, bNodeStack *gstack) { - bNodeTree *ngroup = (bNodeTree *)gnode->id; - bNode *node; - bNodeSocket *sock; - bNodeStack *ns; - int a; - - for (node = ngroup->nodes.first; node; node = node->next) { - if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) { - for (sock = node->inputs.first, a = 0; sock; sock = sock->next, ++a) { - if (out[a]) { /* shouldn't need to check this [#36694] */ - ns = node_get_socket_stack(gstack, sock); - if (ns) { - copy_stack(out[a], ns); - } - } - } - break; /* only one active output node */ - } - } + bNodeTree *ngroup = (bNodeTree *)gnode->id; + bNode *node; + bNodeSocket *sock; + bNodeStack *ns; + int a; + + for (node = ngroup->nodes.first; node; node = node->next) { + if (node->type == NODE_GROUP_OUTPUT && (node->flag & NODE_DO_OUTPUT)) { + for (sock = node->inputs.first, a = 0; sock; sock = sock->next, ++a) { + if (out[a]) { /* shouldn't need to check this [#36694] */ + ns = node_get_socket_stack(gstack, sock); + if (ns) { + copy_stack(out[a], ns); + } + } + } + break; /* only one active output node */ + } + } } -static void group_execute(void *data, int thread, struct bNode *node, bNodeExecData *execdata, struct bNodeStack **in, struct bNodeStack **out) +static void group_execute(void *data, + int thread, + struct bNode *node, + bNodeExecData *execdata, + struct bNodeStack **in, + struct bNodeStack **out) { - bNodeTreeExec *exec = execdata->data; - bNodeThreadStack *nts; + bNodeTreeExec *exec = execdata->data; + bNodeThreadStack *nts; - if (!exec) - return; + if (!exec) + return; - /* XXX same behavior as trunk: all nodes inside group are executed. - * it's stupid, but just makes it work. compo redesign will do this better. - */ - { - bNode *inode; - for (inode = exec->nodetree->nodes.first; inode; inode = inode->next) - inode->need_exec = 1; - } + /* XXX same behavior as trunk: all nodes inside group are executed. + * it's stupid, but just makes it work. compo redesign will do this better. + */ + { + bNode *inode; + for (inode = exec->nodetree->nodes.first; inode; inode = inode->next) + inode->need_exec = 1; + } - nts = ntreeGetThreadStack(exec, thread); + nts = ntreeGetThreadStack(exec, thread); - group_copy_inputs(node, in, nts->stack); - ntreeExecThreadNodes(exec, nts, data, thread); - group_copy_outputs(node, out, nts->stack); + group_copy_inputs(node, in, nts->stack); + ntreeExecThreadNodes(exec, nts, data, thread); + group_copy_outputs(node, out, nts->stack); - ntreeReleaseThreadStack(nts); + ntreeReleaseThreadStack(nts); } void register_node_type_tex_group(void) { - static bNodeType ntype; - - /* NB: cannot use sh_node_type_base for node group, because it would map the node type - * to the shared NODE_GROUP integer type id. - */ - node_type_base_custom(&ntype, "TextureNodeGroup", "Group", NODE_CLASS_GROUP, NODE_CONST_OUTPUT); - ntype.type = NODE_GROUP; - ntype.poll = tex_node_poll_default; - ntype.poll_instance = node_group_poll_instance; - ntype.insert_link = node_insert_link_default; - ntype.update_internal_links = node_update_internal_links_default; - ntype.ext.srna = RNA_struct_find("TextureNodeGroup"); - BLI_assert(ntype.ext.srna != NULL); - RNA_struct_blender_type_set(ntype.ext.srna, &ntype); - - node_type_socket_templates(&ntype, NULL, NULL); - node_type_size(&ntype, 140, 60, 400); - node_type_label(&ntype, node_group_label); - node_type_update(&ntype, NULL, node_group_verify); - node_type_exec(&ntype, group_initexec, group_freeexec, group_execute); - - nodeRegisterType(&ntype); + static bNodeType ntype; + + /* NB: cannot use sh_node_type_base for node group, because it would map the node type + * to the shared NODE_GROUP integer type id. + */ + node_type_base_custom(&ntype, "TextureNodeGroup", "Group", NODE_CLASS_GROUP, NODE_CONST_OUTPUT); + ntype.type = NODE_GROUP; + ntype.poll = tex_node_poll_default; + ntype.poll_instance = node_group_poll_instance; + ntype.insert_link = node_insert_link_default; + ntype.update_internal_links = node_update_internal_links_default; + ntype.ext.srna = RNA_struct_find("TextureNodeGroup"); + BLI_assert(ntype.ext.srna != NULL); + RNA_struct_blender_type_set(ntype.ext.srna, &ntype); + + node_type_socket_templates(&ntype, NULL, NULL); + node_type_size(&ntype, 140, 60, 400); + node_type_label(&ntype, node_group_label); + node_type_update(&ntype, NULL, node_group_verify); + node_type_exec(&ntype, group_initexec, group_freeexec, group_execute); + + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_compose.c b/source/blender/nodes/texture/nodes/node_texture_compose.c index 767e4aee03e..ae266451671 100644 --- a/source/blender/nodes/texture/nodes/node_texture_compose.c +++ b/source/blender/nodes/texture/nodes/node_texture_compose.c @@ -21,41 +21,45 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate inputs[] = { - { SOCK_FLOAT, 1, N_("Red"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Green"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Blue"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Alpha"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED }, - { -1, 0, "" }, + {SOCK_FLOAT, 1, N_("Red"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Green"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Blue"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Alpha"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_UNSIGNED}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color") }, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - int i; - for (i = 0; i < 4; i++) - out[i] = tex_input_value(in[i], p, thread); + int i; + for (i = 0; i < 4; i++) + out[i] = tex_input_value(in[i], p, thread); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_compose(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_COMPOSE, "Combine RGBA", NODE_CLASS_OP_COLOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_COMPOSE, "Combine RGBA", NODE_CLASS_OP_COLOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_coord.c b/source/blender/nodes/texture/nodes/node_texture_coord.c index 8859e27cd6c..30911eae1a3 100644 --- a/source/blender/nodes/texture/nodes/node_texture_coord.c +++ b/source/blender/nodes/texture/nodes/node_texture_coord.c @@ -21,33 +21,38 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate outputs[] = { - { SOCK_VECTOR, 0, N_("Coordinates") }, - { -1, 0, "" }, + {SOCK_VECTOR, 0, N_("Coordinates")}, + {-1, 0, ""}, }; -static void vectorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **UNUSED(in), short UNUSED(thread)) +static void vectorfn( + float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **UNUSED(in), short UNUSED(thread)) { - copy_v3_v3(out, p->co); + copy_v3_v3(out, p->co); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &vectorfn, data); + tex_output(node, execdata, in, out[0], &vectorfn, data); } void register_node_type_tex_coord(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_COORD, "Coordinates", NODE_CLASS_INPUT, 0); - node_type_socket_templates(&ntype, NULL, outputs); - node_type_storage(&ntype, "", NULL, NULL); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_COORD, "Coordinates", NODE_CLASS_INPUT, 0); + node_type_socket_templates(&ntype, NULL, outputs); + node_type_storage(&ntype, "", NULL, NULL); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_curves.c b/source/blender/nodes/texture/nodes/node_texture_curves.c index d0d387f3fa6..a57e2d8f35f 100644 --- a/source/blender/nodes/texture/nodes/node_texture_curves.c +++ b/source/blender/nodes/texture/nodes/node_texture_curves.c @@ -21,98 +21,104 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" /* **************** CURVE Time ******************** */ /* custom1 = sfra, custom2 = efra */ -static bNodeSocketTemplate time_outputs[] = { - { SOCK_FLOAT, 0, N_("Value") }, - { -1, 0, "" } -}; +static bNodeSocketTemplate time_outputs[] = {{SOCK_FLOAT, 0, N_("Value")}, {-1, 0, ""}}; -static void time_colorfn(float *out, TexParams *p, bNode *node, bNodeStack **UNUSED(in), short UNUSED(thread)) +static void time_colorfn( + float *out, TexParams *p, bNode *node, bNodeStack **UNUSED(in), short UNUSED(thread)) { - /* stack order output: fac */ - float fac = 0.0f; + /* stack order output: fac */ + float fac = 0.0f; - if (node->custom1 < node->custom2) - fac = (p->cfra - node->custom1) / (float)(node->custom2 - node->custom1); + if (node->custom1 < node->custom2) + fac = (p->cfra - node->custom1) / (float)(node->custom2 - node->custom1); - curvemapping_initialize(node->storage); - fac = curvemapping_evaluateF(node->storage, 0, fac); - out[0] = CLAMPIS(fac, 0.0f, 1.0f); + curvemapping_initialize(node->storage); + fac = curvemapping_evaluateF(node->storage, 0, fac); + out[0] = CLAMPIS(fac, 0.0f, 1.0f); } -static void time_exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void time_exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &time_colorfn, data); + tex_output(node, execdata, in, out[0], &time_colorfn, data); } - static void time_init(bNodeTree *UNUSED(ntree), bNode *node) { - node->custom1 = 1; - node->custom2 = 250; - node->storage = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); + node->custom1 = 1; + node->custom2 = 250; + node->storage = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); } void register_node_type_tex_curve_time(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_CURVE_TIME, "Time", NODE_CLASS_INPUT, 0); - node_type_socket_templates(&ntype, NULL, time_outputs); - node_type_size_preset(&ntype, NODE_SIZE_LARGE); - node_type_init(&ntype, time_init); - node_type_storage(&ntype, "CurveMapping", node_free_curves, node_copy_curves); - node_type_exec(&ntype, node_initexec_curves, NULL, time_exec); + tex_node_type_base(&ntype, TEX_NODE_CURVE_TIME, "Time", NODE_CLASS_INPUT, 0); + node_type_socket_templates(&ntype, NULL, time_outputs); + node_type_size_preset(&ntype, NODE_SIZE_LARGE); + node_type_init(&ntype, time_init); + node_type_storage(&ntype, "CurveMapping", node_free_curves, node_copy_curves); + node_type_exec(&ntype, node_initexec_curves, NULL, time_exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } /* **************** CURVE RGB ******************** */ static bNodeSocketTemplate rgb_inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate rgb_outputs[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, ""}, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void rgb_colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - float cin[4]; - tex_input_rgba(cin, in[0], p, thread); + float cin[4]; + tex_input_rgba(cin, in[0], p, thread); - curvemapping_evaluateRGBF(node->storage, out, cin); - out[3] = cin[3]; + curvemapping_evaluateRGBF(node->storage, out, cin); + out[3] = cin[3]; } -static void rgb_exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void rgb_exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &rgb_colorfn, data); + tex_output(node, execdata, in, out[0], &rgb_colorfn, data); } static void rgb_init(bNodeTree *UNUSED(ntree), bNode *node) { - node->storage = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f); + node->storage = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f); } void register_node_type_tex_curve_rgb(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_CURVE_RGB, "RGB Curves", NODE_CLASS_OP_COLOR, 0); - node_type_socket_templates(&ntype, rgb_inputs, rgb_outputs); - node_type_size_preset(&ntype, NODE_SIZE_LARGE); - node_type_init(&ntype, rgb_init); - node_type_storage(&ntype, "CurveMapping", node_free_curves, node_copy_curves); - node_type_exec(&ntype, node_initexec_curves, NULL, rgb_exec); + tex_node_type_base(&ntype, TEX_NODE_CURVE_RGB, "RGB Curves", NODE_CLASS_OP_COLOR, 0); + node_type_socket_templates(&ntype, rgb_inputs, rgb_outputs); + node_type_size_preset(&ntype, NODE_SIZE_LARGE); + node_type_init(&ntype, rgb_init); + node_type_storage(&ntype, "CurveMapping", node_free_curves, node_copy_curves); + node_type_exec(&ntype, node_initexec_curves, NULL, rgb_exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_decompose.c b/source/blender/nodes/texture/nodes/node_texture_decompose.c index e531eb6c816..999b2c30448 100644 --- a/source/blender/nodes/texture/nodes/node_texture_decompose.c +++ b/source/blender/nodes/texture/nodes/node_texture_decompose.c @@ -21,62 +21,66 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" #include <math.h> static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_FLOAT, 0, N_("Red") }, - { SOCK_FLOAT, 0, N_("Green") }, - { SOCK_FLOAT, 0, N_("Blue") }, - { SOCK_FLOAT, 0, N_("Alpha") }, - { -1, 0, "" }, + {SOCK_FLOAT, 0, N_("Red")}, + {SOCK_FLOAT, 0, N_("Green")}, + {SOCK_FLOAT, 0, N_("Blue")}, + {SOCK_FLOAT, 0, N_("Alpha")}, + {-1, 0, ""}, }; static void valuefn_r(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - tex_input_rgba(out, in[0], p, thread); - *out = out[0]; + tex_input_rgba(out, in[0], p, thread); + *out = out[0]; } static void valuefn_g(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - tex_input_rgba(out, in[0], p, thread); - *out = out[1]; + tex_input_rgba(out, in[0], p, thread); + *out = out[1]; } static void valuefn_b(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - tex_input_rgba(out, in[0], p, thread); - *out = out[2]; + tex_input_rgba(out, in[0], p, thread); + *out = out[2]; } static void valuefn_a(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - tex_input_rgba(out, in[0], p, thread); - *out = out[3]; + tex_input_rgba(out, in[0], p, thread); + *out = out[3]; } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &valuefn_r, data); - tex_output(node, execdata, in, out[1], &valuefn_g, data); - tex_output(node, execdata, in, out[2], &valuefn_b, data); - tex_output(node, execdata, in, out[3], &valuefn_a, data); + tex_output(node, execdata, in, out[0], &valuefn_r, data); + tex_output(node, execdata, in, out[1], &valuefn_g, data); + tex_output(node, execdata, in, out[2], &valuefn_b, data); + tex_output(node, execdata, in, out[3], &valuefn_a, data); } void register_node_type_tex_decompose(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_DECOMPOSE, "Separate RGBA", NODE_CLASS_OP_COLOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_DECOMPOSE, "Separate RGBA", NODE_CLASS_OP_COLOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_distance.c b/source/blender/nodes/texture/nodes/node_texture_distance.c index fed8fe6b866..e7df8b3073a 100644 --- a/source/blender/nodes/texture/nodes/node_texture_distance.c +++ b/source/blender/nodes/texture/nodes/node_texture_distance.c @@ -21,46 +21,50 @@ * \ingroup texnodes */ - #include <math.h> #include "BLI_math.h" #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate inputs[] = { - { SOCK_VECTOR, 1, N_("Coordinate 1"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE }, - { SOCK_VECTOR, 1, N_("Coordinate 2"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE }, - { -1, 0, "" }, + {SOCK_VECTOR, 1, N_("Coordinate 1"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE}, + {SOCK_VECTOR, 1, N_("Coordinate 2"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_FLOAT, 0, N_("Value") }, - { -1, 0, "" }, + {SOCK_FLOAT, 0, N_("Value")}, + {-1, 0, ""}, }; static void valuefn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float co1[3], co2[3]; + float co1[3], co2[3]; - tex_input_vec(co1, in[0], p, thread); - tex_input_vec(co2, in[1], p, thread); + tex_input_vec(co1, in[0], p, thread); + tex_input_vec(co2, in[1], p, thread); - *out = len_v3v3(co2, co1); + *out = len_v3v3(co2, co1); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &valuefn, data); + tex_output(node, execdata, in, out[0], &valuefn, data); } void register_node_type_tex_distance(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_DISTANCE, "Distance", NODE_CLASS_CONVERTOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_storage(&ntype, "", NULL, NULL); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_DISTANCE, "Distance", NODE_CLASS_CONVERTOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_storage(&ntype, "", NULL, NULL); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_hueSatVal.c b/source/blender/nodes/texture/nodes/node_texture_hueSatVal.c index 8e4959bdf06..c4105083945 100644 --- a/source/blender/nodes/texture/nodes/node_texture_hueSatVal.c +++ b/source/blender/nodes/texture/nodes/node_texture_hueSatVal.c @@ -21,77 +21,90 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" - static bNodeSocketTemplate inputs[] = { - { SOCK_FLOAT, 1, N_("Hue"), 0.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.5f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("Saturation"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("Value"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("Factor"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE }, - { SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f }, - { -1, 0, "" }, + {SOCK_FLOAT, 1, N_("Hue"), 0.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.5f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("Saturation"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("Value"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("Factor"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE}, + {SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color") }, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; -static void do_hue_sat_fac(bNode *UNUSED(node), float *out, float hue, float sat, float val, float *in, float fac) +static void do_hue_sat_fac( + bNode *UNUSED(node), float *out, float hue, float sat, float val, float *in, float fac) { - if (fac != 0 && (hue != 0.5f || sat != 1 || val != 1)) { - float col[3], hsv[3], mfac = 1.0f - fac; - - rgb_to_hsv(in[0], in[1], in[2], hsv, hsv + 1, hsv + 2); - hsv[0] += (hue - 0.5f); - if (hsv[0] > 1.0f) hsv[0] -= 1.0f; else if (hsv[0] < 0.0f) hsv[0] += 1.0f; - hsv[1] *= sat; - if (hsv[1] > 1.0f) hsv[1] = 1.0f; else if (hsv[1] < 0.0f) hsv[1] = 0.0f; - hsv[2] *= val; - if (hsv[2] > 1.0f) hsv[2] = 1.0f; else if (hsv[2] < 0.0f) hsv[2] = 0.0f; - hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2); - - out[0] = mfac * in[0] + fac * col[0]; - out[1] = mfac * in[1] + fac * col[1]; - out[2] = mfac * in[2] + fac * col[2]; - } - else { - copy_v4_v4(out, in); - } + if (fac != 0 && (hue != 0.5f || sat != 1 || val != 1)) { + float col[3], hsv[3], mfac = 1.0f - fac; + + rgb_to_hsv(in[0], in[1], in[2], hsv, hsv + 1, hsv + 2); + hsv[0] += (hue - 0.5f); + if (hsv[0] > 1.0f) + hsv[0] -= 1.0f; + else if (hsv[0] < 0.0f) + hsv[0] += 1.0f; + hsv[1] *= sat; + if (hsv[1] > 1.0f) + hsv[1] = 1.0f; + else if (hsv[1] < 0.0f) + hsv[1] = 0.0f; + hsv[2] *= val; + if (hsv[2] > 1.0f) + hsv[2] = 1.0f; + else if (hsv[2] < 0.0f) + hsv[2] = 0.0f; + hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col + 1, col + 2); + + out[0] = mfac * in[0] + fac * col[0]; + out[1] = mfac * in[1] + fac * col[1]; + out[2] = mfac * in[2] + fac * col[2]; + } + else { + copy_v4_v4(out, in); + } } static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - float hue = tex_input_value(in[0], p, thread); - float sat = tex_input_value(in[1], p, thread); - float val = tex_input_value(in[2], p, thread); - float fac = tex_input_value(in[3], p, thread); + float hue = tex_input_value(in[0], p, thread); + float sat = tex_input_value(in[1], p, thread); + float val = tex_input_value(in[2], p, thread); + float fac = tex_input_value(in[3], p, thread); - float col[4]; - tex_input_rgba(col, in[4], p, thread); + float col[4]; + tex_input_rgba(col, in[4], p, thread); - hue += 0.5f; /* [-0.5, 0.5] -> [0, 1] */ + hue += 0.5f; /* [-0.5, 0.5] -> [0, 1] */ - do_hue_sat_fac(node, out, hue, sat, val, col, fac); + do_hue_sat_fac(node, out, hue, sat, val, col, fac); - out[3] = col[3]; + out[3] = col[3]; } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_hue_sat(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_HUE_SAT, "Hue Saturation Value", NODE_CLASS_OP_COLOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_HUE_SAT, "Hue Saturation Value", NODE_CLASS_OP_COLOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_image.c b/source/blender/nodes/texture/nodes/node_texture_image.c index 1975a9df306..5c7b7a56d3a 100644 --- a/source/blender/nodes/texture/nodes/node_texture_image.c +++ b/source/blender/nodes/texture/nodes/node_texture_image.c @@ -21,84 +21,94 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Image")}, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Image")}, + {-1, 0, ""}, }; -static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **UNUSED(in), short UNUSED(thread)) +static void colorfn( + float *out, TexParams *p, bNode *node, bNodeStack **UNUSED(in), short UNUSED(thread)) { - float x = p->co[0]; - float y = p->co[1]; - Image *ima = (Image *)node->id; - ImageUser *iuser = (ImageUser *)node->storage; - - if (ima) { - ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL); - if (ibuf) { - float xsize, ysize; - float xoff, yoff; - int px, py; - - const float *result; - - xsize = ibuf->x / 2; - ysize = ibuf->y / 2; - xoff = yoff = -1; - - px = (int)( (x - xoff) * xsize); - py = (int)( (y - yoff) * ysize); - - if ( (!xsize) || (!ysize) ) return; - - if (!ibuf->rect_float) { - BLI_thread_lock(LOCK_IMAGE); - if (!ibuf->rect_float) - IMB_float_from_rect(ibuf); - BLI_thread_unlock(LOCK_IMAGE); - } - - while (px < 0) px += ibuf->x; - while (py < 0) py += ibuf->y; - while (px >= ibuf->x) px -= ibuf->x; - while (py >= ibuf->y) py -= ibuf->y; - - result = ibuf->rect_float + py * ibuf->x * 4 + px * 4; - copy_v4_v4(out, result); - - BKE_image_release_ibuf(ima, ibuf, NULL); - } - } + float x = p->co[0]; + float y = p->co[1]; + Image *ima = (Image *)node->id; + ImageUser *iuser = (ImageUser *)node->storage; + + if (ima) { + ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL); + if (ibuf) { + float xsize, ysize; + float xoff, yoff; + int px, py; + + const float *result; + + xsize = ibuf->x / 2; + ysize = ibuf->y / 2; + xoff = yoff = -1; + + px = (int)((x - xoff) * xsize); + py = (int)((y - yoff) * ysize); + + if ((!xsize) || (!ysize)) + return; + + if (!ibuf->rect_float) { + BLI_thread_lock(LOCK_IMAGE); + if (!ibuf->rect_float) + IMB_float_from_rect(ibuf); + BLI_thread_unlock(LOCK_IMAGE); + } + + while (px < 0) + px += ibuf->x; + while (py < 0) + py += ibuf->y; + while (px >= ibuf->x) + px -= ibuf->x; + while (py >= ibuf->y) + py -= ibuf->y; + + result = ibuf->rect_float + py * ibuf->x * 4 + px * 4; + copy_v4_v4(out, result); + + BKE_image_release_ibuf(ima, ibuf, NULL); + } + } } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } static void init(bNodeTree *UNUSED(ntree), bNode *node) { - ImageUser *iuser = MEM_callocN(sizeof(ImageUser), "node image user"); - node->storage = iuser; - iuser->sfra = 1; - iuser->ok = 1; - iuser->flag |= IMA_ANIM_ALWAYS; + ImageUser *iuser = MEM_callocN(sizeof(ImageUser), "node image user"); + node->storage = iuser; + iuser->sfra = 1; + iuser->ok = 1; + iuser->flag |= IMA_ANIM_ALWAYS; } void register_node_type_tex_image(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_IMAGE, "Image", NODE_CLASS_INPUT, NODE_PREVIEW); - node_type_socket_templates(&ntype, NULL, outputs); - node_type_init(&ntype, init); - node_type_storage(&ntype, "ImageUser", node_free_standard_storage, node_copy_standard_storage); - node_type_exec(&ntype, NULL, NULL, exec); - node_type_label(&ntype, node_image_label); + tex_node_type_base(&ntype, TEX_NODE_IMAGE, "Image", NODE_CLASS_INPUT, NODE_PREVIEW); + node_type_socket_templates(&ntype, NULL, outputs); + node_type_init(&ntype, init); + node_type_storage(&ntype, "ImageUser", node_free_standard_storage, node_copy_standard_storage); + node_type_exec(&ntype, NULL, NULL, exec); + node_type_label(&ntype, node_image_label); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_invert.c b/source/blender/nodes/texture/nodes/node_texture_invert.c index 60cc135a8d4..7bc335849bc 100644 --- a/source/blender/nodes/texture/nodes/node_texture_invert.c +++ b/source/blender/nodes/texture/nodes/node_texture_invert.c @@ -21,47 +21,51 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" /* **************** INVERT ******************** */ static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float col[4]; + float col[4]; - tex_input_rgba(col, in[0], p, thread); + tex_input_rgba(col, in[0], p, thread); - col[0] = 1.0f - col[0]; - col[1] = 1.0f - col[1]; - col[2] = 1.0f - col[2]; + col[0] = 1.0f - col[0]; + col[1] = 1.0f - col[1]; + col[2] = 1.0f - col[2]; - copy_v3_v3(out, col); - out[3] = col[3]; + copy_v3_v3(out, col); + out[3] = col[3]; } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_invert(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_INVERT, "Invert", NODE_CLASS_OP_COLOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_INVERT, "Invert", NODE_CLASS_OP_COLOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_math.c b/source/blender/nodes/texture/nodes/node_texture_math.c index 45205b6eac0..8b934be3698 100644 --- a/source/blender/nodes/texture/nodes/node_texture_math.c +++ b/source/blender/nodes/texture/nodes/node_texture_math.c @@ -21,225 +21,206 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" - /* **************** SCALAR MATH ******************** */ static bNodeSocketTemplate inputs[] = { - { SOCK_FLOAT, 1, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE}, - { SOCK_FLOAT, 1, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE}, - { -1, 0, "" }, + {SOCK_FLOAT, 1, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("Value"), 0.5f, 0.5f, 0.5f, 1.0f, -100.0f, 100.0f, PROP_NONE}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_FLOAT, 0, N_("Value")}, - { -1, 0, "" }, + {SOCK_FLOAT, 0, N_("Value")}, + {-1, 0, ""}, }; static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - float in0 = tex_input_value(in[0], p, thread); - float in1 = tex_input_value(in[1], p, thread); - - switch (node->custom1) { - - case NODE_MATH_ADD: - *out = in0 + in1; - break; - case NODE_MATH_SUB: - *out = in0 - in1; - break; - case NODE_MATH_MUL: - *out = in0 * in1; - break; - case NODE_MATH_DIVIDE: - { - if (in1 == 0) /* We don't want to divide by zero. */ - *out = 0.0; - else - *out = in0 / in1; - break; - } - case NODE_MATH_SIN: - { - *out = sinf(in0); - break; - } - case NODE_MATH_COS: - { - *out = cosf(in0); - break; - } - case NODE_MATH_TAN: - { - *out = tanf(in0); - break; - } - case NODE_MATH_ASIN: - { - /* Can't do the impossible... */ - if (in0 <= 1 && in0 >= -1) - *out = asinf(in0); - else - *out = 0.0; - break; - } - case NODE_MATH_ACOS: - { - /* Can't do the impossible... */ - if (in0 <= 1 && in0 >= -1) - *out = acosf(in0); - else - *out = 0.0; - break; - } - case NODE_MATH_ATAN: - { - *out = atan(in0); - break; - } - case NODE_MATH_POW: - { - /* Only raise negative numbers by full integers */ - if (in0 >= 0) { - out[0] = pow(in0, in1); - } - else { - float y_mod_1 = fmod(in1, 1); - if (y_mod_1 > 0.999f || y_mod_1 < 0.001f) { - *out = pow(in0, floor(in1 + 0.5f)); - } - else { - *out = 0.0; - } - } - break; - } - case NODE_MATH_LOG: - { - /* Don't want any imaginary numbers... */ - if (in0 > 0 && in1 > 0) - *out = log(in0) / log(in1); - else - *out = 0.0; - break; - } - case NODE_MATH_MIN: - { - if (in0 < in1) - *out = in0; - else - *out = in1; - break; - } - case NODE_MATH_MAX: - { - if (in0 > in1) - *out = in0; - else - *out = in1; - break; - } - case NODE_MATH_ROUND: - { - *out = (in0 < 0) ? (int)(in0 - 0.5f) : (int)(in0 + 0.5f); - break; - } - - case NODE_MATH_LESS: - { - if (in0 < in1) - *out = 1.0f; - else - *out = 0.0f; - break; - } - - case NODE_MATH_GREATER: - { - if (in0 > in1) - *out = 1.0f; - else - *out = 0.0f; - break; - } - - case NODE_MATH_MOD: - { - if (in1 == 0.0f) - *out = 0.0f; - else - *out = fmod(in0, in1); - break; - } - - case NODE_MATH_ABS: - { - *out = fabsf(in0); - break; - } - - case NODE_MATH_ATAN2: - { - *out = atan2(in0, in1); - break; - } - - case NODE_MATH_FLOOR: - { - *out = floorf(in0); - break; - } - - case NODE_MATH_CEIL: - { - *out = ceilf(in0); - break; - } - - case NODE_MATH_FRACT: - { - *out = in0 - floorf(in0); - break; - } - - case NODE_MATH_SQRT: - { - if (in0 > 0.0f) - *out = sqrtf(in0); - else - *out = 0.0f; - break; - } - - default: - { - BLI_assert(0); - break; - } - } - - if (node->custom2 & SHD_MATH_CLAMP) { - CLAMP(*out, 0.0f, 1.0f); - } + float in0 = tex_input_value(in[0], p, thread); + float in1 = tex_input_value(in[1], p, thread); + + switch (node->custom1) { + + case NODE_MATH_ADD: + *out = in0 + in1; + break; + case NODE_MATH_SUB: + *out = in0 - in1; + break; + case NODE_MATH_MUL: + *out = in0 * in1; + break; + case NODE_MATH_DIVIDE: { + if (in1 == 0) /* We don't want to divide by zero. */ + *out = 0.0; + else + *out = in0 / in1; + break; + } + case NODE_MATH_SIN: { + *out = sinf(in0); + break; + } + case NODE_MATH_COS: { + *out = cosf(in0); + break; + } + case NODE_MATH_TAN: { + *out = tanf(in0); + break; + } + case NODE_MATH_ASIN: { + /* Can't do the impossible... */ + if (in0 <= 1 && in0 >= -1) + *out = asinf(in0); + else + *out = 0.0; + break; + } + case NODE_MATH_ACOS: { + /* Can't do the impossible... */ + if (in0 <= 1 && in0 >= -1) + *out = acosf(in0); + else + *out = 0.0; + break; + } + case NODE_MATH_ATAN: { + *out = atan(in0); + break; + } + case NODE_MATH_POW: { + /* Only raise negative numbers by full integers */ + if (in0 >= 0) { + out[0] = pow(in0, in1); + } + else { + float y_mod_1 = fmod(in1, 1); + if (y_mod_1 > 0.999f || y_mod_1 < 0.001f) { + *out = pow(in0, floor(in1 + 0.5f)); + } + else { + *out = 0.0; + } + } + break; + } + case NODE_MATH_LOG: { + /* Don't want any imaginary numbers... */ + if (in0 > 0 && in1 > 0) + *out = log(in0) / log(in1); + else + *out = 0.0; + break; + } + case NODE_MATH_MIN: { + if (in0 < in1) + *out = in0; + else + *out = in1; + break; + } + case NODE_MATH_MAX: { + if (in0 > in1) + *out = in0; + else + *out = in1; + break; + } + case NODE_MATH_ROUND: { + *out = (in0 < 0) ? (int)(in0 - 0.5f) : (int)(in0 + 0.5f); + break; + } + + case NODE_MATH_LESS: { + if (in0 < in1) + *out = 1.0f; + else + *out = 0.0f; + break; + } + + case NODE_MATH_GREATER: { + if (in0 > in1) + *out = 1.0f; + else + *out = 0.0f; + break; + } + + case NODE_MATH_MOD: { + if (in1 == 0.0f) + *out = 0.0f; + else + *out = fmod(in0, in1); + break; + } + + case NODE_MATH_ABS: { + *out = fabsf(in0); + break; + } + + case NODE_MATH_ATAN2: { + *out = atan2(in0, in1); + break; + } + + case NODE_MATH_FLOOR: { + *out = floorf(in0); + break; + } + + case NODE_MATH_CEIL: { + *out = ceilf(in0); + break; + } + + case NODE_MATH_FRACT: { + *out = in0 - floorf(in0); + break; + } + + case NODE_MATH_SQRT: { + if (in0 > 0.0f) + *out = sqrtf(in0); + else + *out = 0.0f; + break; + } + + default: { + BLI_assert(0); + break; + } + } + + if (node->custom2 & SHD_MATH_CLAMP) { + CLAMP(*out, 0.0f, 1.0f); + } } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &valuefn, data); + tex_output(node, execdata, in, out[0], &valuefn, data); } void register_node_type_tex_math(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_MATH, "Math", NODE_CLASS_CONVERTOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_label(&ntype, node_math_label); - node_type_storage(&ntype, "", NULL, NULL); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_MATH, "Math", NODE_CLASS_CONVERTOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_label(&ntype, node_math_label); + node_type_storage(&ntype, "", NULL, NULL); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_mixRgb.c b/source/blender/nodes/texture/nodes/node_texture_mixRgb.c index 047e427f478..667b1317ea4 100644 --- a/source/blender/nodes/texture/nodes/node_texture_mixRgb.c +++ b/source/blender/nodes/texture/nodes/node_texture_mixRgb.c @@ -21,53 +21,57 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" /* **************** MIX RGB ******************** */ static bNodeSocketTemplate inputs[] = { - { SOCK_FLOAT, 1, N_("Factor"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE }, - { SOCK_RGBA, 1, N_("Color1"), 0.5f, 0.5f, 0.5f, 1.0f }, - { SOCK_RGBA, 1, N_("Color2"), 0.5f, 0.5f, 0.5f, 1.0f }, - { -1, 0, "" }, + {SOCK_FLOAT, 1, N_("Factor"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_NONE}, + {SOCK_RGBA, 1, N_("Color1"), 0.5f, 0.5f, 0.5f, 1.0f}, + {SOCK_RGBA, 1, N_("Color2"), 0.5f, 0.5f, 0.5f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color") }, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - float fac = tex_input_value(in[0], p, thread); - float col1[4], col2[4]; + float fac = tex_input_value(in[0], p, thread); + float col1[4], col2[4]; - tex_input_rgba(col1, in[1], p, thread); - tex_input_rgba(col2, in[2], p, thread); + tex_input_rgba(col1, in[1], p, thread); + tex_input_rgba(col2, in[2], p, thread); - /* use alpha */ - if (node->custom2 & 1) - fac *= col2[3]; + /* use alpha */ + if (node->custom2 & 1) + fac *= col2[3]; - CLAMP(fac, 0.0f, 1.0f); + CLAMP(fac, 0.0f, 1.0f); - copy_v4_v4(out, col1); - ramp_blend(node->custom1, out, fac, col2); + copy_v4_v4(out, col1); + ramp_blend(node->custom1, out, fac, col2); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_mix_rgb(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_MIX_RGB, "Mix", NODE_CLASS_OP_COLOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_label(&ntype, node_blend_label); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_MIX_RGB, "Mix", NODE_CLASS_OP_COLOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_label(&ntype, node_blend_label); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_output.c b/source/blender/nodes/texture/nodes/node_texture_output.c index ff9226479c9..e44bea3ecac 100644 --- a/source/blender/nodes/texture/nodes/node_texture_output.c +++ b/source/blender/nodes/texture/nodes/node_texture_output.c @@ -21,147 +21,150 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" /* **************** COMPOSITE ******************** */ static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, - { SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, PROP_DIRECTION}, - { -1, 0, ""}, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, PROP_DIRECTION}, + {-1, 0, ""}, }; /* applies to render pipeline */ -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **UNUSED(out)) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **UNUSED(out)) { - TexCallData *cdata = (TexCallData *)data; - TexResult *target = cdata->target; - - if (cdata->do_preview) { - TexParams params; - params_from_cdata(¶ms, cdata); - - if (in[1] && in[1]->hasinput && !in[0]->hasinput) - tex_input_rgba(&target->tr, in[1], ¶ms, cdata->thread); - else - tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread); - tex_do_preview(execdata->preview, params.co, &target->tr, cdata->do_manage); - } - else { - /* 0 means don't care, so just use first */ - if (cdata->which_output == node->custom1 || (cdata->which_output == 0 && node->custom1 == 1)) { - TexParams params; - params_from_cdata(¶ms, cdata); - - tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread); - - target->tin = (target->tr + target->tg + target->tb) / 3.0f; - target->talpha = true; - - if (target->nor) { - if (in[1] && in[1]->hasinput) - tex_input_vec(target->nor, in[1], ¶ms, cdata->thread); - else - target->nor = NULL; - } - } - } + TexCallData *cdata = (TexCallData *)data; + TexResult *target = cdata->target; + + if (cdata->do_preview) { + TexParams params; + params_from_cdata(¶ms, cdata); + + if (in[1] && in[1]->hasinput && !in[0]->hasinput) + tex_input_rgba(&target->tr, in[1], ¶ms, cdata->thread); + else + tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread); + tex_do_preview(execdata->preview, params.co, &target->tr, cdata->do_manage); + } + else { + /* 0 means don't care, so just use first */ + if (cdata->which_output == node->custom1 || (cdata->which_output == 0 && node->custom1 == 1)) { + TexParams params; + params_from_cdata(¶ms, cdata); + + tex_input_rgba(&target->tr, in[0], ¶ms, cdata->thread); + + target->tin = (target->tr + target->tg + target->tb) / 3.0f; + target->talpha = true; + + if (target->nor) { + if (in[1] && in[1]->hasinput) + tex_input_vec(target->nor, in[1], ¶ms, cdata->thread); + else + target->nor = NULL; + } + } + } } static void unique_name(bNode *node) { - TexNodeOutput *tno = (TexNodeOutput *)node->storage; - char new_name[sizeof(tno->name)]; - int new_len = 0; - int suffix; - bNode *i; - const char *name = tno->name; - - new_name[0] = '\0'; - i = node; - while (i->prev) i = i->prev; - for (; i; i = i->next) { - if (i == node || - i->type != TEX_NODE_OUTPUT || - !STREQ(name, ((TexNodeOutput *)(i->storage))->name)) - { - continue; - } - - if (new_name[0] == '\0') { - int len = strlen(name); - if (len >= 4 && sscanf(name + len - 4, ".%03d", &suffix) == 1) { - new_len = len; - } - else { - suffix = 0; - new_len = len + 4; - if (new_len > (sizeof(tno->name) - 1)) - new_len = (sizeof(tno->name) - 1); - } - - BLI_strncpy(new_name, name, sizeof(tno->name)); - name = new_name; - } - sprintf(new_name + new_len - 4, ".%03d", ++suffix); - } - - if (new_name[0] != '\0') { - BLI_strncpy(tno->name, new_name, sizeof(tno->name)); - } + TexNodeOutput *tno = (TexNodeOutput *)node->storage; + char new_name[sizeof(tno->name)]; + int new_len = 0; + int suffix; + bNode *i; + const char *name = tno->name; + + new_name[0] = '\0'; + i = node; + while (i->prev) + i = i->prev; + for (; i; i = i->next) { + if (i == node || i->type != TEX_NODE_OUTPUT || + !STREQ(name, ((TexNodeOutput *)(i->storage))->name)) { + continue; + } + + if (new_name[0] == '\0') { + int len = strlen(name); + if (len >= 4 && sscanf(name + len - 4, ".%03d", &suffix) == 1) { + new_len = len; + } + else { + suffix = 0; + new_len = len + 4; + if (new_len > (sizeof(tno->name) - 1)) + new_len = (sizeof(tno->name) - 1); + } + + BLI_strncpy(new_name, name, sizeof(tno->name)); + name = new_name; + } + sprintf(new_name + new_len - 4, ".%03d", ++suffix); + } + + if (new_name[0] != '\0') { + BLI_strncpy(tno->name, new_name, sizeof(tno->name)); + } } static void assign_index(struct bNode *node) { - bNode *tnode; - int index = 1; + bNode *tnode; + int index = 1; - tnode = node; - while (tnode->prev) - tnode = tnode->prev; + tnode = node; + while (tnode->prev) + tnode = tnode->prev; check_index: - for (; tnode; tnode = tnode->next) - if (tnode->type == TEX_NODE_OUTPUT && tnode != node) - if (tnode->custom1 == index) { - index++; - goto check_index; - } - - node->custom1 = index; + for (; tnode; tnode = tnode->next) + if (tnode->type == TEX_NODE_OUTPUT && tnode != node) + if (tnode->custom1 == index) { + index++; + goto check_index; + } + + node->custom1 = index; } static void init(bNodeTree *UNUSED(ntree), bNode *node) { - TexNodeOutput *tno = MEM_callocN(sizeof(TexNodeOutput), "TEX_output"); - node->storage = tno; + TexNodeOutput *tno = MEM_callocN(sizeof(TexNodeOutput), "TEX_output"); + node->storage = tno; - strcpy(tno->name, "Default"); - unique_name(node); - assign_index(node); + strcpy(tno->name, "Default"); + unique_name(node); + assign_index(node); } static void copy(bNodeTree *dest_ntree, bNode *dest_node, bNode *src_node) { - node_copy_standard_storage(dest_ntree, dest_node, src_node); - unique_name(dest_node); - assign_index(dest_node); + node_copy_standard_storage(dest_ntree, dest_node, src_node); + unique_name(dest_node); + assign_index(dest_node); } void register_node_type_tex_output(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_OUTPUT, "Output", NODE_CLASS_OUTPUT, NODE_PREVIEW); - node_type_socket_templates(&ntype, inputs, NULL); - node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); - node_type_init(&ntype, init); - node_type_storage(&ntype, "TexNodeOutput", node_free_standard_storage, copy); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_OUTPUT, "Output", NODE_CLASS_OUTPUT, NODE_PREVIEW); + node_type_socket_templates(&ntype, inputs, NULL); + node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); + node_type_init(&ntype, init); + node_type_storage(&ntype, "TexNodeOutput", node_free_standard_storage, copy); + node_type_exec(&ntype, NULL, NULL, exec); - /* Do not allow muting output. */ - node_type_internal_links(&ntype, NULL); + /* Do not allow muting output. */ + node_type_internal_links(&ntype, NULL); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_proc.c b/source/blender/nodes/texture/nodes/node_texture_proc.c index 34be50aaeec..8024ccdc631 100644 --- a/source/blender/nodes/texture/nodes/node_texture_proc.c +++ b/source/blender/nodes/texture/nodes/node_texture_proc.c @@ -21,7 +21,6 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" @@ -31,287 +30,278 @@ * In this file: wrappers to use procedural textures as nodes */ - static bNodeSocketTemplate outputs_both[] = { - { SOCK_RGBA, 0, N_("Color"), 1.0f, 0.0f, 0.0f, 1.0f }, - { SOCK_VECTOR, 0, N_("Normal"), 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, PROP_DIRECTION }, - { -1, 0, "" } -}; -static bNodeSocketTemplate outputs_color_only[] = { - { SOCK_RGBA, 0, N_("Color") }, - { -1, 0, "" } -}; + {SOCK_RGBA, 0, N_("Color"), 1.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_VECTOR, 0, N_("Normal"), 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, PROP_DIRECTION}, + {-1, 0, ""}}; +static bNodeSocketTemplate outputs_color_only[] = {{SOCK_RGBA, 0, N_("Color")}, {-1, 0, ""}}; /* Inputs common to all, #defined because nodes will need their own inputs too */ #define I 2 /* count */ #define COMMON_INPUTS \ - { SOCK_RGBA, 1, "Color 1", 0.0f, 0.0f, 0.0f, 1.0f }, \ - { SOCK_RGBA, 1, "Color 2", 1.0f, 1.0f, 1.0f, 1.0f } + {SOCK_RGBA, 1, "Color 1", 0.0f, 0.0f, 0.0f, 1.0f}, \ + { \ + SOCK_RGBA, 1, "Color 2", 1.0f, 1.0f, 1.0f, 1.0f \ + } /* Calls multitex and copies the result to the outputs. Called by xxx_exec, which handles inputs. */ -static void do_proc(float *result, TexParams *p, const float col1[4], const float col2[4], char is_normal, Tex *tex, const short thread) +static void do_proc(float *result, + TexParams *p, + const float col1[4], + const float col2[4], + char is_normal, + Tex *tex, + const short thread) { - TexResult texres; - int textype; - - if (is_normal) { - texres.nor = result; - } - else - texres.nor = NULL; - - textype = multitex_nodes(tex, p->co, p->dxt, p->dyt, p->osatex, - &texres, thread, 0, p->mtex, NULL); - - if (is_normal) - return; - - if (textype & TEX_RGB) { - copy_v4_v4(result, &texres.tr); - } - else { - copy_v4_v4(result, col1); - ramp_blend(MA_RAMP_BLEND, result, texres.tin, col2); - } + TexResult texres; + int textype; + + if (is_normal) { + texres.nor = result; + } + else + texres.nor = NULL; + + textype = multitex_nodes( + tex, p->co, p->dxt, p->dyt, p->osatex, &texres, thread, 0, p->mtex, NULL); + + if (is_normal) + return; + + if (textype & TEX_RGB) { + copy_v4_v4(result, &texres.tr); + } + else { + copy_v4_v4(result, col1); + ramp_blend(MA_RAMP_BLEND, result, texres.tin, col2); + } } -typedef void (*MapFn) (Tex *tex, bNodeStack **in, TexParams *p, const short thread); +typedef void (*MapFn)(Tex *tex, bNodeStack **in, TexParams *p, const short thread); -static void texfn( - float *result, - TexParams *p, - bNode *node, - bNodeStack **in, - char is_normal, - MapFn map_inputs, - short thread) +static void texfn(float *result, + TexParams *p, + bNode *node, + bNodeStack **in, + char is_normal, + MapFn map_inputs, + short thread) { - Tex tex = *((Tex *)(node->storage)); - float col1[4], col2[4]; - tex_input_rgba(col1, in[0], p, thread); - tex_input_rgba(col2, in[1], p, thread); + Tex tex = *((Tex *)(node->storage)); + float col1[4], col2[4]; + tex_input_rgba(col1, in[0], p, thread); + tex_input_rgba(col2, in[1], p, thread); - map_inputs(&tex, in, p, thread); + map_inputs(&tex, in, p, thread); - do_proc(result, p, col1, col2, is_normal, &tex, thread); + do_proc(result, p, col1, col2, is_normal, &tex, thread); } static int count_outputs(bNode *node) { - bNodeSocket *sock; - int num = 0; - for (sock = node->outputs.first; sock; sock = sock->next) { - num++; - } - return num; + bNodeSocket *sock; + int num = 0; + for (sock = node->outputs.first; sock; sock = sock->next) { + num++; + } + return num; } /* Boilerplate generators */ #define ProcNoInputs(name) \ - static void name##_map_inputs(Tex *UNUSED(tex), bNodeStack **UNUSED(in), TexParams *UNUSED(p), short UNUSED(thread)) \ - {} + static void name##_map_inputs( \ + Tex *UNUSED(tex), bNodeStack **UNUSED(in), TexParams *UNUSED(p), short UNUSED(thread)) \ + { \ + } #define ProcDef(name) \ - static void name##_colorfn(float *result, TexParams *p, bNode *node, bNodeStack **in, short thread) \ - { \ - texfn(result, p, node, in, 0, &name##_map_inputs, thread); \ - } \ - static void name##_normalfn(float *result, TexParams *p, bNode *node, bNodeStack **in, short thread) \ - { \ - texfn(result, p, node, in, 1, &name##_map_inputs, thread); \ - } \ - static void name##_exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) \ - { \ - int outs = count_outputs(node); \ - if (outs >= 1) tex_output(node, execdata, in, out[0], &name##_colorfn, data); \ - if (outs >= 2) tex_output(node, execdata, in, out[1], &name##_normalfn, data); \ - } - + static void name##_colorfn( \ + float *result, TexParams *p, bNode *node, bNodeStack **in, short thread) \ + { \ + texfn(result, p, node, in, 0, &name##_map_inputs, thread); \ + } \ + static void name##_normalfn( \ + float *result, TexParams *p, bNode *node, bNodeStack **in, short thread) \ + { \ + texfn(result, p, node, in, 1, &name##_map_inputs, thread); \ + } \ + static void name##_exec(void *data, \ + int UNUSED(thread), \ + bNode *node, \ + bNodeExecData *execdata, \ + bNodeStack **in, \ + bNodeStack **out) \ + { \ + int outs = count_outputs(node); \ + if (outs >= 1) \ + tex_output(node, execdata, in, out[0], &name##_colorfn, data); \ + if (outs >= 2) \ + tex_output(node, execdata, in, out[1], &name##_normalfn, data); \ + } /* --- VORONOI -- */ static bNodeSocketTemplate voronoi_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("W1"), 1.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("W2"), 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("W3"), 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("W4"), 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE }, + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("W1"), 1.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("W2"), 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("W3"), 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("W4"), 0.0f, 0.0f, 0.0f, 0.0f, -2.0f, 2.0f, PROP_NONE}, - { SOCK_FLOAT, 1, N_("iScale"), 1.0f, 0.0f, 0.0f, 0.0f, 0.01f, 10.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 4.0f, PROP_UNSIGNED }, + {SOCK_FLOAT, 1, N_("iScale"), 1.0f, 0.0f, 0.0f, 0.0f, 0.01f, 10.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 4.0f, PROP_UNSIGNED}, - { -1, 0, "" } -}; + {-1, 0, ""}}; static void voronoi_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->vn_w1 = tex_input_value(in[I + 0], p, thread); - tex->vn_w2 = tex_input_value(in[I + 1], p, thread); - tex->vn_w3 = tex_input_value(in[I + 2], p, thread); - tex->vn_w4 = tex_input_value(in[I + 3], p, thread); + tex->vn_w1 = tex_input_value(in[I + 0], p, thread); + tex->vn_w2 = tex_input_value(in[I + 1], p, thread); + tex->vn_w3 = tex_input_value(in[I + 2], p, thread); + tex->vn_w4 = tex_input_value(in[I + 3], p, thread); - tex->ns_outscale = tex_input_value(in[I + 4], p, thread); - tex->noisesize = tex_input_value(in[I + 5], p, thread); + tex->ns_outscale = tex_input_value(in[I + 4], p, thread); + tex->noisesize = tex_input_value(in[I + 5], p, thread); } ProcDef(voronoi) -/* --- BLEND -- */ -static bNodeSocketTemplate blend_inputs[] = { - COMMON_INPUTS, - { -1, 0, "" } -}; -ProcNoInputs(blend) -ProcDef(blend) - -/* -- MAGIC -- */ -static bNodeSocketTemplate magic_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- BLEND -- */ + static bNodeSocketTemplate blend_inputs[] = {COMMON_INPUTS, {-1, 0, ""}}; +ProcNoInputs(blend) ProcDef(blend) + + /* -- MAGIC -- */ + static bNodeSocketTemplate magic_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void magic_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->turbul = tex_input_value(in[I + 0], p, thread); + tex->turbul = tex_input_value(in[I + 0], p, thread); } ProcDef(magic) -/* --- MARBLE --- */ -static bNodeSocketTemplate marble_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- MARBLE --- */ + static bNodeSocketTemplate marble_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void marble_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->noisesize = tex_input_value(in[I + 0], p, thread); - tex->turbul = tex_input_value(in[I + 1], p, thread); + tex->noisesize = tex_input_value(in[I + 0], p, thread); + tex->turbul = tex_input_value(in[I + 1], p, thread); } ProcDef(marble) -/* --- CLOUDS --- */ -static bNodeSocketTemplate clouds_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- CLOUDS --- */ + static bNodeSocketTemplate clouds_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void clouds_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->noisesize = tex_input_value(in[I + 0], p, thread); + tex->noisesize = tex_input_value(in[I + 0], p, thread); } ProcDef(clouds) -/* --- DISTORTED NOISE --- */ -static bNodeSocketTemplate distnoise_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Distortion"), 1.00f, 0.0f, 0.0f, 0.0f, 0.0000f, 10.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- DISTORTED NOISE --- */ + static bNodeSocketTemplate distnoise_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Distortion"), 1.00f, 0.0f, 0.0f, 0.0f, 0.0000f, 10.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void distnoise_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->noisesize = tex_input_value(in[I + 0], p, thread); - tex->dist_amount = tex_input_value(in[I + 1], p, thread); + tex->noisesize = tex_input_value(in[I + 0], p, thread); + tex->dist_amount = tex_input_value(in[I + 1], p, thread); } ProcDef(distnoise) -/* --- WOOD --- */ -static bNodeSocketTemplate wood_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- WOOD --- */ + static bNodeSocketTemplate wood_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void wood_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->noisesize = tex_input_value(in[I + 0], p, thread); - tex->turbul = tex_input_value(in[I + 1], p, thread); + tex->noisesize = tex_input_value(in[I + 0], p, thread); + tex->turbul = tex_input_value(in[I + 1], p, thread); } ProcDef(wood) -/* --- MUSGRAVE --- */ -static bNodeSocketTemplate musgrave_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("H"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Lacunarity"), 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 6.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Octaves"), 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 8.0f, PROP_UNSIGNED }, - - { SOCK_FLOAT, 1, N_("iScale"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 10.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- MUSGRAVE --- */ + static bNodeSocketTemplate musgrave_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("H"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Lacunarity"), 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 6.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Octaves"), 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 8.0f, PROP_UNSIGNED}, + + {SOCK_FLOAT, 1, N_("iScale"), 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 10.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void musgrave_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->mg_H = tex_input_value(in[I + 0], p, thread); - tex->mg_lacunarity = tex_input_value(in[I + 1], p, thread); - tex->mg_octaves = tex_input_value(in[I + 2], p, thread); - tex->ns_outscale = tex_input_value(in[I + 3], p, thread); - tex->noisesize = tex_input_value(in[I + 4], p, thread); + tex->mg_H = tex_input_value(in[I + 0], p, thread); + tex->mg_lacunarity = tex_input_value(in[I + 1], p, thread); + tex->mg_octaves = tex_input_value(in[I + 2], p, thread); + tex->ns_outscale = tex_input_value(in[I + 3], p, thread); + tex->noisesize = tex_input_value(in[I + 4], p, thread); } ProcDef(musgrave) -/* --- NOISE --- */ -static bNodeSocketTemplate noise_inputs[] = { - COMMON_INPUTS, - { -1, 0, "" } -}; -ProcNoInputs(noise) -ProcDef(noise) - -/* --- STUCCI --- */ -static bNodeSocketTemplate stucci_inputs[] = { - COMMON_INPUTS, - { SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED }, - { SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED }, - { -1, 0, "" } -}; + /* --- NOISE --- */ + static bNodeSocketTemplate noise_inputs[] = {COMMON_INPUTS, {-1, 0, ""}}; +ProcNoInputs(noise) ProcDef(noise) + + /* --- STUCCI --- */ + static bNodeSocketTemplate stucci_inputs[] = { + COMMON_INPUTS, + {SOCK_FLOAT, 1, N_("Size"), 0.25f, 0.0f, 0.0f, 0.0f, 0.0001f, 2.0f, PROP_UNSIGNED}, + {SOCK_FLOAT, 1, N_("Turbulence"), 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 200.0f, PROP_UNSIGNED}, + {-1, 0, ""}}; static void stucci_map_inputs(Tex *tex, bNodeStack **in, TexParams *p, short thread) { - tex->noisesize = tex_input_value(in[I + 0], p, thread); - tex->turbul = tex_input_value(in[I + 1], p, thread); + tex->noisesize = tex_input_value(in[I + 0], p, thread); + tex->turbul = tex_input_value(in[I + 1], p, thread); } ProcDef(stucci) -/* --- */ + /* --- */ -static void init(bNodeTree *UNUSED(ntree), bNode *node) + static void init(bNodeTree *UNUSED(ntree), bNode *node) { - Tex *tex = MEM_callocN(sizeof(Tex), "Tex"); - node->storage = tex; + Tex *tex = MEM_callocN(sizeof(Tex), "Tex"); + node->storage = tex; - BKE_texture_default(tex); - tex->type = node->type - TEX_NODE_PROC; - - if (tex->type == TEX_WOOD) - tex->stype = TEX_BANDNOISE; + BKE_texture_default(tex); + tex->type = node->type - TEX_NODE_PROC; + if (tex->type == TEX_WOOD) + tex->stype = TEX_BANDNOISE; } /* Node type definitions */ #define TexDef(TEXTYPE, outputs, name, Name) \ -void register_node_type_tex_proc_##name(void) \ -{ \ - static bNodeType ntype; \ - \ - tex_node_type_base(&ntype, TEX_NODE_PROC+TEXTYPE, Name, NODE_CLASS_TEXTURE, NODE_PREVIEW); \ - node_type_socket_templates(&ntype, name##_inputs, outputs); \ - node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); \ - node_type_init(&ntype, init); \ - node_type_storage(&ntype, "Tex", node_free_standard_storage, node_copy_standard_storage); \ - node_type_exec(&ntype, NULL, NULL, name##_exec); \ - \ - nodeRegisterType(&ntype); \ -} + void register_node_type_tex_proc_##name(void) \ + { \ + static bNodeType ntype; \ +\ + tex_node_type_base(&ntype, TEX_NODE_PROC + TEXTYPE, Name, NODE_CLASS_TEXTURE, NODE_PREVIEW); \ + node_type_socket_templates(&ntype, name##_inputs, outputs); \ + node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); \ + node_type_init(&ntype, init); \ + node_type_storage(&ntype, "Tex", node_free_standard_storage, node_copy_standard_storage); \ + node_type_exec(&ntype, NULL, NULL, name##_exec); \ +\ + nodeRegisterType(&ntype); \ + } #define C outputs_color_only #define CV outputs_both -TexDef(TEX_VORONOI, CV, voronoi, "Voronoi" ) -TexDef(TEX_BLEND, C, blend, "Blend" ) -TexDef(TEX_MAGIC, C, magic, "Magic" ) -TexDef(TEX_MARBLE, CV, marble, "Marble" ) -TexDef(TEX_CLOUDS, CV, clouds, "Clouds" ) -TexDef(TEX_WOOD, CV, wood, "Wood" ) -TexDef(TEX_MUSGRAVE, CV, musgrave, "Musgrave" ) -TexDef(TEX_NOISE, C, noise, "Noise" ) -TexDef(TEX_STUCCI, CV, stucci, "Stucci" ) -TexDef(TEX_DISTNOISE, CV, distnoise, "Distorted Noise" ) +TexDef(TEX_VORONOI, CV, voronoi, "Voronoi") TexDef(TEX_BLEND, C, blend, "Blend") + TexDef(TEX_MAGIC, C, magic, "Magic") TexDef(TEX_MARBLE, CV, marble, "Marble") + TexDef(TEX_CLOUDS, CV, clouds, "Clouds") TexDef(TEX_WOOD, CV, wood, "Wood") + TexDef(TEX_MUSGRAVE, CV, musgrave, "Musgrave") TexDef(TEX_NOISE, C, noise, "Noise") + TexDef(TEX_STUCCI, CV, stucci, "Stucci") + TexDef(TEX_DISTNOISE, CV, distnoise, "Distorted Noise") diff --git a/source/blender/nodes/texture/nodes/node_texture_rotate.c b/source/blender/nodes/texture/nodes/node_texture_rotate.c index b8dfc9cb608..a7f348076ac 100644 --- a/source/blender/nodes/texture/nodes/node_texture_rotate.c +++ b/source/blender/nodes/texture/nodes/node_texture_rotate.c @@ -21,79 +21,83 @@ * \ingroup texnodes */ - #include <math.h> #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, - { SOCK_FLOAT, 1, N_("Turns"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE }, - { SOCK_VECTOR, 1, N_("Axis"), 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, PROP_DIRECTION }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_FLOAT, 1, N_("Turns"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f, PROP_NONE}, + {SOCK_VECTOR, 1, N_("Axis"), 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, PROP_DIRECTION}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void rotate(float new_co[3], float a, float ax[3], const float co[3]) { - float para[3]; - float perp[3]; - float cp[3]; + float para[3]; + float perp[3]; + float cp[3]; - float cos_a = cosf(a * (float)(2 * M_PI)); - float sin_a = sinf(a * (float)(2 * M_PI)); + float cos_a = cosf(a * (float)(2 * M_PI)); + float sin_a = sinf(a * (float)(2 * M_PI)); - // x' = xcosa + n(n.x)(1-cosa) + (x*n)sina + // x' = xcosa + n(n.x)(1-cosa) + (x*n)sina - mul_v3_v3fl(perp, co, cos_a); - mul_v3_v3fl(para, ax, dot_v3v3(co, ax) * (1 - cos_a)); + mul_v3_v3fl(perp, co, cos_a); + mul_v3_v3fl(para, ax, dot_v3v3(co, ax) * (1 - cos_a)); - cross_v3_v3v3(cp, ax, co); - mul_v3_fl(cp, sin_a); + cross_v3_v3v3(cp, ax, co); + mul_v3_fl(cp, sin_a); - new_co[0] = para[0] + perp[0] + cp[0]; - new_co[1] = para[1] + perp[1] + cp[1]; - new_co[2] = para[2] + perp[2] + cp[2]; + new_co[0] = para[0] + perp[0] + cp[0]; + new_co[1] = para[1] + perp[1] + cp[1]; + new_co[2] = para[2] + perp[2] + cp[2]; } static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float new_co[3], new_dxt[3], new_dyt[3], a, ax[3]; - - a = tex_input_value(in[1], p, thread); - tex_input_vec(ax, in[2], p, thread); - - rotate(new_co, a, ax, p->co); - if (p->osatex) { - rotate(new_dxt, a, ax, p->dxt); - rotate(new_dyt, a, ax, p->dyt); - } - - { - TexParams np = *p; - np.co = new_co; - np.dxt = new_dxt; - np.dyt = new_dyt; - tex_input_rgba(out, in[0], &np, thread); - } + float new_co[3], new_dxt[3], new_dyt[3], a, ax[3]; + + a = tex_input_value(in[1], p, thread); + tex_input_vec(ax, in[2], p, thread); + + rotate(new_co, a, ax, p->co); + if (p->osatex) { + rotate(new_dxt, a, ax, p->dxt); + rotate(new_dyt, a, ax, p->dyt); + } + + { + TexParams np = *p; + np.co = new_co; + np.dxt = new_dxt; + np.dyt = new_dyt; + tex_input_rgba(out, in[0], &np, thread); + } } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_rotate(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_ROTATE, "Rotate", NODE_CLASS_DISTORT, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_ROTATE, "Rotate", NODE_CLASS_DISTORT, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_scale.c b/source/blender/nodes/texture/nodes/node_texture_scale.c index e7e255ed7ef..61e81c1ed02 100644 --- a/source/blender/nodes/texture/nodes/node_texture_scale.c +++ b/source/blender/nodes/texture/nodes/node_texture_scale.c @@ -21,52 +21,56 @@ * \ingroup texnodes */ - #include <math.h> #include "node_texture_util.h" static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f }, - { SOCK_VECTOR, 1, N_("Scale"), 1.0f, 1.0f, 1.0f, 0.0f, -10.0f, 10.0f, PROP_XYZ }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_VECTOR, 1, N_("Scale"), 1.0f, 1.0f, 1.0f, 0.0f, -10.0f, 10.0f, PROP_XYZ}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float scale[3], new_co[3], new_dxt[3], new_dyt[3]; - TexParams np = *p; + float scale[3], new_co[3], new_dxt[3], new_dyt[3]; + TexParams np = *p; - np.co = new_co; - np.dxt = new_dxt; - np.dyt = new_dyt; + np.co = new_co; + np.dxt = new_dxt; + np.dyt = new_dyt; - tex_input_vec(scale, in[1], p, thread); + tex_input_vec(scale, in[1], p, thread); - mul_v3_v3v3(new_co, p->co, scale); - if (p->osatex) { - mul_v3_v3v3(new_dxt, p->dxt, scale); - mul_v3_v3v3(new_dyt, p->dyt, scale); - } + mul_v3_v3v3(new_co, p->co, scale); + if (p->osatex) { + mul_v3_v3v3(new_dxt, p->dxt, scale); + mul_v3_v3v3(new_dyt, p->dyt, scale); + } - tex_input_rgba(out, in[0], &np, thread); + tex_input_rgba(out, in[0], &np, thread); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_scale(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_SCALE, "Scale", NODE_CLASS_DISTORT, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_SCALE, "Scale", NODE_CLASS_DISTORT, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_texture.c b/source/blender/nodes/texture/nodes/node_texture_texture.c index 791e0fab1fb..342807d3142 100644 --- a/source/blender/nodes/texture/nodes/node_texture_texture.c +++ b/source/blender/nodes/texture/nodes/node_texture_texture.c @@ -21,79 +21,82 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" #include "RE_shader_ext.h" static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color1"), 1.0f, 1.0f, 1.0f, 1.0f }, - { SOCK_RGBA, 1, N_("Color2"), 0.0f, 0.0f, 0.0f, 1.0f }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color1"), 1.0f, 1.0f, 1.0f, 1.0f}, + {SOCK_RGBA, 1, N_("Color2"), 0.0f, 0.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color") }, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - Tex *nodetex = (Tex *)node->id; - static float red[] = {1, 0, 0, 1}; - static float white[] = {1, 1, 1, 1}; - float co[3], dxt[3], dyt[3]; - - copy_v3_v3(co, p->co); - if (p->osatex) { - copy_v3_v3(dxt, p->dxt); - copy_v3_v3(dyt, p->dyt); - } - else { - zero_v3(dxt); - zero_v3(dyt); - } - - if (node->custom2 || node->need_exec == 0) { - /* this node refers to its own texture tree! */ - copy_v4_v4(out, (fabsf(co[0] - co[1]) < 0.01f) ? white : red); - } - else if (nodetex) { - TexResult texres; - int textype; - float nor[] = {0, 0, 0}; - float col1[4], col2[4]; - - tex_input_rgba(col1, in[0], p, thread); - tex_input_rgba(col2, in[1], p, thread); - - texres.nor = nor; - 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); - } - else { - copy_v4_v4(out, col1); - ramp_blend(MA_RAMP_BLEND, out, texres.tin, col2); - } - } + Tex *nodetex = (Tex *)node->id; + static float red[] = {1, 0, 0, 1}; + static float white[] = {1, 1, 1, 1}; + float co[3], dxt[3], dyt[3]; + + copy_v3_v3(co, p->co); + if (p->osatex) { + copy_v3_v3(dxt, p->dxt); + copy_v3_v3(dyt, p->dyt); + } + else { + zero_v3(dxt); + zero_v3(dyt); + } + + if (node->custom2 || node->need_exec == 0) { + /* this node refers to its own texture tree! */ + copy_v4_v4(out, (fabsf(co[0] - co[1]) < 0.01f) ? white : red); + } + else if (nodetex) { + TexResult texres; + int textype; + float nor[] = {0, 0, 0}; + float col1[4], col2[4]; + + tex_input_rgba(col1, in[0], p, thread); + tex_input_rgba(col2, in[1], p, thread); + + texres.nor = nor; + 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); + } + else { + copy_v4_v4(out, col1); + ramp_blend(MA_RAMP_BLEND, out, texres.tin, col2); + } + } } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_texture(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_TEXTURE, "Texture", NODE_CLASS_INPUT, NODE_PREVIEW); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_TEXTURE, "Texture", NODE_CLASS_INPUT, NODE_PREVIEW); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_translate.c b/source/blender/nodes/texture/nodes/node_texture_translate.c index d4fc045a383..c53077d792b 100644 --- a/source/blender/nodes/texture/nodes/node_texture_translate.c +++ b/source/blender/nodes/texture/nodes/node_texture_translate.c @@ -21,48 +21,52 @@ * \ingroup texnodes */ - #include <math.h> #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, - { SOCK_VECTOR, 1, N_("Offset"), 0.0f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f, PROP_TRANSLATION }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.0f, 0.0f, 0.0f, 1.0f}, + {SOCK_VECTOR, 1, N_("Offset"), 0.0f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f, PROP_TRANSLATION}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void colorfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float offset[3], new_co[3]; - TexParams np = *p; - np.co = new_co; + float offset[3], new_co[3]; + TexParams np = *p; + np.co = new_co; - tex_input_vec(offset, in[1], p, thread); + tex_input_vec(offset, in[1], p, thread); - new_co[0] = p->co[0] + offset[0]; - new_co[1] = p->co[1] + offset[1]; - new_co[2] = p->co[2] + offset[2]; + new_co[0] = p->co[0] + offset[0]; + new_co[1] = p->co[1] + offset[1]; + new_co[2] = p->co[2] + offset[2]; - tex_input_rgba(out, in[0], &np, thread); + tex_input_rgba(out, in[0], &np, thread); } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &colorfn, data); + tex_output(node, execdata, in, out[0], &colorfn, data); } void register_node_type_tex_translate(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_TRANSLATE, "Translate", NODE_CLASS_DISTORT, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_TRANSLATE, "Translate", NODE_CLASS_DISTORT, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_valToNor.c b/source/blender/nodes/texture/nodes/node_texture_valToNor.c index ea09b9e28ae..1a341b3129c 100644 --- a/source/blender/nodes/texture/nodes/node_texture_valToNor.c +++ b/source/blender/nodes/texture/nodes/node_texture_valToNor.c @@ -21,64 +21,68 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" static bNodeSocketTemplate inputs[] = { - { SOCK_FLOAT, 1, N_("Val"), 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE }, - { SOCK_FLOAT, 1, N_("Nabla"), 0.025f, 0.0f, 0.0f, 0.0f, 0.001f, 0.1f, PROP_UNSIGNED }, - { -1, 0, "" }, + {SOCK_FLOAT, 1, N_("Val"), 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_NONE}, + {SOCK_FLOAT, 1, N_("Nabla"), 0.025f, 0.0f, 0.0f, 0.0f, 0.001f, 0.1f, PROP_UNSIGNED}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { SOCK_VECTOR, 0, N_("Normal") }, - { -1, 0, "" }, + {SOCK_VECTOR, 0, N_("Normal")}, + {-1, 0, ""}, }; static void normalfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float new_co[3]; - const float *co = p->co; + float new_co[3]; + const float *co = p->co; - float nabla = tex_input_value(in[1], p, thread); - float val; - float nor[3]; + float nabla = tex_input_value(in[1], p, thread); + float val; + float nor[3]; - TexParams np = *p; - np.co = new_co; + TexParams np = *p; + np.co = new_co; - val = tex_input_value(in[0], p, thread); + val = tex_input_value(in[0], p, thread); - new_co[0] = co[0] + nabla; - new_co[1] = co[1]; - new_co[2] = co[2]; - nor[0] = tex_input_value(in[0], &np, thread); + new_co[0] = co[0] + nabla; + new_co[1] = co[1]; + new_co[2] = co[2]; + nor[0] = tex_input_value(in[0], &np, thread); - new_co[0] = co[0]; - new_co[1] = co[1] + nabla; - nor[1] = tex_input_value(in[0], &np, thread); + new_co[0] = co[0]; + new_co[1] = co[1] + nabla; + nor[1] = tex_input_value(in[0], &np, thread); - new_co[1] = co[1]; - new_co[2] = co[2] + nabla; - nor[2] = tex_input_value(in[0], &np, thread); + new_co[1] = co[1]; + new_co[2] = co[2] + nabla; + nor[2] = tex_input_value(in[0], &np, thread); - out[0] = val - nor[0]; - out[1] = val - nor[1]; - out[2] = val - nor[2]; + out[0] = val - nor[0]; + out[1] = val - nor[1]; + out[2] = val - nor[2]; } -static void exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &normalfn, data); + tex_output(node, execdata, in, out[0], &normalfn, data); } void register_node_type_tex_valtonor(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_VALTONOR, "Value to Normal", NODE_CLASS_CONVERTOR, 0); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_VALTONOR, "Value to Normal", NODE_CLASS_CONVERTOR, 0); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_valToRgb.c b/source/blender/nodes/texture/nodes/node_texture_valToRgb.c index 9db1caf6a85..8c315faaf8a 100644 --- a/source/blender/nodes/texture/nodes/node_texture_valToRgb.c +++ b/source/blender/nodes/texture/nodes/node_texture_valToRgb.c @@ -21,84 +21,93 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" #include "IMB_colormanagement.h" /* **************** VALTORGB ******************** */ static bNodeSocketTemplate valtorgb_in[] = { - { SOCK_FLOAT, 1, N_("Fac"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, - { -1, 0, "" }, + {SOCK_FLOAT, 1, N_("Fac"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR}, + {-1, 0, ""}, }; static bNodeSocketTemplate valtorgb_out[] = { - { SOCK_RGBA, 0, N_("Color")}, - { -1, 0, "" }, + {SOCK_RGBA, 0, N_("Color")}, + {-1, 0, ""}, }; static void valtorgb_colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread) { - if (node->storage) { - float fac = tex_input_value(in[0], p, thread); + if (node->storage) { + float fac = tex_input_value(in[0], p, thread); - BKE_colorband_evaluate(node->storage, fac, out); - } + BKE_colorband_evaluate(node->storage, fac, out); + } } -static void valtorgb_exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void valtorgb_exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &valtorgb_colorfn, data); + tex_output(node, execdata, in, out[0], &valtorgb_colorfn, data); } static void valtorgb_init(bNodeTree *UNUSED(ntree), bNode *node) { - node->storage = BKE_colorband_add(true); + node->storage = BKE_colorband_add(true); } void register_node_type_tex_valtorgb(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, 0); - node_type_socket_templates(&ntype, valtorgb_in, valtorgb_out); - node_type_size_preset(&ntype, NODE_SIZE_LARGE); - node_type_init(&ntype, valtorgb_init); - node_type_storage(&ntype, "ColorBand", node_free_standard_storage, node_copy_standard_storage); - node_type_exec(&ntype, NULL, NULL, valtorgb_exec); + tex_node_type_base(&ntype, TEX_NODE_VALTORGB, "ColorRamp", NODE_CLASS_CONVERTOR, 0); + node_type_socket_templates(&ntype, valtorgb_in, valtorgb_out); + node_type_size_preset(&ntype, NODE_SIZE_LARGE); + node_type_init(&ntype, valtorgb_init); + node_type_storage(&ntype, "ColorBand", node_free_standard_storage, node_copy_standard_storage); + node_type_exec(&ntype, NULL, NULL, valtorgb_exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } /* **************** RGBTOBW ******************** */ static bNodeSocketTemplate rgbtobw_in[] = { - { SOCK_RGBA, 1, N_("Color"), 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f}, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate rgbtobw_out[] = { - { SOCK_FLOAT, 0, N_("Val"), 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, - { -1, 0, "" }, + {SOCK_FLOAT, 0, N_("Val"), 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; - -static void rgbtobw_valuefn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) +static void rgbtobw_valuefn( + float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread) { - float cin[4]; - tex_input_rgba(cin, in[0], p, thread); - *out = IMB_colormanagement_get_luminance(cin); + float cin[4]; + tex_input_rgba(cin, in[0], p, thread); + *out = IMB_colormanagement_get_luminance(cin); } -static void rgbtobw_exec(void *data, int UNUSED(thread), bNode *node, bNodeExecData *execdata, bNodeStack **in, bNodeStack **out) +static void rgbtobw_exec(void *data, + int UNUSED(thread), + bNode *node, + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **out) { - tex_output(node, execdata, in, out[0], &rgbtobw_valuefn, data); + tex_output(node, execdata, in, out[0], &rgbtobw_valuefn, data); } void register_node_type_tex_rgbtobw(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_RGBTOBW, "RGB to BW", NODE_CLASS_CONVERTOR, 0); - node_type_socket_templates(&ntype, rgbtobw_in, rgbtobw_out); - node_type_exec(&ntype, NULL, NULL, rgbtobw_exec); + tex_node_type_base(&ntype, TEX_NODE_RGBTOBW, "RGB to BW", NODE_CLASS_CONVERTOR, 0); + node_type_socket_templates(&ntype, rgbtobw_in, rgbtobw_out); + node_type_exec(&ntype, NULL, NULL, rgbtobw_exec); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } diff --git a/source/blender/nodes/texture/nodes/node_texture_viewer.c b/source/blender/nodes/texture/nodes/node_texture_viewer.c index f6adc256103..b0c119e975f 100644 --- a/source/blender/nodes/texture/nodes/node_texture_viewer.c +++ b/source/blender/nodes/texture/nodes/node_texture_viewer.c @@ -21,43 +21,47 @@ * \ingroup texnodes */ - #include "node_texture_util.h" #include "NOD_texture.h" #include <math.h> static bNodeSocketTemplate inputs[] = { - { SOCK_RGBA, 1, N_("Color"), 1.0f, 0.0f, 0.0f, 1.0f }, - { -1, 0, "" }, + {SOCK_RGBA, 1, N_("Color"), 1.0f, 0.0f, 0.0f, 1.0f}, + {-1, 0, ""}, }; static bNodeSocketTemplate outputs[] = { - { -1, 0, "" }, + {-1, 0, ""}, }; -static void exec(void *data, int UNUSED(thread), bNode *UNUSED(node), bNodeExecData *execdata, bNodeStack **in, bNodeStack **UNUSED(out)) +static void exec(void *data, + int UNUSED(thread), + bNode *UNUSED(node), + bNodeExecData *execdata, + bNodeStack **in, + bNodeStack **UNUSED(out)) { - TexCallData *cdata = (TexCallData *)data; + TexCallData *cdata = (TexCallData *)data; - if (cdata->do_preview) { - TexParams params; - float col[4]; - params_from_cdata(¶ms, cdata); + if (cdata->do_preview) { + TexParams params; + float col[4]; + params_from_cdata(¶ms, cdata); - tex_input_rgba(col, in[0], ¶ms, cdata->thread); - tex_do_preview(execdata->preview, params.previewco, col, cdata->do_manage); - } + tex_input_rgba(col, in[0], ¶ms, cdata->thread); + tex_do_preview(execdata->preview, params.previewco, col, cdata->do_manage); + } } void register_node_type_tex_viewer(void) { - static bNodeType ntype; + static bNodeType ntype; - tex_node_type_base(&ntype, TEX_NODE_VIEWER, "Viewer", NODE_CLASS_OUTPUT, NODE_PREVIEW); - node_type_socket_templates(&ntype, inputs, outputs); - node_type_exec(&ntype, NULL, NULL, exec); + tex_node_type_base(&ntype, TEX_NODE_VIEWER, "Viewer", NODE_CLASS_OUTPUT, NODE_PREVIEW); + node_type_socket_templates(&ntype, inputs, outputs); + node_type_exec(&ntype, NULL, NULL, exec); - /* Do not allow muting viewer node. */ - node_type_internal_links(&ntype, NULL); + /* Do not allow muting viewer node. */ + node_type_internal_links(&ntype, NULL); - nodeRegisterType(&ntype); + nodeRegisterType(&ntype); } |