Revision: 26129
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26129
Author:   broken
Date:     2010-01-20 05:29:00 +0100 (Wed, 20 Jan 2010)

Log Message:
-----------
Forgot to add the new file

Added Paths:
-----------
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c

Added: trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c      
                        (rev 0)
+++ trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c      
2010-01-20 04:29:00 UTC (rev 26129)
@@ -0,0 +1,134 @@
+/**
+ * 
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2006 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Matt Ebb.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+
+#include "../CMP_util.h"
+
+
+/* ******************* Color Balance ********************************* */
+static bNodeSocketType cmp_node_colorbalance_in[]={
+       {SOCK_VALUE, 1, "Fac",  1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+       {SOCK_RGBA,1,"Image", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
+       {-1,0,""}
+};
+
+static bNodeSocketType cmp_node_colorbalance_out[]={
+       {SOCK_RGBA,0,"Image", 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f},
+       {-1,0,""}
+};
+
+DO_INLINE float colorbalance(float in, float slope, float offset, float power)
+{
+       float x = in * slope + offset;
+       
+       /* prevent NaN */
+       if (x < 0.f) x = 0.f;
+       
+       return powf(x, power);
+}
+
+static void do_colorbalance(bNode *node, float* out, float *in)
+{
+       NodeColorBalance *n= (NodeColorBalance *)node->storage;
+       
+       out[0] = colorbalance(in[0], n->slope[0], n->offset[0], n->power[0]);
+       out[1] = colorbalance(in[1], n->slope[1], n->offset[1], n->power[1]);
+       out[2] = colorbalance(in[2], n->slope[2], n->offset[2], n->power[2]);
+       out[3] = in[3];
+}
+
+static void do_colorbalance_fac(bNode *node, float* out, float *in, float *fac)
+{
+       NodeColorBalance *n= (NodeColorBalance *)node->storage;
+       const float mfac= 1.0f - *fac;
+       
+       out[0] = mfac*in[0] + *fac * colorbalance(in[0], n->slope[0], 
n->offset[0], n->power[0]);
+       out[1] = mfac*in[1] + *fac * colorbalance(in[1], n->slope[1], 
n->offset[1], n->power[1]);
+       out[2] = mfac*in[2] + *fac * colorbalance(in[2], n->slope[2], 
n->offset[2], n->power[2]);
+       out[3] = in[3];
+}
+
+static void node_composit_exec_colorbalance(void *data, bNode *node, 
bNodeStack **in, bNodeStack **out)
+{
+       CompBuf *cbuf= in[1]->data;
+       CompBuf *stackbuf;
+       
+       /* stack order input:  fac, image */
+       /* stack order output: image */
+       if(out[0]->hasoutput==0) return;
+       
+       if(in[0]->vec[0] == 0.f && in[0]->data == NULL) {
+               out[0]->data = pass_on_compbuf(cbuf);
+               return;
+       }
+       
+       if (cbuf) {
+               stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* 
create output based on image input */
+                               
+               if ((in[0]->data==NULL) && (in[0]->vec[0] == 1.f)) {
+                       composit1_pixel_processor(node, stackbuf, in[1]->data, 
in[1]->vec, do_colorbalance, CB_RGBA);
+               }
+               else {
+                       composit2_pixel_processor(node, stackbuf, in[1]->data, 
in[1]->vec, in[0]->data, in[0]->vec, do_colorbalance_fac, CB_RGBA, CB_VAL);
+               }
+
+               out[0]->data=stackbuf;
+       }
+}
+
+static void node_composit_init_colorbalance(bNode *node)
+{
+       NodeColorBalance *n= node->storage= 
MEM_callocN(sizeof(NodeColorBalance), "node colorbalance");
+       n->slope[0] = n->slope[1] = n->slope[2] = 1.f;
+       n->offset[0] = n->offset[1] = n->offset[2] = 0.f;
+       n->power[0] = n->power[1] = n->power[2] = 1.f;
+       
+       /* for ui, converted to slope/offset/power in RNA */
+       n->lift[0] = n->lift[1] = n->lift[2] = 0.5f;
+       n->gamma[0] = n->gamma[1] = n->gamma[2] = 0.5f;
+       n->gain[0] = n->gain[1] = n->gain[2] = 0.5f;
+}
+
+bNodeType cmp_node_colorbalance={
+       /* *next,*prev */       NULL, NULL,
+       /* type code   */       CMP_NODE_COLORBALANCE,
+       /* name        */       "Color Balance",
+       /* width+range */       400, 200, 400,
+       /* class+opts  */       NODE_CLASS_OP_COLOR, NODE_OPTIONS,
+       /* input sock  */       cmp_node_colorbalance_in,
+       /* output sock */       cmp_node_colorbalance_out,
+       /* storage     */       "NodeColorBalance",
+       /* execfunc    */       node_composit_exec_colorbalance,
+       /* butfunc     */       NULL,
+       /* initfunc    */       node_composit_init_colorbalance,
+       /* freestoragefunc    */        node_free_standard_storage,
+       /* copystoragefunc    */        node_copy_standard_storage,
+       /* id          */       NULL
+};
+


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to