internal void CloseNodeCollectors() { viewObjectNodes.Close(); RenderNodes.Close(); objectNodes.Close(); ObjectNodeReferences.Close(); }
public virtual void Reset() { // Clear nodes viewObjectNodes.Clear(false); objectNodes.Clear(false); ObjectNodeReferences.Clear(true); RenderNodes.Clear(false); }
internal ObjectNodeReference GetOrCreateObjectNode(RenderObject renderObject) { if (renderObject.ObjectNode == ObjectNodeReference.Invalid) { renderObject.ObjectNode = new ObjectNodeReference(objectNodes.Count); objectNodes.Add(new ObjectNode(renderObject)); ObjectNodeReferences.Add(renderObject.ObjectNode); } return(renderObject.ObjectNode); }
internal unsafe ObjectNodeReference GetOrCreateObjectNode(RenderObject renderObject) { fixed(ObjectNodeReference *objectNodeRef = &renderObject.ObjectNode) { var oldValue = Interlocked.CompareExchange(ref *(int *)objectNodeRef, -2, -1); if (oldValue == -1) { var index = objectNodes.Add(new ObjectNode(renderObject)); renderObject.ObjectNode = new ObjectNodeReference(index); ObjectNodeReferences.Add(renderObject.ObjectNode); } else { while (renderObject.ObjectNode.Index == -2) { } } } return(renderObject.ObjectNode); }