void Update() { m_num_draw = Mathf.Min(m_num_draw, m_instance_t.Length); m_time = Time.realtimeSinceStartup; int num = m_num_draw; if (m_enable_multithread) { for (int i = 0; i < num; i += m_task_block_size) { Interlocked.Increment(ref m_num_active_tasks); ThreadPool.QueueUserWorkItem( UpdateTask, new Range { begin = i, end = Mathf.Min(i + m_task_block_size, num) }); } while (m_num_active_tasks != 0) { } } else { Interlocked.Increment(ref m_num_active_tasks); UpdateTask(new Range { begin = 0, end = num }); } m_renderer.Flush(); }
void Update() { m_num_draw = Mathf.Min(m_num_draw, m_instance_t.Length); m_time = Time.realtimeSinceStartup; int num = m_num_draw; { Interlocked.Increment(ref m_num_active_tasks); UpdateTask(new Range { begin = 0, end = num }); } m_renderer.Flush(); }
void LateUpdate() { while (m_num_active_tasks > 0) { } // wait for tasks complete m_num_active_entities = 0; for (int i = 0; i < m_task_work_data.Length; ++i) { m_num_active_entities += m_task_work_data[i].num_active_entities; } for (int i = 0; i < m_work_data.num_targets; ++i) { if (m_work_data.targets[i].num_hits > 0) { m_work_data.targets[i].collider.m_num_hits = m_work_data.targets[i].num_hits; m_work_data.targets[i].num_hits = 0; } } m_renderer.Flush(); }