wip
This commit is contained in:
+97
-102
@@ -12,51 +12,51 @@
|
||||
// BASICS
|
||||
|
||||
float istep(float x, float y) {
|
||||
return 1 - step(x, y);
|
||||
return 1. - step(x, y);
|
||||
}
|
||||
|
||||
float estep(float x, float y) {
|
||||
return smoothstep(x - 0.0001, x + 0.0001, y);
|
||||
return smoothstep(x - .0001, x + .0001, y);
|
||||
}
|
||||
|
||||
float iestep(float x, float y) {
|
||||
return 1 - estep(x, y);
|
||||
return 1. - estep(x, y);
|
||||
}
|
||||
|
||||
float ease(float x) {
|
||||
return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5;
|
||||
return .5 - cos(max(min(x, 1.), 0.) * PI) * .5;
|
||||
}
|
||||
|
||||
vec2 ease(vec2 x) {
|
||||
return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5;
|
||||
return .5 - cos(max(min(x, 1.), 0.) * PI) * .5;
|
||||
}
|
||||
|
||||
vec3 ease(vec3 x) {
|
||||
return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5;
|
||||
return .5 - cos(max(min(x, 1.), 0.) * PI) * .5;
|
||||
}
|
||||
|
||||
float saw(float x) {
|
||||
return abs(mod(x + 1, 2) - 1);
|
||||
return abs(mod(x + 1., 2.) - 1.);
|
||||
}
|
||||
|
||||
vec2 saw(vec2 x) {
|
||||
return abs(mod(x + 1, 2) - 1);
|
||||
return abs(mod(x + 1., 2.) - 1.);
|
||||
}
|
||||
|
||||
vec3 saw(vec3 x) {
|
||||
return abs(mod(x + 1, 2) - 1);
|
||||
return abs(mod(x + 1., 2.) - 1.);
|
||||
}
|
||||
|
||||
float cmod(float x, float k) {
|
||||
return mod(x + k * 0.5, k) - k * 0.5;
|
||||
return mod(x + k * .5, k) - k * .5;
|
||||
}
|
||||
|
||||
vec2 cmod(vec2 x, float k) {
|
||||
return mod(x + k * 0.5, k) - k * 0.5;
|
||||
return mod(x + k * .5, k) - k * .5;
|
||||
}
|
||||
|
||||
vec3 cmod(vec3 x, float k) {
|
||||
return mod(x + k * 0.5, k) - k * 0.5;
|
||||
return mod(x + k * .5, k) - k * .5;
|
||||
}
|
||||
|
||||
// COLORS
|
||||
@@ -71,9 +71,9 @@ vec3 col(float x) {
|
||||
|
||||
vec3 shift(vec3 c, float f) {
|
||||
return vec3(
|
||||
c.x * (1 - f) + c.y * f,
|
||||
c.y * (1 - f) + c.z * f,
|
||||
c.z * (1 - f) + c.x * f
|
||||
c.x * (1. - f) + c.y * f,
|
||||
c.y * (1. - f) + c.z * f,
|
||||
c.z * (1. - f) + c.x * f
|
||||
);
|
||||
}
|
||||
|
||||
@@ -82,40 +82,40 @@ vec3 shift3(vec3 c, float f) {
|
||||
}
|
||||
|
||||
vec3 mix3(vec3 c1, vec3 c2, vec3 c3, float x) {
|
||||
return istep(0.5, x) * mix(c1, c2, x * 2)
|
||||
+ step(0.5, x) * mix(c2, c3, x * 2 - 1);
|
||||
return istep(.5, x) * mix(c1, c2, x * 2.)
|
||||
+ step(.5, x) * mix(c2, c3, x * 2. - 1.);
|
||||
}
|
||||
|
||||
vec3 mix4(vec3 c1, vec3 c2, vec3 c3, vec3 c4, float x) {
|
||||
return istep(0.333, x) * mix(c1, c2, x * 3)
|
||||
+ step(0.333, x) * istep(0.667, x) * mix(c2, c3, x * 3 - 1)
|
||||
+ step(0.667, x) * mix(c3, c4, x * 3 - 2);
|
||||
return istep(.333, x) * mix(c1, c2, x * 3.)
|
||||
+ step(.333, x) * istep(.667, x) * mix(c2, c3, x * 3. - 1.)
|
||||
+ step(.667, x) * mix(c3, c4, x * 3. - 2.);
|
||||
;
|
||||
}
|
||||
|
||||
vec3 mix5(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, float x) {
|
||||
return istep(0.25, x) * mix(c1, c2, x * 4)
|
||||
+ step(0.25, x) * istep(0.5, x) * mix(c2, c3, x * 4 - 1)
|
||||
+ step(0.5, x) * istep(0.75, x) * mix(c3, c4, x * 4 - 2)
|
||||
+ step(0.75, x) * mix(c4, c5, x * 4 - 3);
|
||||
return istep(.25, x) * mix(c1, c2, x * 4.)
|
||||
+ step(.25, x) * istep(.5, x) * mix(c2, c3, x * 4. - 1.)
|
||||
+ step(.5, x) * istep(.75, x) * mix(c3, c4, x * 4. - 2.)
|
||||
+ step(.75, x) * mix(c4, c5, x * 4. - 3.);
|
||||
}
|
||||
|
||||
vec3 mix6(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, vec3 c6, float x) {
|
||||
return istep(0.2, x) * mix(c1, c2, x * 5)
|
||||
+ step(0.2, x) * istep(0.4, x) * mix(c2, c3, x * 5 - 1)
|
||||
+ step(0.4, x) * istep(0.6, x) * mix(c3, c4, x * 5 - 2)
|
||||
+ step(0.6, x) * istep(0.8, x) * mix(c4, c5, x * 5 - 3)
|
||||
+ step(0.8, x) * mix(c5, c6, x * 5 - 4);
|
||||
return istep(.2, x) * mix(c1, c2, x * 5)
|
||||
+ step(.2, x) * istep(.4, x) * mix(c2, c3, x * 5. - 1.)
|
||||
+ step(.4, x) * istep(.6, x) * mix(c3, c4, x * 5. - 2.)
|
||||
+ step(.6, x) * istep(.8, x) * mix(c4, c5, x * 5. - 3.)
|
||||
+ step(.8, x) * mix(c5, c6, x * 5. - 4.);
|
||||
}
|
||||
|
||||
float mean(vec3 v)
|
||||
{
|
||||
return v.x * 0.3333 + v.y * 0.3333 + v.z * 0.3333;
|
||||
return v.x * .3333 + v.y * .3333 + v.z * .3333;
|
||||
}
|
||||
|
||||
float mean(vec4 v)
|
||||
{
|
||||
return v.x * 0.3333 + v.y * 0.3333 + v.z * 0.3333;
|
||||
return v.x * .3333 + v.y * .3333 + v.z * .3333;
|
||||
}
|
||||
|
||||
// OTHER
|
||||
@@ -130,13 +130,13 @@ mat2 rot(float angle) {
|
||||
// EFFECTS
|
||||
|
||||
vec2 lens(vec2 uv, float limit, float power) {
|
||||
return uv * (1 + limit + length(uv * power));
|
||||
return uv * (1. + limit + length(uv * power));
|
||||
}
|
||||
|
||||
vec2 kal(vec2 uv, float n) {
|
||||
float t = atan(uv.y, uv.x) + PI * 0.5;
|
||||
float q = 3.0 / (2.0 * PI);
|
||||
t = abs(mod(t + PI / (n), 2 * PI / n) - PI / (n));
|
||||
float t = atan(uv.y, uv.x) + PI * .5;
|
||||
float q = 3. / (2. * PI);
|
||||
t = abs(mod(t + PI / (n), 2. * PI / n) - PI / (n));
|
||||
return length(uv) * vec2(
|
||||
cos(t),
|
||||
sin(t)
|
||||
@@ -144,8 +144,8 @@ vec2 kal(vec2 uv, float n) {
|
||||
}
|
||||
|
||||
vec2 kal2(vec2 uv, float n) {
|
||||
float t = atan(uv.y, uv.x) + PI * 0.5;
|
||||
float t2 = abs(mod(t + PI / n, 2 * PI / n) - PI / n);
|
||||
float t = atan(uv.y, uv.x) + PI * .5;
|
||||
float t2 = abs(mod(t + PI / n, 2. * PI / n) - PI / n);
|
||||
return length(uv) * vec2(
|
||||
cos(t2),
|
||||
sin(t2)
|
||||
@@ -156,27 +156,27 @@ vec2 kal2(vec2 uv, float n) {
|
||||
|
||||
float noise(vec2 n)
|
||||
{
|
||||
const vec2 d = vec2(0, 1);
|
||||
const vec2 d = vec2(0., 1.);
|
||||
vec2 b = floor(n);
|
||||
vec2 f = fract(n);
|
||||
f *= f * (3 - 2 * f);
|
||||
f *= f * (3. - 2. * f);
|
||||
return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);
|
||||
}
|
||||
|
||||
float noise_f(vec2 n, int f)
|
||||
{
|
||||
float o = noise(n) / 2;
|
||||
o += mix(o, noise(n * 2), f > 1 ? 1 : 0) / 4;
|
||||
o += mix(o, noise(n * 4), f > 2 ? 1 : 0) / 8;
|
||||
o += mix(o, noise(n * 8), f > 3 ? 1 : 0) / 16;
|
||||
o += mix(o, noise(n * 16), f > 4 ? 1 : 0) / 32;
|
||||
float o = noise(n) * .5;
|
||||
o += mix(o, noise(n * 2.), f > 1. ? 1. : 0.) * .25;
|
||||
o += mix(o, noise(n * 4.), f > 2. ? 1. : 0.) * .125;
|
||||
o += mix(o, noise(n * 8.), f > 3. ? 1. : 0.) * .0625;
|
||||
o += mix(o, noise(n * 16.), f > 4. ? 1. : 0.) * .03125;
|
||||
return o;
|
||||
}
|
||||
|
||||
// VORONOI
|
||||
|
||||
float v_index(vec2 uv) {
|
||||
return floor(uv.x) + floor(uv.y) * 45;
|
||||
return floor(uv.x) + floor(uv.y) * 45.;
|
||||
}
|
||||
|
||||
vec2 v_pos(float i, int seed, float time) {
|
||||
@@ -184,10 +184,10 @@ vec2 v_pos(float i, int seed, float time) {
|
||||
float iTimeV = time - iTimeId;
|
||||
|
||||
float x0 = rand(i + seed + iTimeId);
|
||||
float y0 = rand(i + seed + 10 + iTimeId);
|
||||
float y0 = rand(i + seed + 10. + iTimeId);
|
||||
|
||||
float x1 = rand(i + seed + iTimeId + 1);
|
||||
float y1 = rand(i + seed + 10 + iTimeId + 1);
|
||||
float x1 = rand(i + seed + iTimeId + 1.);
|
||||
float y1 = rand(i + seed + 10. + iTimeId + 1.);
|
||||
|
||||
return vec2(
|
||||
mix(x0, x1, ease(ease(iTimeV))),
|
||||
@@ -196,12 +196,13 @@ vec2 v_pos(float i, int seed, float time) {
|
||||
}
|
||||
|
||||
vec4 voronoi(vec2 uv, float dist, int seed, float time) {
|
||||
vec4 o = vec4(0, 0, 2, 0);
|
||||
vec4 t = vec4(0, 0, 2, 0);
|
||||
vec4 o = vec4(0., 0., 2., 0.);
|
||||
vec4 t = vec4(0., 0., 2., 0.);
|
||||
float d, i;
|
||||
vec2 uv2, p;
|
||||
for (int dx = -1; dx <= 1; dx++) {
|
||||
for (int dy = -1; dy <= 1; dy++) {
|
||||
int dx, dy;
|
||||
for (dx = -1; dx <= 1; dx++) {
|
||||
for (dy = -1; dy <= 1; dy++) {
|
||||
uv2 = vec2(floor(uv.x) + dx, floor(uv.y) + dy);
|
||||
i = v_index(uv2);
|
||||
p = uv2 + v_pos(i, seed, time) * dist;
|
||||
@@ -224,21 +225,21 @@ float circle(vec2 uv, vec2 c, float size) {
|
||||
}
|
||||
|
||||
float h_circle(vec2 uv, vec2 c, float size, float k) {
|
||||
return circle(uv, c, size + k * 0.5) - circle(uv, c, size - k * 0.5);
|
||||
return circle(uv, c, size + k * .5) - circle(uv, c, size - k * .5);
|
||||
}
|
||||
|
||||
float stripe(float x, float k1, float k2)
|
||||
{
|
||||
return k2 > k1 ? (1 - step(x, k1)) * (step(x, k2)) : ((1 - step(x, k2)) * (step(x, k1)));
|
||||
return k2 > k1 ? (1. - step(x, k1)) * (step(x, k2)) : ((1. - step(x, k2)) * (step(x, k1)));
|
||||
}
|
||||
|
||||
float capsule(vec2 uv, float r, float d, float a)
|
||||
{
|
||||
uv *= rot(a);
|
||||
float f1 = step(uv.x, r) * step(-uv.x, r) * step(uv.y, d - r) * step(-uv.y, d - r);
|
||||
float f2 = step(length(uv - vec2(0, d - r)), r);
|
||||
float f3 = step(length(uv + vec2(0, d - r)), r);
|
||||
return min(1, f1 + f2 + f3);
|
||||
float f2 = step(length(uv - vec2(0., d - r)), r);
|
||||
float f3 = step(length(uv + vec2(0., d - r)), r);
|
||||
return min(1., f1 + f2 + f3);
|
||||
}
|
||||
|
||||
float rect(vec2 uv, vec2 c, vec2 size) {
|
||||
@@ -247,7 +248,7 @@ float rect(vec2 uv, vec2 c, vec2 size) {
|
||||
}
|
||||
|
||||
float h_rect(vec2 uv, vec2 c, vec2 size, float k) {
|
||||
return rect(uv, c, size + k * 0.5) - rect(uv, c, size - k * 0.5);
|
||||
return rect(uv, c, size + k * .5) - rect(uv, c, size - k * .5);
|
||||
}
|
||||
|
||||
float line(vec2 uv, vec2 p1, vec2 p2, float thick) {
|
||||
@@ -261,33 +262,27 @@ float line(vec2 uv, vec2 p1, vec2 p2, float thick) {
|
||||
uv.y / p.y
|
||||
);
|
||||
|
||||
return step(k.x, thick * 0.5)
|
||||
* step(-k.x, thick * 0.5)
|
||||
* step(k.y, 1)
|
||||
* (1 - step(k.y, 0));
|
||||
return step(k.x, thick * .5)
|
||||
* step(-k.x, thick * .5)
|
||||
* step(k.y, 1.)
|
||||
* (1. - step(k.y, 0.));
|
||||
} else {
|
||||
k = vec2(
|
||||
uv.x / p.x,
|
||||
uv.y - p.y * uv.x / p.x
|
||||
);
|
||||
|
||||
return step(k.y, thick * 0.5)
|
||||
* step(-k.y, thick * 0.5)
|
||||
* step(k.x, 1)
|
||||
* (1 - step(k.x, 0));
|
||||
return step(k.y, thick * .5)
|
||||
* step(-k.y, thick * .5)
|
||||
* step(k.x, 1.)
|
||||
* (1. - step(k.x, 0.));
|
||||
}
|
||||
}
|
||||
|
||||
const mat2x2 ISOMETRIC_MATRIX = {
|
||||
{
|
||||
0.5,
|
||||
1
|
||||
},
|
||||
{
|
||||
0.5,
|
||||
-1
|
||||
}
|
||||
};
|
||||
const mat2x2 ISOMETRIC_MATRIX = mat2x2(
|
||||
.5, 1.,
|
||||
.5, -1.
|
||||
);
|
||||
|
||||
vec2 iso(vec2 p) {
|
||||
return p * ISOMETRIC_MATRIX;
|
||||
@@ -308,14 +303,14 @@ vec2 iso(vec3 uv) {
|
||||
|
||||
vec4 reframe(sampler2D tex, vec2 uv)
|
||||
{
|
||||
uv = uv * vec2(iResolution.y / iResolution.x, 1) + .5;
|
||||
uv = uv * vec2(iResolution.y / iResolution.x, 1.) + .5;
|
||||
uv = saw(uv);
|
||||
return texture(tex, uv);
|
||||
}
|
||||
|
||||
vec4 reframe_b(sampler2D tex, vec2 uv)
|
||||
{
|
||||
uv = uv * vec2(iResolution.y / iResolution.x, 1) + .5;
|
||||
uv = uv * vec2(iResolution.y / iResolution.x, 1.) + .5;
|
||||
return texture(tex, uv);
|
||||
}
|
||||
|
||||
@@ -323,7 +318,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm)
|
||||
{
|
||||
int x, y;
|
||||
vec2 offset;
|
||||
vec4 sum = vec4(0);
|
||||
vec4 sum = vec4(0.);
|
||||
for (y = -1; y <= 1; ++y) {
|
||||
for (x = -1; x <= 1; ++x) {
|
||||
offset = vec2(x, y) * spm;
|
||||
@@ -339,7 +334,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm)
|
||||
|
||||
float gaussian_weight(float x, float sigma)
|
||||
{
|
||||
return exp(-(x * x) / (2.0 * sigma * sigma));
|
||||
return exp(-(x * x) / (2. * sigma * sigma));
|
||||
}
|
||||
|
||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma, float bloom)
|
||||
@@ -347,8 +342,8 @@ vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma
|
||||
int x, y;
|
||||
vec2 offset;
|
||||
float w;
|
||||
vec4 sum = vec4(0);
|
||||
float weight_sum = 0;
|
||||
vec4 sum = vec4(0.);
|
||||
float weight_sum = 0.;
|
||||
for (y = -kernel_size; y <= kernel_size; ++y) {
|
||||
for (x = -kernel_size; x <= kernel_size; ++x) {
|
||||
offset = vec2(x, y) * spm;
|
||||
@@ -362,17 +357,17 @@ vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma
|
||||
|
||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma)
|
||||
{
|
||||
return gauss(tex, uv, kernel_size, spm, sigma, 1.0);
|
||||
return gauss(tex, uv, kernel_size, spm, sigma, 1.);
|
||||
}
|
||||
|
||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm)
|
||||
{
|
||||
return gauss(tex, uv, kernel_size, spm, 2.0);
|
||||
return gauss(tex, uv, kernel_size, spm, 2.);
|
||||
}
|
||||
|
||||
vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size)
|
||||
{
|
||||
return gauss(tex, uv, kernel_size, 1 / max(iResolution.x, iResolution.y));
|
||||
return gauss(tex, uv, kernel_size, 1. / max(iResolution.x, iResolution.y));
|
||||
}
|
||||
|
||||
vec4 gauss(sampler2D tex, vec2 uv)
|
||||
@@ -383,23 +378,23 @@ vec4 gauss(sampler2D tex, vec2 uv)
|
||||
float dither(vec2 uv, float x)
|
||||
{
|
||||
bool o = false;
|
||||
o = o || x * 16 >= 1 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 0;
|
||||
o = o || x * 16 >= 2 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 2;
|
||||
o = o || x * 16 >= 3 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 2;
|
||||
o = o || x * 16 >= 4 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 0;
|
||||
o = o || x * 16 >= 5 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 1;
|
||||
o = o || x * 16 >= 6 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 3;
|
||||
o = o || x * 16 >= 7 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 3;
|
||||
o = o || x * 16 >= 8 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 1;
|
||||
o = o || x * 16 >= 9 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 0;
|
||||
o = o || x * 16 >= 10 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 2;
|
||||
o = o || x * 16 >= 11 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 2;
|
||||
o = o || x * 16 >= 12 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 0;
|
||||
o = o || x * 16 >= 13 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 1;
|
||||
o = o || x * 16 >= 14 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 3;
|
||||
o = o || x * 16 >= 15 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 3;
|
||||
o = o || x * 16 >= 16 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 1;
|
||||
return o ? 1 : 0;
|
||||
o = o || x * 16. >= 1. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 0.;
|
||||
o = o || x * 16. >= 2. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 2.;
|
||||
o = o || x * 16. >= 3. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 2.;
|
||||
o = o || x * 16. >= 4. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 0.;
|
||||
o = o || x * 16. >= 5. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 1.;
|
||||
o = o || x * 16. >= 6. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 3.;
|
||||
o = o || x * 16. >= 7. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 3.;
|
||||
o = o || x * 16. >= 8. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 1.;
|
||||
o = o || x * 16. >= 9. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 0.;
|
||||
o = o || x * 16. >= 10. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 2.;
|
||||
o = o || x * 16. >= 11. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 2.;
|
||||
o = o || x * 16. >= 12. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 0.;
|
||||
o = o || x * 16. >= 13. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 1.;
|
||||
o = o || x * 16. >= 14. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 3.;
|
||||
o = o || x * 16. >= 15. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 3.;
|
||||
o = o || x * 16. >= 16. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 1.;
|
||||
return o ? 1. : 0.;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user