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:
Diffstat (limited to 'source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl')
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl33
1 files changed, 33 insertions, 0 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl
new file mode 100644
index 00000000000..514409f7fdf
--- /dev/null
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_float_curve.glsl
@@ -0,0 +1,33 @@
+/* ext is vec4(in_x, in_dy, out_x, out_dy). */
+float curve_float_extrapolate(float x, float y, vec4 ext)
+{
+ 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 curve_float(float fac,
+ float vec,
+ sampler1DArray curvemap,
+ float layer,
+ float range,
+ vec4 ext,
+ out float outvec)
+{
+ float xyz_min = ext.x;
+ vec = RANGE_RESCALE(vec, xyz_min, range);
+
+ outvec = texture(curvemap, vec2(vec, layer)).x;
+
+ outvec = curve_float_extrapolate(vec, outvec, ext);
+
+ outvec = mix(vec, outvec, fac);
+}