updated to track changing PR for direct mesh access
This commit is contained in:
parent
d61600fbee
commit
22242a31ff
1 changed files with 35 additions and 35 deletions
|
|
@ -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`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue