public void OnGridsCreated(ParallelTasks.WorkData workData) { foreach (var entity in m_resultIDs) { VRage.ModAPI.IMyEntity foundEntity; MyEntityIdentifier.TryGetEntity(entity.EntityId, out foundEntity); if (foundEntity == null) { MyEntityIdentifier.AddEntityWithId(entity); } else { Debug.Fail("Two threads added the same entity"); } } foreach (var grid in m_results) { MyEntities.Add(grid); grid.IsReadyForReplication = true; } while (m_callbacks.Count > 0) { var callback = m_callbacks.Pop(); if (callback != null) { callback(); } } }
public override void DoWork(ParallelTasks.WorkData workData = null) { ProfilerShort.Begin("MyRenderingWorkRecordCommands::DoWork"); foreach (var subwork in m_subworks) { if ((subwork.Begin < subwork.End) || (subwork.List2 != null && subwork.List2.Length > 0)) { subwork.Pass.Begin(); for (int subworkIndex = subwork.Begin; subworkIndex < subwork.End; subworkIndex++) { subwork.Pass.FeedProfiler(subwork.Renderables[subworkIndex].SortKey); subwork.Pass.RecordCommands(subwork.Renderables[subworkIndex].RenderProxy); } if (subwork.List2 != null) { for (int i = 0; i < subwork.List2.Length; i++) { subwork.Pass.RecordCommands(ref subwork.List2[i]); } } subwork.Pass.End(); } } if (m_isDeferred && m_subworks.Count > 0) { m_subworks[0].Pass.RC.Finish(); } ProfilerShort.End(); }
public void CallCreateGridsFromPrefab(ParallelTasks.WorkData workData) { try { MyPrefabManager.Static.CreateGridsFromPrefab(m_results, m_prefabName, m_worldMatrix, m_spawnAtOrigin, m_ignoreMemoryLimits, m_factionId, m_callbacks); } finally { Interlocked.Decrement(ref PendingGrids); } }
public void OnGridsCreated(ParallelTasks.WorkData workData) { foreach (var grid in m_results) { MyEntities.Add(grid); grid.IsReadyForReplication = true; } while (m_callbacks.Count > 0) { var callback = m_callbacks.Pop(); if (callback != null) { callback(); } } }
public void CallCreateGridsFromPrefab(ParallelTasks.WorkData workData) { try { MyEntityIdentifier.LazyInitPerThreadStorage(2048); MyPrefabManager.Static.CreateGridsFromPrefab(m_results, m_prefabName, m_worldMatrix, m_spawnAtOrigin, m_ignoreMemoryLimits, m_factionId, m_callbacks); } finally { m_resultIDs = new List <VRage.ModAPI.IMyEntity>(); MyEntityIdentifier.GetPerThreadEntities(m_resultIDs); MyEntityIdentifier.ClearPerThreadEntities(); Interlocked.Decrement(ref PendingGrids); if (PendingGrids <= 0) { FinishedProcessingGrids.Set(); } } }