public static bool RebuildDynamicFonts() { var fontsRebuilt = false; rebuildList.Clear(); var controls = dfControl.ActiveInstances; for (int i = 0; i < controls.Count; i++) { var label = controls[i] as IRendersText; if (label != null) { label.UpdateFontInfo(); } } fontsRebuilt = rebuildList.Count > 0; for (int i = 0; i < rebuildList.Count; i++) { var dynamicFont = rebuildList[i] as dfDynamicFont; if (dynamicFont != null) { dynamicFont.FlushCharacterRequests(); } } rebuildList.Clear(); dirty.Clear(); return(fontsRebuilt); }
public dfList <dfRenderData> RenderMultiple() { if (!this.isVisible || this.Font == null) { return(null); } var matrix = this.transform.localToWorldMatrix; if (!this.isControlInvalidated && viewportBox != null) { for (int i = 0; i < buffers.Count; i++) { buffers[i].Transform = matrix; } return(this.buffers); } try { // Clear the 'dirty' flag first, because some events (like font texture rebuild) // should be able to set the control to 'dirty' again. this.isControlInvalidated = false; // Parse the markup and perform document layout if (isMarkupInvalidated) { isMarkupInvalidated = false; processMarkup(); } // Ensure that our viewport box has been properly resized to // fully encompass all nodes, because the resulting size of // the viewport box will be used to update scrollbars and // determine max scroll position. viewportBox.FitToContents(); // Perform auto-sizing if indicated if (autoHeight) { this.Height = viewportBox.Height; } // Update scrollbars to match rendered height updateScrollbars(); //@Profiler.BeginSample( "Gather markup render buffers" ); buffers.Clear(); gatherRenderBuffers(viewportBox, this.buffers); return(this.buffers); } finally { updateCollider(); } }
public void Release() { planes.Clear(); if (!pool.Contains(this)) { pool.Enqueue(this); } }
public void Update() { lock ( tracking ) { activeTouches.Clear(); for (int i = 0; i < tracking.Count; i++) { activeTouches.Add(tracking[i]); } postProcessTouches(); } }
/// <summary> /// Used to reset all lists in preparation for filling with new or /// updated rendering data. NOTE: While this function does appear /// to empty the data lists, it does not free the internal memory /// used to hold the information, with the assumption that this /// will glyphData in fewer garbage collections. /// </summary> public void Clear() { Material = null; Shader = null; Transform = Matrix4x4.identity; Checksum = 0x00; Intersection = dfIntersectionType.None; Vertices.Clear(); UV.Clear(); Triangles.Clear(); Colors.Clear(); Normals.Clear(); Tangents.Clear(); }
public void Clear() { while (spawned.Count > 0) { pool.Enqueue(spawned.Dequeue()); } for (int i = 0; i < pool.Count; i++) { var instance = pool[i]; DestroyImmediate(instance); } pool.Clear(); }
public dfList <dfRenderData> RenderMultiple() { if (renderData == null) { renderData = dfRenderData.Obtain(); textRenderData = dfRenderData.Obtain(); isControlInvalidated = true; } var matrix = transform.localToWorldMatrix; if (!isControlInvalidated) { for (int i = 0; i < buffers.Count; i++) { buffers[i].Transform = matrix; } return(buffers); } isControlInvalidated = false; buffers.Clear(); renderData.Clear(); if (Atlas != null) { renderData.Material = Atlas.Material; renderData.Transform = matrix; renderBackground(); buffers.Add(renderData); } var textBuffer = renderText(); if (textBuffer != null && textBuffer != renderData) { textBuffer.Transform = matrix; buffers.Add(textBuffer); } // Make sure that the collider size always matches the control updateCollider(); return(buffers); }
private void resetRenderBuffers() { buffers.Clear(); if (renderData != null) { renderData.Clear(); renderData.Material = Atlas.Material; renderData.Transform = this.transform.localToWorldMatrix; buffers.Add(renderData); } if (textRenderData != null) { textRenderData.Clear(); textRenderData.Material = Atlas.Material; textRenderData.Transform = this.transform.localToWorldMatrix; buffers.Add(textRenderData); } }
public dfList <dfRenderData> RenderMultiple() { if (Atlas == null || Font == null) { return(null); } if (!isVisible) { return(null); } // Initialize render buffers if needed if (renderData == null) { renderData = dfRenderData.Obtain(); textRenderData = dfRenderData.Obtain(); isControlInvalidated = true; } // If control is not dirty, update the transforms on the // render buffers (in case control moved) and return // pre-rendered data if (!isControlInvalidated) { for (int i = 0; i < buffers.Count; i++) { buffers[i].Transform = transform.localToWorldMatrix; } return(buffers); } #region Prepare render buffers buffers.Clear(); renderData.Clear(); renderData.Material = Atlas.Material; renderData.Transform = this.transform.localToWorldMatrix; buffers.Add(renderData); textRenderData.Clear(); textRenderData.Material = Atlas.Material; textRenderData.Transform = this.transform.localToWorldMatrix; buffers.Add(textRenderData); #endregion // Render background before anything else, since we're going to // want to keep track of where the background data ends and any // other data begins renderBackground(); // Render text item renderText(textRenderData); // Control is no longer in need of rendering isControlInvalidated = false; // Make sure that the collider size always matches the control updateCollider(); return(buffers); }
public dfList <dfRenderData> RenderMultiple() { if (Atlas == null || Font == null) { return(null); } if (!isVisible) { return(null); } // Initialize render buffers if needed if (renderData == null) { renderData = dfRenderData.Obtain(); textRenderData = dfRenderData.Obtain(); isControlInvalidated = true; } var matrix = this.transform.localToWorldMatrix; // If control is not dirty, update the transforms on the // render buffers (in case control moved) and return // pre-rendered data if (!isControlInvalidated) { for (int i = 0; i < buffers.Count; i++) { buffers[i].Transform = matrix; } return(buffers); } #region Prepare render buffers buffers.Clear(); renderData.Clear(); renderData.Material = Atlas.Material; renderData.Transform = matrix; buffers.Add(renderData); textRenderData.Clear(); textRenderData.Material = Atlas.Material; textRenderData.Transform = matrix; buffers.Add(textRenderData); #endregion // Render background before anything else, since we're going to // want to keep track of where the background data ends and any // other data begins renderBackground(); // We want to start clipping *after* the background is rendered, so // grab the current number of vertices before rendering other elements var spriteClipStart = renderData.Vertices.Count; // Render other sprites renderHover(); renderSelection(); // Render text items renderItems(textRenderData); // Perform clipping clipQuads(renderData, spriteClipStart); clipQuads(textRenderData, 0); // Control is no longer in need of rendering isControlInvalidated = false; // Make sure that the collider size always matches the control updateCollider(); return(buffers); }
public dfList <Plane> TestIntersection(Bounds bounds, out dfIntersectionType type) { if (planes == null || planes.Count == 0) { type = dfIntersectionType.Inside; return(null); } intersectedPlanes.Clear(); var center = bounds.center; var extents = bounds.extents; var intersecting = false; var planeCount = planes.Count; var rawPlanes = planes.Items; for (int i = 0; i < planeCount; i++) { var plane = rawPlanes[i]; var planeNormal = plane.normal; var planeDist = plane.distance; // Compute the projection interval radius of b onto L(t) = b.c + t * p.n float r = extents.x * Mathf.Abs(planeNormal.x) + extents.y * Mathf.Abs(planeNormal.y) + extents.z * Mathf.Abs(planeNormal.z); // Compute distance of box center from plane float distance = Vector3.Dot(planeNormal, center) + planeDist; // Intersection occurs when distance falls within [-r,+r] interval if (Mathf.Abs(distance) <= r) { intersecting = true; intersectedPlanes.Add(plane); } else { // If the control lies behind *any* of the planes, there // is no point in continuing with the rest of the test if (distance < -r) { type = dfIntersectionType.None; return(null); } } } if (intersecting) { type = dfIntersectionType.Intersecting; return(intersectedPlanes); } type = dfIntersectionType.Inside; return(null); }