Curve: CurveMapping Extend Option
Extend options are currently stored per curve. This was not clearly communicated to the user and they expected this to be a setting per CurveMapping. This change will move the option from `Curve` to `CurveMapping`. In order to support this the API had to be changed. BPY: CurveMap.evaluate is also moved to CurveMapping.evaluate what breaks Python API. Cycles has been updated but other add-ons have not. After release of 2.81 we can merge this to master and adapt the add-ons. Reviewed By: campbellbarton Differential Revision: https://developer.blender.org/D6169
This commit is contained in:
@@ -159,7 +159,7 @@ static inline void curvemapping_to_array(BL::CurveMapping &cumap, array<float> &
|
||||
data.resize(size);
|
||||
for (int i = 0; i < size; i++) {
|
||||
float t = (float)i / (float)(size - 1);
|
||||
data[i] = curve.evaluate(t);
|
||||
data[i] = cumap.evaluate(curve, t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,15 +197,16 @@ static inline void curvemapping_color_to_array(BL::CurveMapping &cumap,
|
||||
BL::CurveMap mapI = cumap.curves[3];
|
||||
for (int i = 0; i < size; i++) {
|
||||
const float t = min_x + (float)i / (float)(size - 1) * range_x;
|
||||
data[i] = make_float3(mapR.evaluate(mapI.evaluate(t)),
|
||||
mapG.evaluate(mapI.evaluate(t)),
|
||||
mapB.evaluate(mapI.evaluate(t)));
|
||||
data[i] = make_float3(cumap.evaluate(mapR, cumap.evaluate(mapI, t)),
|
||||
cumap.evaluate(mapG, cumap.evaluate(mapI, t)),
|
||||
cumap.evaluate(mapB, cumap.evaluate(mapI, t)));
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < size; i++) {
|
||||
float t = min_x + (float)i / (float)(size - 1) * range_x;
|
||||
data[i] = make_float3(mapR.evaluate(t), mapG.evaluate(t), mapB.evaluate(t));
|
||||
data[i] = make_float3(
|
||||
cumap.evaluate(mapR, t), cumap.evaluate(mapG, t), cumap.evaluate(mapB, t));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ out vec4 fragColor;
|
||||
*/
|
||||
uniform sampler1D curve_mapping_texture;
|
||||
uniform int curve_mapping_lut_size;
|
||||
uniform ivec4 use_curve_mapping_extend_extrapolate;
|
||||
uniform int use_curve_mapping_extend_extrapolate;
|
||||
uniform vec4 curve_mapping_mintable;
|
||||
uniform vec4 curve_mapping_range;
|
||||
uniform vec4 curve_mapping_ext_in_x;
|
||||
@@ -42,8 +42,8 @@ float read_curve_mapping(int table, int index)
|
||||
float curvemap_calc_extend(int table, float x, vec2 first, vec2 last)
|
||||
{
|
||||
if (x <= first[0]) {
|
||||
if (use_curve_mapping_extend_extrapolate[table] == 0) {
|
||||
/* no extrapolate */
|
||||
if (use_curve_mapping_extend_extrapolate == 0) {
|
||||
/* horizontal extrapolation */
|
||||
return first[1];
|
||||
}
|
||||
else {
|
||||
@@ -55,8 +55,8 @@ float curvemap_calc_extend(int table, float x, vec2 first, vec2 last)
|
||||
}
|
||||
}
|
||||
else if (x >= last[0]) {
|
||||
if (use_curve_mapping_extend_extrapolate[table] == 0) {
|
||||
/* no extrapolate */
|
||||
if (use_curve_mapping_extend_extrapolate == 0) {
|
||||
/* horizontal extrapolation */
|
||||
return last[1];
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -73,10 +73,10 @@ typedef struct OCIO_CurveMappingSettings {
|
||||
int lut_size;
|
||||
|
||||
/* Extend extrapolation flags for all the tables.
|
||||
* if use_extend_extrapolate[T] != 0 means extrapolation for
|
||||
* table T is needed.
|
||||
* if use_extend_extrapolate != 0 means extrapolation for
|
||||
* curve.
|
||||
*/
|
||||
int use_extend_extrapolate[4];
|
||||
int use_extend_extrapolate;
|
||||
|
||||
/* Minimal X value of the curve mapping tables. */
|
||||
float mintable[4];
|
||||
|
||||
@@ -499,8 +499,8 @@ bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r,
|
||||
if (use_curve_mapping) {
|
||||
immUniform1i("curve_mapping_texture", 2);
|
||||
immUniform1i("curve_mapping_lut_size", curve_mapping_settings->lut_size);
|
||||
immUniform4iv("use_curve_mapping_extend_extrapolate",
|
||||
curve_mapping_settings->use_extend_extrapolate);
|
||||
immUniform1i("use_curve_mapping_extend_extrapolate",
|
||||
curve_mapping_settings->use_extend_extrapolate);
|
||||
immUniform4fv("curve_mapping_mintable", curve_mapping_settings->mintable);
|
||||
immUniform4fv("curve_mapping_range", curve_mapping_settings->range);
|
||||
immUniform4fv("curve_mapping_ext_in_x", curve_mapping_settings->ext_in_x);
|
||||
|
||||
Reference in New Issue
Block a user