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:
authorCampbell Barton <ideasman42@gmail.com>2020-01-28 08:15:38 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-01-28 08:15:38 +0300
commit051d2240655290140343c0e88e886eea0ba70e24 (patch)
tree3544a8e8f203df0ebfa1d8d5d852420eb8e61ff5 /source/blender/nodes
parentddda73b98a9c0a45e4fec667ba4021cec456d030 (diff)
parenteb6cb67ab68679ac80a0f8886879c42cf6953d98 (diff)
Merge branch 'blender-v2.82-release'
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_curves.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_curves.c b/source/blender/nodes/shader/nodes/node_shader_curves.c
index 6292d7b5062..d20b919a7fb 100644
--- a/source/blender/nodes/shader/nodes/node_shader_curves.c
+++ b/source/blender/nodes/shader/nodes/node_shader_curves.c
@@ -64,10 +64,44 @@ static int gpu_shader_curve_vec(GPUMaterial *mat,
float *array, layer;
int size;
- BKE_curvemapping_table_RGBA(node->storage, &array, &size);
+ CurveMapping *cumap = node->storage;
+
+ BKE_curvemapping_table_RGBA(cumap, &array, &size);
GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer);
- return GPU_stack_link(mat, node, "curves_vec", in, out, tex, GPU_constant(&layer));
+ float ext_xyz[3][4];
+ float range_xyz[3];
+
+ for (int a = 0; a < 3; a++) {
+ const CurveMap *cm = &cumap->cm[a];
+ ext_xyz[a][0] = cm->mintable;
+ ext_xyz[a][2] = cm->maxtable;
+ range_xyz[a] = 1.0f / max_ff(1e-8f, cm->maxtable - cm->mintable);
+ /* Compute extrapolation gradients. */
+ if ((cumap->flag & CUMA_EXTEND_EXTRAPOLATE) != 0) {
+ ext_xyz[a][1] = (cm->ext_in[0] != 0.0f) ? (cm->ext_in[1] / (cm->ext_in[0] * range_xyz[a])) :
+ 1e8f;
+ ext_xyz[a][3] = (cm->ext_out[0] != 0.0f) ?
+ (cm->ext_out[1] / (cm->ext_out[0] * range_xyz[a])) :
+ 1e8f;
+ }
+ else {
+ ext_xyz[a][1] = 0.0f;
+ ext_xyz[a][3] = 0.0f;
+ }
+ }
+
+ return GPU_stack_link(mat,
+ node,
+ "curves_vec",
+ in,
+ out,
+ tex,
+ GPU_constant(&layer),
+ GPU_uniform(range_xyz),
+ GPU_uniform(ext_xyz[0]),
+ GPU_uniform(ext_xyz[1]),
+ GPU_uniform(ext_xyz[2]));
}
void register_node_type_sh_curve_vec(void)