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