Skip to content

Instantly share code, notes, and snippets.

@mendes5
Created July 28, 2023 19:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mendes5/88faea02803d692036dfc9f9a01c30fd to your computer and use it in GitHub Desktop.
Save mendes5/88faea02803d692036dfc9f9a01c30fd to your computer and use it in GitHub Desktop.
const MAX_HEAP_SIZE = 5000;
let HEAP_BASE = 0;
const HEAP = new ArrayBuffer(MAX_HEAP_SIZE);
const seal = () => HEAP.slice(0, HEAP_BASE);
const reset = () => {
HEAP_BASE = 0;
new Uint8Array(HEAP).fill(0);
}
const int = (x) => {
const view = new Int32Array(HEAP, HEAP_BASE, 1);
view.set([x]);
HEAP_BASE += view.byteLength;
return {
view,
get value() {
return view[0];
},
set value(newValue) {
return (view[0] = newValue);
},
};
};
const uint = (x) => {
const view = new Uint32Array(HEAP, HEAP_BASE, 1);
HEAP_BASE += view.byteLength;
view.set([x]);
return {
view,
get value() {
return view[0];
},
set value(newValue) {
return (view[0] = newValue);
},
};
};
const float = (x) => {
const view = new Float32Array(HEAP, HEAP_BASE, 1);
view.set([x]);
HEAP_BASE += view.byteLength;
return {
view,
get value() {
return view[0];
},
set value(newValue) {
return (view[0] = newValue);
},
};
};
const ivec2 = (x, y) => {
const view = new Int32Array(HEAP, HEAP_BASE, 2);
view.set([x, y]);
HEAP_BASE += view.byteLength;
return {
view,
get value() {
return view[0];
},
set value(newValue) {
return (view[0] = newValue);
},
};
};
const uvec2 = (x, y) => {
const view = new Uint32Array(HEAP, HEAP_BASE, 2);
view.set([x, y]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
}
}
};
const fvec2 = (x, y) => {
const view = new Float32Array(HEAP, HEAP_BASE, 2);
view.set([x, y]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
}
}
};
const ivec3 = (x, y, z) => {
const view = new Int32Array(HEAP, HEAP_BASE, 3);
view.set([x, y, z]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
},
get z() {
return view[2];
},
set z(z) {
return view[2] = z;
},
}
};
const uvec3 = (x, y, z) => {
const view = new Uint32Array(HEAP, HEAP_BASE, 3);
view.set([x, y, z]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
},
get z() {
return view[2];
},
set z(z) {
return view[2] = z;
},
}
};
const fvec3 = (x, y, z) => {
const view = new Float32Array(HEAP, HEAP_BASE, 3);
view.set([x, y, z]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
},
get z() {
return view[2];
},
set z(z) {
return view[2] = z;
},
}
};
const ivec4 = (x, y, z, w) => {
const view = new Int32Array(HEAP, HEAP_BASE, 4);
view.set([x, y, z, w]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
},
get z() {
return view[2];
},
set z(z) {
return view[2] = z;
},
get w() {
return view[4];
},
set w(w) {
return view[4] = w;
},
}
};
const uvec4 = (x, y, z, w) => {
const view = new Uint32Array(HEAP, HEAP_BASE, 4);
view.set([x, y, z, w]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
},
get z() {
return view[2];
},
set z(z) {
return view[2] = z;
},
get w() {
return view[4];
},
set w(w) {
return view[4] = w;
},
}
};
const fvec4 = (x, y, z, w) => {
const view = new Float32Array(HEAP, HEAP_BASE, 4);
view.set([x, y, z, w]);
HEAP_BASE += view.byteLength;
return {
view,
get x() {
return view[0];
},
set x(x) {
return view[0] = x;
},
get y() {
return view[1];
},
set y(y) {
return view[1] = y;
},
get z() {
return view[2];
},
set z(z) {
return view[2] = z;
},
get w() {
return view[4];
},
set w(w) {
return view[4] = w;
},
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment