Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2013-09-09 22:39:51 +0400
committerAntony Riakiotakis <kalast@gmail.com>2013-09-09 22:39:51 +0400
commit00641bb237d32c341134e22201459aa74ea2e370 (patch)
tree6ba9c1e0bd2cf87ecbf0ccadfdd554eefba249b9 /source/blender
parent97d250fa65bd0472e61fa8cab23cfdce0422a9ba (diff)
Attempt fix for #36688.
Curves may not be not initialized when called from python. C code explicilty says that curvemapping_initialize should be called prior to evaluating the curve, however the curve clip rectangle is not available when calling evaluation on the curvemap. This is not possible unless we force the evaluation on CurveMapping level, not on CurveMap level. For now just pass a rectangle with the x boundary values of the curvemap for evaluation to avoid the crash.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_colortools.h1
-rw-r--r--source/blender/blenkernel/intern/colortools.c13
-rw-r--r--source/blender/makesrna/intern/rna_color.c1
3 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index e0b7e68bafc..e703f189d6f 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -64,6 +64,7 @@ void curvemapping_changed_all(struct CurveMapping *cumap);
/* call before _all_ evaluation functions */
void curvemapping_initialize(struct CurveMapping *cumap);
+void curvemap_initialize(struct CurveMap *cuma);
/* keep these (const CurveMap) - to help with thread safety */
/* single curve, no table check */
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index 7f94f365925..063fc2eccab 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -878,6 +878,19 @@ void curvemapping_initialize(CurveMapping *cumap)
}
}
+void curvemap_initialize(CurveMap *cuma)
+{
+ if (cuma->table == NULL) {
+ rctf clipr;
+ /* clip rectangle is not available here, but we can use a temporary
+ * rectangle with the same min/max values */
+ clipr.xmin = cuma->mintable;
+ clipr.xmax = cuma->maxtable;
+
+ curvemap_make_table(cuma, &clipr);
+ }
+}
+
void curvemapping_table_RGBA(const CurveMapping *cumap, float **array, int *size)
{
int a;
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index dcf6adf6fca..b9b3fe1ce79 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -623,6 +623,7 @@ static void rna_ColorManagement_update(Main *UNUSED(bmain), Scene *UNUSED(scene)
/* this function only exists because #curvemap_evaluateF uses a 'const' qualifier */
static float rna_CurveMap_evaluateF(struct CurveMap *cuma, float value)
{
+ curvemap_initialize(cuma);
return curvemap_evaluateF(cuma, value);
}