Revision: 50087
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50087
Author:   campbellbarton
Date:     2012-08-21 14:43:51 +0000 (Tue, 21 Aug 2012)
Log Message:
-----------
change curve evaluation functions never to modify curve data (ensures thread 
safety), now initializations has to be done outside evaluation.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_colortools.h
    trunk/blender/source/blender/blenkernel/intern/brush.c
    trunk/blender/source/blender/blenkernel/intern/colortools.c
    trunk/blender/source/blender/blenkernel/intern/world.c
    trunk/blender/source/blender/compositor/nodes/COM_TimeNode.cpp
    trunk/blender/source/blender/gpu/intern/gpu_material.c
    trunk/blender/source/blender/makesrna/intern/rna_color.c
    trunk/blender/source/blender/modifiers/intern/MOD_warp.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvg_util.c
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_curves.c
    
trunk/blender/source/blender/nodes/composite/nodes/node_composite_huecorrect.c
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_curves.c
    trunk/blender/source/blender/nodes/texture/nodes/node_texture_curves.c
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/pointdensity.c
    trunk/blender/source/blender/render/intern/source/shadeoutput.c

Modified: trunk/blender/source/blender/blenkernel/BKE_colortools.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_colortools.h    2012-08-21 
14:38:03 UTC (rev 50086)
+++ trunk/blender/source/blender/blenkernel/BKE_colortools.h    2012-08-21 
14:43:51 UTC (rev 50087)
@@ -67,25 +67,31 @@
 void                curvemapping_changed(struct CurveMapping *cumap, int 
rem_doubles);
 void                curvemapping_changed_all(struct CurveMapping *cumap);
 
+/* call before _all_ evaluation functions */
+void                curvemapping_initialize(struct CurveMapping *cumap);
+
+/* keep these (const CurveMap) - to help with thread safety */
 /* single curve, no table check */
-float               curvemap_evaluateF(struct CurveMap *cuma, float value);
+float               curvemap_evaluateF(const struct CurveMap *cuma, float 
value);
 /* single curve, with table check */
-float               curvemapping_evaluateF(struct CurveMapping *cumap, int 
cur, float value);
-void                curvemapping_evaluate3F(struct CurveMapping *cumap, float 
vecout[3], const float vecin[3]);
-void                curvemapping_evaluateRGBF(struct CurveMapping *cumap, 
float vecout[3], const float vecin[3]);
-void                curvemapping_evaluate_premulRGB(struct CurveMapping 
*cumap, unsigned char vecout_byte[3], const unsigned char vecin_byte[3]);
-void                curvemapping_evaluate_premulRGBF_ex(struct CurveMapping 
*cumap, float vecout[3], const float vecin[3],
+float               curvemapping_evaluateF(const struct CurveMapping *cumap, 
int cur, float value);
+void                curvemapping_evaluate3F(const struct CurveMapping *cumap, 
float vecout[3], const float vecin[3]);
+void                curvemapping_evaluateRGBF(const struct CurveMapping 
*cumap, float vecout[3], const float vecin[3]);
+void                curvemapping_evaluate_premulRGB(const struct CurveMapping 
*cumap, unsigned char vecout_byte[3], const unsigned char vecin_byte[3]);
+void                curvemapping_evaluate_premulRGBF_ex(const struct 
CurveMapping *cumap, float vecout[3], const float vecin[3],
                                                         const float black[3], 
const float bwmul[3]);
-void                curvemapping_evaluate_premulRGBF(struct CurveMapping 
*cumap, float vecout[3], const float vecin[3]);
+void                curvemapping_evaluate_premulRGBF(const struct CurveMapping 
*cumap, float vecout[3], const float vecin[3]);
+int                 curvemapping_RGBA_does_something(const struct CurveMapping 
*cumap);
+void                curvemapping_table_RGBA(const struct CurveMapping *cumap, 
float **array, int *size);
+
+/* non-const, these modify the curve */
 void                curvemapping_do_ibuf(struct CurveMapping *cumap, struct 
ImBuf *ibuf);
 void                curvemapping_premultiply(struct CurveMapping *cumap, int 
restore);
-int                 curvemapping_RGBA_does_something(struct CurveMapping 
*cumap);
-void                curvemapping_initialize(struct CurveMapping *cumap);
-void                curvemapping_table_RGBA(struct CurveMapping *cumap, float 
**array, int *size);
+
+
 void                BKE_histogram_update_sample_line(struct Histogram *hist, 
struct ImBuf *ibuf, const short use_color_management);
 void                scopes_update(struct Scopes *scopes, struct ImBuf *ibuf, 
int use_color_management);
 void                scopes_free(struct Scopes *scopes);
 void                scopes_new(struct Scopes *scopes);
 
 #endif
-

Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c      2012-08-21 
14:38:03 UTC (rev 50086)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c      2012-08-21 
14:43:51 UTC (rev 50087)
@@ -1253,7 +1253,9 @@
        if (p >= len) return 0;
        else p = p / len;
 
+       curvemapping_initialize(br->curve);
        p = curvemapping_evaluateF(br->curve, 0, p);
+
        if (p < 0.0f) p = 0.0f;
        else if (p > 1.0f) p = 1.0f;
        return p;
@@ -1267,6 +1269,7 @@
        else
                p = p / len;
 
+       curvemapping_initialize(br->curve);
        return curvemapping_evaluateF(br->curve, 0, p);
 }
 

Modified: trunk/blender/source/blender/blenkernel/intern/colortools.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/colortools.c 2012-08-21 
14:38:03 UTC (rev 50086)
+++ trunk/blender/source/blender/blenkernel/intern/colortools.c 2012-08-21 
14:43:51 UTC (rev 50087)
@@ -440,7 +440,7 @@
 
 /* in X, out Y. 
  * X is presumed to be outside first or last */
-static float curvemap_calc_extend(CurveMap *cuma, float x, const float 
first[2], const float last[2])
+static float curvemap_calc_extend(const CurveMap *cuma, float x, const float 
first[2], const float last[2])
 {
        if (x <= first[0]) {
                if ((cuma->flag & CUMA_EXTEND_EXTRAPOLATE) == 0) {
@@ -739,7 +739,7 @@
 }
 
 /* table should be verified */
-float curvemap_evaluateF(CurveMap *cuma, float value)
+float curvemap_evaluateF(const CurveMap *cuma, float value)
 {
        float fi;
        int i;
@@ -761,33 +761,26 @@
 }
 
 /* works with curve 'cur' */
-float curvemapping_evaluateF(CurveMapping *cumap, int cur, float value)
+float curvemapping_evaluateF(const CurveMapping *cumap, int cur, float value)
 {
-       CurveMap *cuma = cumap->cm + cur;
-       
-       /* allocate or bail out */
-       if (cuma->table == NULL) {
-               curvemap_make_table(cuma, &cumap->clipr);
-               if (cuma->table == NULL)
-                       return 1.0f - value;
-       }
+       const CurveMap *cuma = cumap->cm + cur;
        return curvemap_evaluateF(cuma, value);
 }
 
 /* vector case */
-void curvemapping_evaluate3F(CurveMapping *cumap, float vecout[3], const float 
vecin[3])
+void curvemapping_evaluate3F(const CurveMapping *cumap, float vecout[3], const 
float vecin[3])
 {
-       vecout[0] = curvemapping_evaluateF(cumap, 0, vecin[0]);
-       vecout[1] = curvemapping_evaluateF(cumap, 1, vecin[1]);
-       vecout[2] = curvemapping_evaluateF(cumap, 2, vecin[2]);
+       vecout[0] = curvemap_evaluateF(&cumap->cm[0], vecin[0]);
+       vecout[1] = curvemap_evaluateF(&cumap->cm[1], vecin[1]);
+       vecout[2] = curvemap_evaluateF(&cumap->cm[2], vecin[2]);
 }
 
 /* RGB case, no black/white points, no premult */
-void curvemapping_evaluateRGBF(CurveMapping *cumap, float vecout[3], const 
float vecin[3])
+void curvemapping_evaluateRGBF(const CurveMapping *cumap, float vecout[3], 
const float vecin[3])
 {
-       vecout[0] = curvemapping_evaluateF(cumap, 0, 
curvemapping_evaluateF(cumap, 3, vecin[0]));
-       vecout[1] = curvemapping_evaluateF(cumap, 1, 
curvemapping_evaluateF(cumap, 3, vecin[1]));
-       vecout[2] = curvemapping_evaluateF(cumap, 2, 
curvemapping_evaluateF(cumap, 3, vecin[2]));
+       vecout[0] = curvemap_evaluateF(&cumap->cm[0], 
curvemap_evaluateF(&cumap->cm[3], vecin[0]));
+       vecout[1] = curvemap_evaluateF(&cumap->cm[1], 
curvemap_evaluateF(&cumap->cm[3], vecin[1]));
+       vecout[2] = curvemap_evaluateF(&cumap->cm[2], 
curvemap_evaluateF(&cumap->cm[3], vecin[2]));
 }
 
 /** same as #curvemapping_evaluate_premulRGBF
@@ -799,7 +792,7 @@
  * \param black Use instead of cumap->black
  * \param bwmul Use instead of cumap->bwmul
  */
-void curvemapping_evaluate_premulRGBF_ex(CurveMapping *cumap, float vecout[3], 
const float vecin[3],
+void curvemapping_evaluate_premulRGBF_ex(const CurveMapping *cumap, float 
vecout[3], const float vecin[3],
                                          const float black[3], const float 
bwmul[3])
 {
        vecout[0] = curvemap_evaluateF(&cumap->cm[0], (vecin[0] - black[0]) * 
bwmul[0]);
@@ -808,7 +801,7 @@
 }
 
 /* RGB with black/white points and premult. tables are checked */
-void curvemapping_evaluate_premulRGBF(CurveMapping *cumap, float vecout[3], 
const float vecin[3])
+void curvemapping_evaluate_premulRGBF(const CurveMapping *cumap, float 
vecout[3], const float vecin[3])
 {
        vecout[0] = curvemap_evaluateF(&cumap->cm[0], (vecin[0] - 
cumap->black[0]) * cumap->bwmul[0]);
        vecout[1] = curvemap_evaluateF(&cumap->cm[1], (vecin[1] - 
cumap->black[1]) * cumap->bwmul[1]);
@@ -816,7 +809,7 @@
 }
 
 /* same as above, byte version */
-void curvemapping_evaluate_premulRGB(CurveMapping *cumap, unsigned char 
vecout_byte[3], const unsigned char vecin_byte[3])
+void curvemapping_evaluate_premulRGB(const CurveMapping *cumap, unsigned char 
vecout_byte[3], const unsigned char vecin_byte[3])
 {
        float vecin[3], vecout[3];
 
@@ -889,7 +882,7 @@
        curvemapping_premultiply(cumap, 1);
 }
 
-int curvemapping_RGBA_does_something(CurveMapping *cumap)
+int curvemapping_RGBA_does_something(const CurveMapping *cumap)
 {
        int a;
        
@@ -925,13 +918,12 @@
        }
 }
 
-void curvemapping_table_RGBA(CurveMapping *cumap, float **array, int *size)
+void curvemapping_table_RGBA(const CurveMapping *cumap, float **array, int 
*size)
 {
        int a;
        
        *size = CM_TABLE + 1;
        *array = MEM_callocN(sizeof(float) * (*size) * 4, "CurveMapping");
-       curvemapping_initialize(cumap);
 
        for (a = 0; a < *size; a++) {
                if (cumap->cm[0].table)

Modified: trunk/blender/source/blender/blenkernel/intern/world.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/world.c      2012-08-21 
14:38:03 UTC (rev 50086)
+++ trunk/blender/source/blender/blenkernel/intern/world.c      2012-08-21 
14:43:51 UTC (rev 50087)
@@ -128,8 +128,9 @@
                }
        }
 
-       if (wrld->nodetree)
+       if (wrld->nodetree) {
                wrldn->nodetree = ntreeCopyTree(wrld->nodetree);
+       }
        
        if (wrld->preview)
                wrldn->preview = BKE_previewimg_copy(wrld->preview);

Modified: trunk/blender/source/blender/compositor/nodes/COM_TimeNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_TimeNode.cpp      
2012-08-21 14:38:03 UTC (rev 50086)
+++ trunk/blender/source/blender/compositor/nodes/COM_TimeNode.cpp      
2012-08-21 14:43:51 UTC (rev 50087)
@@ -33,6 +33,8 @@
        /* pass */
 }
 
+////curvemapping_initialize(&hcmd->curve_mapping);
+
 void TimeNode::convertToOperations(ExecutionSystem *graph, CompositorContext 
*context)
 {
        SetValueOperation *operation = new SetValueOperation();
@@ -53,6 +55,7 @@
                fac = (context->getFramenumber() - node->custom1) / 
(float)(node->custom2 - node->custom1);
        }
 
+       curvemapping_initialize((CurveMapping *)node->storage);
        fac = curvemapping_evaluateF((CurveMapping *)node->storage, 0, fac);
        operation->setValue(CLAMPIS(fac, 0.0f, 1.0f));
        graph->addOperation(operation);


@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to