36
36
/* **************** CURVE Time ******************** */
38
38
/* custom1 = sfra, custom2 = efra */
39
static bNodeSocketTemplate cmp_node_time_out[]= {
40
{ SOCK_FLOAT, 0, "Fac"},
39
static bNodeSocketTemplate cmp_node_time_out[] = {
40
{ SOCK_FLOAT, 0, N_("Fac")},
44
static void node_composit_exec_curves_time(void *data, bNode *node, bNodeStack **UNUSED(in), bNodeStack **out)
47
/* stack order output: fac */
50
if (node->custom1 < node->custom2)
51
fac= (rd->cfra - node->custom1)/(float)(node->custom2-node->custom1);
53
fac= curvemapping_evaluateF(node->storage, 0, fac);
54
out[0]->vec[0]= CLAMPIS(fac, 0.0f, 1.0f);
58
static void node_composit_init_curves_time(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
44
static void node_composit_init_curves_time(bNodeTree *UNUSED(ntree), bNode *node, bNodeTemplate *UNUSED(ntemp))
61
47
node->custom2= 250;
81
66
/* **************** CURVE VEC ******************** */
82
static bNodeSocketTemplate cmp_node_curve_vec_in[]= {
83
{ SOCK_VECTOR, 1, "Vector", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE},
87
static bNodeSocketTemplate cmp_node_curve_vec_out[]= {
88
{ SOCK_VECTOR, 0, "Vector"},
92
static void node_composit_exec_curve_vec(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **out)
94
/* stack order input: vec */
95
/* stack order output: vec */
97
curvemapping_evaluate_premulRGBF(node->storage, out[0]->vec, in[0]->vec);
100
static void node_composit_init_curve_vec(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
67
static bNodeSocketTemplate cmp_node_curve_vec_in[] = {
68
{ SOCK_VECTOR, 1, N_("Vector"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_NONE},
72
static bNodeSocketTemplate cmp_node_curve_vec_out[] = {
73
{ SOCK_VECTOR, 0, N_("Vector")},
77
static void node_composit_init_curve_vec(bNodeTree *UNUSED(ntree), bNode *node, bNodeTemplate *UNUSED(ntemp))
102
79
node->storage= curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f);
111
88
node_type_size(&ntype, 200, 140, 320);
112
89
node_type_init(&ntype, node_composit_init_curve_vec);
113
90
node_type_storage(&ntype, "CurveMapping", node_free_curves, node_copy_curves);
114
node_type_exec(&ntype, node_composit_exec_curve_vec);
116
92
nodeRegisterType(ttype, &ntype);
120
96
/* **************** CURVE RGB ******************** */
121
static bNodeSocketTemplate cmp_node_curve_rgb_in[]= {
122
{ SOCK_FLOAT, 1, "Fac", 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_FACTOR},
123
{ SOCK_RGBA, 1, "Image", 1.0f, 1.0f, 1.0f, 1.0f},
124
{ SOCK_RGBA, 1, "Black Level", 0.0f, 0.0f, 0.0f, 1.0f},
125
{ SOCK_RGBA, 1, "White Level", 1.0f, 1.0f, 1.0f, 1.0f},
129
static bNodeSocketTemplate cmp_node_curve_rgb_out[]= {
130
{ SOCK_RGBA, 0, "Image"},
134
static void do_curves(bNode *node, float *out, float *in)
136
curvemapping_evaluate_premulRGBF(node->storage, out, in);
140
static void do_curves_fac(bNode *node, float *out, float *in, float *fac)
144
curvemapping_evaluate_premulRGBF(node->storage, out, in);
145
else if (*fac <= 0.0f) {
149
float col[4], mfac= 1.0f-*fac;
150
curvemapping_evaluate_premulRGBF(node->storage, col, in);
151
out[0]= mfac*in[0] + *fac*col[0];
152
out[1]= mfac*in[1] + *fac*col[1];
153
out[2]= mfac*in[2] + *fac*col[2];
158
static void node_composit_exec_curve_rgb(void *UNUSED(data), bNode *node, bNodeStack **in, bNodeStack **out)
160
/* stack order input: fac, image, black level, white level */
161
/* stack order output: image */
163
if (out[0]->hasoutput==0)
166
/* input no image? then only color operation */
167
if (in[1]->data==NULL) {
168
curvemapping_evaluateRGBF(node->storage, out[0]->vec, in[1]->vec);
171
/* make output size of input image */
172
CompBuf *cbuf= in[1]->data;
173
CompBuf *stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
175
curvemapping_set_black_white(node->storage, in[2]->vec, in[3]->vec);
177
if (in[0]->data==NULL && in[0]->vec[0] == 1.0f)
178
composit1_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, do_curves, CB_RGBA);
180
composit2_pixel_processor(node, stackbuf, in[1]->data, in[1]->vec, in[0]->data, in[0]->vec, do_curves_fac, CB_RGBA, CB_VAL);
182
out[0]->data= stackbuf;
187
static void node_composit_init_curve_rgb(bNodeTree *UNUSED(ntree), bNode* node, bNodeTemplate *UNUSED(ntemp))
97
static bNodeSocketTemplate cmp_node_curve_rgb_in[] = {
98
{ SOCK_FLOAT, 1, N_("Fac"), 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_FACTOR},
99
{ SOCK_RGBA, 1, N_("Image"), 1.0f, 1.0f, 1.0f, 1.0f},
100
{ SOCK_RGBA, 1, N_("Black Level"), 0.0f, 0.0f, 0.0f, 1.0f},
101
{ SOCK_RGBA, 1, N_("White Level"), 1.0f, 1.0f, 1.0f, 1.0f},
105
static bNodeSocketTemplate cmp_node_curve_rgb_out[] = {
106
{ SOCK_RGBA, 0, N_("Image")},
110
static void node_composit_init_curve_rgb(bNodeTree *UNUSED(ntree), bNode *node, bNodeTemplate *UNUSED(ntemp))
189
112
node->storage= curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);