From 2e6159a4948cd0f4e0b636734bfe506796bd87f2 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 1 Nov 2019 12:09:55 +0100 Subject: 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 --- intern/cycles/blender/blender_util.h | 11 ++++++----- intern/opencolorio/gpu_shader_display_transform.glsl | 10 +++++----- intern/opencolorio/ocio_capi.h | 6 +++--- intern/opencolorio/ocio_impl_glsl.cc | 4 ++-- 4 files changed, 16 insertions(+), 15 deletions(-) (limited to 'intern') diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index 3625dd45ae2..cbe61e367fa 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -159,7 +159,7 @@ static inline void curvemapping_to_array(BL::CurveMapping &cumap, array & 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)); } } } diff --git a/intern/opencolorio/gpu_shader_display_transform.glsl b/intern/opencolorio/gpu_shader_display_transform.glsl index 04e96e8ed3c..9787398e2ae 100644 --- a/intern/opencolorio/gpu_shader_display_transform.glsl +++ b/intern/opencolorio/gpu_shader_display_transform.glsl @@ -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 { diff --git a/intern/opencolorio/ocio_capi.h b/intern/opencolorio/ocio_capi.h index 9ba2d8fb8f9..5670b37f892 100644 --- a/intern/opencolorio/ocio_capi.h +++ b/intern/opencolorio/ocio_capi.h @@ -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]; diff --git a/intern/opencolorio/ocio_impl_glsl.cc b/intern/opencolorio/ocio_impl_glsl.cc index 99d59c8d989..a80e29a2dec 100644 --- a/intern/opencolorio/ocio_impl_glsl.cc +++ b/intern/opencolorio/ocio_impl_glsl.cc @@ -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); -- cgit v1.2.3