private void RequestShapeBlockingInternal(int x, int y, int z, out HkBvCompressedMeshShape shape, out HkReferencePolicy refPolicy, bool lod1physics) { ProfilerShort.Begin("MyVoxelPhysicsBody.RequestShapeBlocking"); const int lod = 0; var cellCoord = new MyCellCoord(lod, new Vector3I(x, y, z)); shape = (HkBvCompressedMeshShape)HkShape.Empty; // shape must take ownership, otherwise shapes created here will leak, since I can't remove reference refPolicy = HkReferencePolicy.TakeOwnership; MyPrecalcComponent.QueueJobCancel(m_workTracker, cellCoord.CoordInLod); if (m_voxelMap.MarkedForClose) { ProfilerShort.End(); return; } //BoundingBoxD aabb; //MyVoxelCoordSystems.GeometryCellCoordToWorldAABB(m_voxelMap.PositionLeftBottomCorner, ref cellCoord.CoordInLod, out aabb); //MyRenderProxy.DebugDrawAABB(aabb, Color.Red, 1, 1, false); ProfilerShort.Begin("Generating geometry"); MyIsoMesh geometryData = CreateMesh(m_voxelMap.Storage, cellCoord.CoordInLod, lod1physics); ProfilerShort.End(); if (!MyIsoMesh.IsEmpty(geometryData)) { ProfilerShort.Begin("Shape from geometry"); shape = CreateShape(geometryData); m_needsShapeUpdate = true; ProfilerShort.End(); } ProfilerShort.End(); }
private void RequestShapeBlocking(int x, int y, int z, out HkBvCompressedMeshShape shape, out HkReferencePolicy refPolicy) { ProfilerShort.Begin("MyVoxelPhysicsBody.RequestShapeBlocking"); const int lod = 0; var cellCoord = new MyCellCoord(lod, new Vector3I(x, y, z)); shape = (HkBvCompressedMeshShape)HkShape.Empty; // shape must take ownership, otherwise shapes created here will leak, since I can't remove reference refPolicy = HkReferencePolicy.TakeOwnership; MyPrecalcComponent.QueueJobCancel(m_workTracker, cellCoord.CoordInLod); if (m_voxelMap.MarkedForClose) { ProfilerShort.End(); return; } ProfilerShort.Begin("Generating geometry"); MyIsoMesh geometryData = CreateMesh(m_voxelMap.Storage, cellCoord.CoordInLod); ProfilerShort.End(); if (!MyIsoMesh.IsEmpty(geometryData)) { ProfilerShort.Begin("Shape from geometry"); shape = CreateShape(geometryData); m_needsShapeUpdate = true; ProfilerShort.End(); } ProfilerShort.End(); }