lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
42 lines • 1.64 kB
JavaScript
import computeMergedPxVertices from "./computeMergedPxVertices";
import { physxPtr } from "../../pointers/physxPtr";
import cookConvexGeometry from "./cookConvexGeometry";
const pxGeometryCache = new Map();
export default (src, manager) => {
if (pxGeometryCache.has(src))
return pxGeometryCache.get(src);
const { PxBoundedData, Vector_PxU32, PxTriangleMeshDesc, getCooking, getInsertionCallback, PxTriangleMeshGeometry, destroy } = physxPtr[0];
const [pointVector, count, index] = computeMergedPxVertices(manager);
if (!index) {
pointVector.clear();
destroy(pointVector);
return cookConvexGeometry(src, manager);
}
const { array } = index;
const indexVector = new Vector_PxU32();
for (let i = 0; i < index.count; i++)
indexVector.push_back(array[i]);
const points = new PxBoundedData();
points.count = count;
points.stride = 12;
points.data = pointVector.data();
const triangles = new PxBoundedData();
triangles.count = indexVector.size() / 3;
triangles.stride = 12;
triangles.data = indexVector.data();
const desc = new PxTriangleMeshDesc();
desc.points = points;
desc.triangles = triangles;
const triangleMesh = getCooking().createTriangleMesh(desc, getInsertionCallback());
const pxGeometry = new PxTriangleMeshGeometry(triangleMesh);
pointVector.clear();
destroy(pointVector);
indexVector.clear();
destroy(indexVector);
destroy(points);
destroy(triangles);
destroy(desc);
pxGeometryCache.set(src, pxGeometry);
return pxGeometry;
};
//# sourceMappingURL=cookTrimeshGeometry.js.map