예제 #1
0
    void UpdateTask(System.Object arg)
    {
        Range r   = (Range)arg;
        int   num = r.end - r.begin;

        Texture tex = m_renderer.m_material.mainTexture;

        for (int i = r.begin; i < r.end; ++i)
        {
            float time = m_instance_time[i] + m_time;
            float e    = 0.75f + Mathf.Sin(time * 10.0f) * 0.25f;
            int   a    = (int)(time * 5.0f) % 16;
            m_instance_color[i] = new Color(1.0f, 1.0f, 1.0f, e);
            m_instance_uv[i]    = BatchRendererUtil.ComputeUVOffset(tex, new Rect(32 * (a % 4), 32 * (a / 4), 32, 32));
        }
        {
            int reserved_index;
            int reserved_num;
            BatchRenderer.InstanceData data = m_renderer.ReserveInstance(num, out reserved_index, out reserved_num);
            System.Array.Copy(m_instance_t, r.begin, data.translation, reserved_index, reserved_num);
            System.Array.Copy(m_instance_color, r.begin, data.color, reserved_index, reserved_num);
            System.Array.Copy(m_instance_uv, r.begin, data.uv_offset, reserved_index, reserved_num);
        }
        Interlocked.Decrement(ref m_num_active_tasks);
    }
예제 #2
0
    void DataTransfer_ReserveAndWrite(Range r)
    {
        int num = r.end - r.begin;
        int reserved_index;
        int reserved_num;

        BatchRenderer.InstanceData data = m_renderer.ReserveInstance(num, out reserved_index, out reserved_num);
        System.Array.Copy(m_instance_t, r.begin, data.translation, reserved_index, reserved_num);
        System.Array.Copy(m_instance_r, r.begin, data.rotation, reserved_index, reserved_num);
        System.Array.Copy(m_instance_s, r.begin, data.scale, reserved_index, reserved_num);
    }