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();
    }
Example #2
0
    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();
    }