public override void DoWork() { ProfilerShort.Begin("MyPrecalcJobPhysicsBatch.DoWork"); try { IMyStorage storage = m_targetPhysics.m_voxelMap.Storage; foreach (var cell in CellBatch) { if (m_isCancelled) { break; } var geometryData = m_targetPhysics.CreateMesh(storage, cell); if (m_isCancelled) { break; } if (!MyIsoMesh.IsEmpty(geometryData)) { var meshShape = m_targetPhysics.CreateShape(geometryData); m_newShapes.Add(cell, meshShape); } else { m_newShapes.Add(cell, (HkBvCompressedMeshShape)HkShape.Empty); } } } finally { ProfilerShort.End(); } }
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(); }
public override void DoWork() { ProfilerShort.Begin("MyPrecalcJobPhysicsPrefetch.DoWork"); try { if (m_isCancelled) { return; } var geometryData = m_args.TargetPhysics.CreateMesh(m_args.Storage, m_args.GeometryCell); if (m_isCancelled) { return; } if (!MyIsoMesh.IsEmpty(geometryData)) { m_result = m_args.TargetPhysics.CreateShape(geometryData); } } finally { 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(); }
private void RequestShapeBlockingInternal(int x, int y, int z, out HkShape shape, out HkReferencePolicy refPolicy, bool lod1physics) { ProfilerShort.Begin("MyVoxelPhysicsBody.RequestShapeBlocking"); if (!m_bodiesInitialized) { CreateRigidBodies(); } int lod = lod1physics ? 1 : 0; var cellCoord = new MyCellCoord(lod, new Vector3I(x, y, z)); shape = 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); if (m_voxelMap.MarkedForClose) { ProfilerShort.End(); return; } if (MyDebugDrawSettings.DEBUG_DRAW_REQUEST_SHAPE_BLOCKING) { BoundingBoxD aabb; MyVoxelCoordSystems.GeometryCellCoordToWorldAABB(m_voxelMap.PositionLeftBottomCorner, ref cellCoord, out aabb); MyRenderProxy.DebugDrawAABB(aabb, lod1physics ? Color.Yellow : Color.Red, 1, 1, true); } ProfilerShort.Begin("Generating geometry"); MyIsoMesh geometryData = CreateMesh(m_voxelMap.Storage, cellCoord); ProfilerShort.End(); if (!MyIsoMesh.IsEmpty(geometryData)) { ProfilerShort.Begin("Shape from geometry"); shape = CreateShape(geometryData, true); shape.AddReference(); var args = new MyPrecalcJobPhysicsPrefetch.Args() { GeometryCell = cellCoord, TargetPhysics = this, Tracker = m_workTracker, SimpleShape = shape }; MyPrecalcJobPhysicsPrefetch.Start(args); m_needsShapeUpdate = true; ProfilerShort.End(); } ProfilerShort.End(); }
public override void DoWork() { ProfilerShort.Begin("MyPrecalcJobPhysicsPrefetch.DoWork"); //try { if (m_isCancelled) { ProfilerShort.End(); return; } if (m_args.Storage != null) { var geometryData = m_args.TargetPhysics.CreateMesh(m_args.Storage, m_args.GeometryCell); if (m_isCancelled) { ProfilerShort.End(); return; } if (!MyIsoMesh.IsEmpty(geometryData)) { m_result = m_args.TargetPhysics.CreateShape(geometryData); } } else { m_result = m_args.TargetPhysics.BakeCompressedMeshShape((HkSimpleMeshShape)m_args.SimpleShape); m_args.SimpleShape.RemoveReference(); } } //finally { ProfilerShort.End(); } }