public void Execute(UIRenderBuffer renderBuffer, CommandBuffer commandBuffer) { GetSlotValues(m_Input, m_ValuesTmp); Rect rect = m_Rect[this]; Rect localRect = new Rect(Vector2.zero, rect.size); foreach (var value in m_ValuesTmp) { value.Invoke(new UIEventData() { EventType = UIEventType.Layout, Rect = localRect }); } if (((UIGraphObject)owner.owner).threaded) { waitHandle.Reset(m_ValuesTmp.Count); foreach (var a in m_ValuesTmp) { var a1 = a; ThreadPool.QueueUserWorkItem(c => a1.Invoke((UIEventData)c), new UIEventData() { EventType = UIEventType.PreRepaint, Rect = localRect, RenderBuffer = renderBuffer, WaitHandle = waitHandle }); } waitHandle.WaitAll(); } else { foreach (var action in m_ValuesTmp) { action.Invoke(new UIEventData() { EventType = UIEventType.PreRepaint, Rect = localRect, RenderBuffer = renderBuffer }); } } foreach (var value in m_ValuesTmp) { try { value.Invoke(new UIEventData() { EventType = UIEventType.Repaint, Rect = localRect, RenderBuffer = renderBuffer }); } catch (Exception e) { Debug.LogException(e); } } var matrix = m_Matrix[this] * Matrix4x4.Translate(rect.position); renderBuffer.Populate(commandBuffer, matrix); m_ValuesTmp.Clear(); }
private void Awake() { m_CommandBuffer = new CommandBuffer(); m_RenderBuffer = new UIRenderBuffer(); }