updated to track changing PR for direct mesh access

This commit is contained in:
Stewart Allen 2022-10-25 14:48:06 -04:00
commit 22242a31ff

View file

@ -34,7 +34,7 @@ const CSG = {
throw "missing one or more meshes"; throw "missing one or more meshes";
} }
const result = Module[op](...args); const result = Module[op](...args);
const output = result.getMesh({ mode: 2 }); const output = result.getMesh({ normal: () => undefined });
const errors = [ ...args, result ].map(m => m.status().value); const errors = [ ...args, result ].map(m => m.status().value);
for (let m of [ ...args, result ]) { for (let m of [ ...args, result ]) {
m.delete(); m.delete();
@ -47,26 +47,36 @@ const CSG = {
toPositionArray(mesh) { toPositionArray(mesh) {
const { vertPos, triVerts, vertex, index } = mesh; const { vertPos, triVerts, vertex, index } = mesh;
if (vertex) { if (vertex && index) {
return vertex; const vertices = new Float32Array(index.length * 3);
for (let p=0, i=0, l=index.length; i<l; i++) {
let vi = index[i] * 3;
vertices[p++] = vertex[vi++];
vertices[p++] = vertex[vi++];
vertices[p++] = vertex[vi++];
}
return vertices;
} }
const vertices = new Float32Array(triVerts.length * 9); if (vertPos && triVerts) {
for (let i = 0, t = 0, l = triVerts.length; t < l; t++) { const vertices = new Float32Array(triVerts.length * 9);
let tri = triVerts[t]; for (let i = 0, t = 0, l = triVerts.length; t < l; t++) {
let vert = vertPos[tri[0]]; // X let tri = triVerts[t];
vertices[i++] = vert[0]; let vert = vertPos[tri[0]]; // X
vertices[i++] = vert[1]; vertices[i++] = vert[0];
vertices[i++] = vert[2]; vertices[i++] = vert[1];
vert = vertPos[tri[1]]; // Y vertices[i++] = vert[2];
vertices[i++] = vert[0]; vert = vertPos[tri[1]]; // Y
vertices[i++] = vert[1]; vertices[i++] = vert[0];
vertices[i++] = vert[2]; vertices[i++] = vert[1];
vert = vertPos[tri[2]]; // Z vertices[i++] = vert[2];
vertices[i++] = vert[0]; vert = vertPos[tri[2]]; // Z
vertices[i++] = vert[1]; vertices[i++] = vert[0];
vertices[i++] = vert[2]; vertices[i++] = vert[1];
vertices[i++] = vert[2];
}
return vertices;
} }
return vertices; throw "mesh missing required fields";
}, },
fromPositionArray(pos) { fromPositionArray(pos) {
@ -132,23 +142,17 @@ Module.onRuntimeInitialized = () => {
console.log({ console.log({
c, c,
cm: c.getMesh(), cm: c.getMesh(),
cm0: c.getMesh({ normal: false, mode: 0 }), cmd: c.getMesh({ normal: () => undefined }),
cm1: c.getMesh({ normal: false, mode: 1 }), cmdn: c.getMesh({})
cm2: c.getMesh({ normal: false, mode: 2 }),
cmn0: c.getMesh({ normal: true, mode: 0 }),
cmn1: c.getMesh({ normal: true, mode: 1 }),
cmn2: c.getMesh({ normal: true, mode: 2 })
}); });
let l = 5000; let l = 1000;
let s = Module.sphere(10, 100); let s = Module.sphere(10, 100);
let sm = s.getMesh(); let sm = s.getMesh();
console.log({ console.log({
s, s,
sm, sm,
md0: s.getMesh({ mode: 0 }), smd: s.getMesh({}),
md1: s.getMesh({ mode: 1 }),
md2: s.getMesh({ mode: 2 }),
}); });
console.time('getMesh'); console.time('getMesh');
@ -156,15 +160,11 @@ Module.onRuntimeInitialized = () => {
console.timeEnd('getMesh'); console.timeEnd('getMesh');
console.time(`getMeshDirect`); console.time(`getMeshDirect`);
for (let i=0; i<l; i++) s.getMesh({ mode: 0 }); for (let i=0; i<l; i++) s.getMesh({ normal: () => undefined });
console.timeEnd(`getMeshDirect`); console.timeEnd(`getMeshDirect`);
console.time(`getMeshDirect`); console.time(`getMeshDirect`);
for (let i=0; i<l; i++) s.getMesh({ mode: 1 }); for (let i=0; i<l; i++) s.getMesh({});
console.timeEnd(`getMeshDirect`);
console.time(`getMeshDirect`);
for (let i=0; i<l; i++) s.getMesh({ mode: 2 });
console.timeEnd(`getMeshDirect`); console.timeEnd(`getMeshDirect`);
} }
}; };