Skip to content

Commit e6e820c

Browse files
committed
Step, compare, smoothstep and mix.
1 parent 217e5f6 commit e6e820c

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

src/shaders/high_precision.frag

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,4 +737,48 @@ number hp_sinh(number x){
737737

738738
number hp_cosh(number x){
739739
return shift_right(add(hp_exp(x),hp_exp(neg(x))),1);
740+
}
741+
int hp_compare(number a, number b) {
742+
bool a_zero = is_zero(a);
743+
bool b_zero = is_zero(b);
744+
if (a_zero && b_zero) return 0;
745+
746+
if (a.sign != b.sign) {
747+
return (a.sign == 1) ? 1 : -1;
748+
}
749+
750+
int abs_cmp = compare_abs(a, b);
751+
752+
return abs_cmp * a.sign;
753+
}
754+
number hp_step(number edge, number x) {
755+
if (hp_compare(x, edge) >= 0) {
756+
return number_one();
757+
}
758+
return null_number();
759+
}
760+
761+
number hp_mix(number x, number y, number a) {
762+
number diff = sub(y, x);
763+
number scaled_diff = mult(a, diff);
764+
return add(x, scaled_diff);
765+
}
766+
767+
number hp_smoothstep(number edge0, number edge1, number x) {
768+
number t = div(sub(x, edge0), sub(edge1, edge0));
769+
770+
number zero = null_number();
771+
number one = number_one();
772+
if (hp_compare(t, zero) < 0) t = zero;
773+
if (hp_compare(t, one) > 0) t = one;
774+
775+
number t_sq = mult(t, t);
776+
777+
number two = add(one, one);
778+
number three = add(two, one);
779+
780+
number two_t = mult(two, t);
781+
number three_minus_two_t = sub(three, two_t);
782+
783+
return mult(t_sq, three_minus_two_t);
740784
}

0 commit comments

Comments
 (0)