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/gpu/shaders/material
parentddda73b98a9c0a45e4fec667ba4021cec456d030 (diff)
parenteb6cb67ab68679ac80a0f8886879c42cf6953d98 (diff)
Merge branch 'blender-v2.82-release'
Diffstat (limited to 'source/blender/gpu/shaders/material')
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_vector_curves.glsl37
1 files changed, 35 insertions, 2 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_vector_curves.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_vector_curves.glsl
index 35d2e903cf4..63e97e66c90 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_vector_curves.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_vector_curves.glsl
@@ -1,8 +1,41 @@
-void curves_vec(float fac, vec3 vec, sampler1DArray curvemap, float layer, out vec3 outvec)
+/* ext is vec4(in_x, in_dy, out_x, out_dy). */
+float curve_extrapolate(float x, float y, vec4 ext)
{
- vec4 co = vec4(vec * 0.5 + 0.5, layer);
+ if (x < 0.0) {
+ return y + x * ext.y;
+ }
+ else if (x > 1.0) {
+ return y + (x - 1.0) * ext.w;
+ }
+ else {
+ return y;
+ }
+}
+
+#define RANGE_RESCALE(x, min, range) ((x - min) * range)
+
+void curves_vec(float fac,
+ vec3 vec,
+ sampler1DArray curvemap,
+ float layer,
+ vec3 range,
+ vec4 ext_x,
+ vec4 ext_y,
+ vec4 ext_z,
+ out vec3 outvec)
+{
+ vec4 co = vec4(vec, layer);
+
+ vec3 xyz_min = vec3(ext_x.x, ext_y.x, ext_z.x);
+ co.xyz = RANGE_RESCALE(co.xyz, xyz_min, range);
+
outvec.x = texture(curvemap, co.xw).x;
outvec.y = texture(curvemap, co.yw).y;
outvec.z = texture(curvemap, co.zw).z;
+
+ outvec.x = curve_extrapolate(co.x, outvec.r, ext_x);
+ outvec.y = curve_extrapolate(co.y, outvec.g, ext_y);
+ outvec.z = curve_extrapolate(co.z, outvec.b, ext_z);
+
outvec = mix(vec, outvec, fac);
}