Skip to content

Commit

Permalink
feat(shader-ast-js): add div-by-zero guards
Browse files Browse the repository at this point in the history
  • Loading branch information
postspectacular committed Sep 9, 2019
1 parent fddfa85 commit 233528d
Show file tree
Hide file tree
Showing 12 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/ivec2.ts
Expand Up @@ -26,7 +26,7 @@ export const IVEC2: JSBuiltinsIntVec = {
addnv: (a, b) => addNI2([], b, a),
div: (a, b) => divI2([], a, b),
divvn: (a, b) => divNI2([], a, b),
divnv: (a, b) => mulNI2([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulNI2([], b, 1 / a) : [0, 0]),
modi: (a, b) => mod2([], a, b),
modivn: (a, b) => modN2([], a, b),
modinv: (a, b) => mod2([], [a, a], b),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/ivec3.ts
Expand Up @@ -26,7 +26,7 @@ export const IVEC3: JSBuiltinsIntVec = {
addnv: (a, b) => addNI3([], b, a),
div: (a, b) => divI3([], a, b),
divvn: (a, b) => divNI3([], a, b),
divnv: (a, b) => mulNI3([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulNI3([], b, 1 / a) : [0, 0, 0]),
modi: (a, b) => mod3([], a, b),
modivn: (a, b) => modN3([], a, b),
modinv: (a, b) => mod3([], [a, a, a], b),
Expand Down
5 changes: 4 additions & 1 deletion packages/shader-ast-js/src/env/ivec4.ts
Expand Up @@ -26,7 +26,10 @@ export const IVEC4: JSBuiltinsIntVec = {
addnv: (a, b) => addNI4([], b, a),
div: (a, b) => divI4([], a, b),
divvn: (a, b) => divNI4([], a, b),
divnv: (a, b) => mulNI4([], b, 1 / a),
divnv: (a, b) => {
// TODO writing this as w/o return statement causes rollup to hang?!
return a !== 0 ? mulNI4([], b, 1 / a) : [0, 0, 0, 0];
},
modi: (a, b) => mod4([], a, b),
modivn: (a, b) => modN4([], a, b),
modinv: (a, b) => mod4([], [a, a, a, a], b),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/mat2.ts
Expand Up @@ -20,7 +20,7 @@ export const MAT2: JSBuiltinsMat = {
addvn: (a, b) => addN22([], a, b),
dec: (a) => subN22([], a, 1),
div: (a, b) => div22([], a, b),
divnv: (a, b) => mulN22([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulN22([], b, 1 / a) : [0, 0, 0, 0]),
divvn: (a, b) => divN22([], a, b),
inc: (a) => addN22([], a, 1),
mul: (a, b) => mul22([], a, b),
Expand Down
4 changes: 2 additions & 2 deletions packages/shader-ast-js/src/env/mat3.ts
Expand Up @@ -11,7 +11,7 @@ import {
sub33,
subN33
} from "@thi.ng/matrices";
import { neg, vecOf } from "@thi.ng/vectors";
import { neg, vecOf, zeroes } from "@thi.ng/vectors";
import { JSBuiltinsMat } from "../api";

export const MAT3: JSBuiltinsMat = {
Expand All @@ -20,7 +20,7 @@ export const MAT3: JSBuiltinsMat = {
addvn: (a, b) => addN33([], a, b),
dec: (a) => subN33([], a, 1),
div: (a, b) => div33([], a, b),
divnv: (a, b) => mulN33([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulN33([], b, 1 / a) : zeroes(9)),
divvn: (a, b) => divN33([], a, b),
inc: (a) => addN33([], a, 1),
mul: (a, b) => mul33([], a, b),
Expand Down
4 changes: 2 additions & 2 deletions packages/shader-ast-js/src/env/mat4.ts
Expand Up @@ -11,7 +11,7 @@ import {
sub44,
subN44
} from "@thi.ng/matrices";
import { neg, vecOf } from "@thi.ng/vectors";
import { neg, vecOf, zeroes } from "@thi.ng/vectors";
import { JSBuiltinsMat } from "../api";

export const MAT4: JSBuiltinsMat = {
Expand All @@ -20,7 +20,7 @@ export const MAT4: JSBuiltinsMat = {
addvn: (a, b) => addN44([], a, b),
dec: (a) => subN44([], a, 1),
div: (a, b) => div44([], a, b),
divnv: (a, b) => mulN44([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulN44([], b, 1 / a) : zeroes(16)),
divvn: (a, b) => divN44([], a, b),
inc: (a) => addN44([], a, 1),
mul: (a, b) => mul44([], a, b),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/uvec2.ts
Expand Up @@ -26,7 +26,7 @@ export const UVEC2: JSBuiltinsIntVec = {
addnv: (a, b) => addNU2([], b, a),
div: (a, b) => divU2([], a, b),
divvn: (a, b) => divNU2([], a, b),
divnv: (a, b) => mulNU2([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulNU2([], b, 1 / a) : [0, 0]),
modi: (a, b) => mod2([], a, b),
modivn: (a, b) => modN2([], a, b),
modinv: (a, b) => mod2([], [a, a], b),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/uvec3.ts
Expand Up @@ -26,7 +26,7 @@ export const UVEC3: JSBuiltinsIntVec = {
addnv: (a, b) => addNU3([], b, a),
div: (a, b) => divU3([], a, b),
divvn: (a, b) => divNU3([], a, b),
divnv: (a, b) => mulNU3([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulNU3([], b, 1 / a) : [0, 0, 0]),
modi: (a, b) => mod3([], a, b),
modivn: (a, b) => modN3([], a, b),
modinv: (a, b) => mod3([], [a, a, a], b),
Expand Down
5 changes: 4 additions & 1 deletion packages/shader-ast-js/src/env/uvec4.ts
Expand Up @@ -26,7 +26,10 @@ export const UVEC4: JSBuiltinsIntVec = {
addnv: (a, b) => addNU4([], b, a),
div: (a, b) => divU4([], a, b),
divvn: (a, b) => divNU4([], a, b),
divnv: (a, b) => mulNU4([], b, 1 / a),
divnv: (a, b) => {
// TODO writing this as w/o return statement causes rollup to hang?!
return a !== 0 ? mulNU4([], b, 1 / a) : [0, 0, 0, 0];
},
modi: (a, b) => mod4([], a, b),
modivn: (a, b) => modN4([], a, b),
modinv: (a, b) => mod4([], [a, a, a, a], b),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/vec2.ts
Expand Up @@ -67,7 +67,7 @@ export const VEC2: JSBuiltinsVec = {
dFdy: () => ZERO2,
distance: dist,
div: (a, b) => div2([], a, b),
divnv: (a, b) => mulN2([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulN2([], b, 1 / a) : [0, 0]),
divvn: (a, b) => divN2([], a, b),
dot: (a, b) => dot2(a, b),
exp: (a) => exp2([], a),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/vec3.ts
Expand Up @@ -69,7 +69,7 @@ export const VEC3: JSBuiltinsVec3 = {
dFdy: () => ZERO3,
distance: dist,
div: (a, b) => div3([], a, b),
divnv: (a, b) => mulN3([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulN3([], b, 1 / a) : [0, 0, 0]),
divvn: (a, b) => divN3([], a, b),
dot: (a, b) => dot3(a, b),
exp: (a) => exp3([], a),
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-ast-js/src/env/vec4.ts
Expand Up @@ -67,7 +67,7 @@ export const VEC4: JSBuiltinsVec = {
dFdy: () => ZERO4,
distance: dist,
div: (a, b) => div4([], a, b),
divnv: (a, b) => mulN4([], b, 1 / a),
divnv: (a, b) => (a !== 0 ? mulN4([], b, 1 / a) : [0, 0, 0, 0]),
divvn: (a, b) => divN4([], a, b),
dot: (a, b) => dot4(a, b),
exp: (a) => exp4([], a),
Expand Down

0 comments on commit 233528d

Please sign in to comment.