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); }
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); }