Пример #1
0
            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();
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
            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();
                    }
                }
            }
Пример #5
0
 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();
         }
     }
 }