/// <summary>Called on a pool if a camera was requested.
		/// This call occurs when something on the main UI is being rendered ontop of an inline camera.</summary>
		public bool CheckCameraRequired(){
			
			if(!CameraRequested){
				return false;
			}
			
			// Clear the request:
			CameraRequested=false;
			
			// A camera is required!
			
			// Get the main UI renderer:
			Renderman renderer=UI.GetRenderer();
			
			// We must create a UICamera (or pull one from the pool):
			UICamera camera=GetPooledCamera();
			
			if(camera==null){
				// Create one:
				camera=new UICamera(renderer);
			}
			
			// Add it to the main set:
			AddCamera(camera);
			
			// Next, set the current depth:
			camera.SetDepth(AllocatedDepth);
			
			// Finally, we must now make sure any batches are parented to this new camera.
			// We do this by setting it to the root of the renderer:
			renderer.Node=camera.Gameobject;
			
			return true;
		}
		/// <summary>Resets the pool. Called before a main UI layout occurs.</summary>
		public void Reset(){
			CameraRequested=false;
			CameraDepth=UI.CameraDepth;
			
			// Push all active cameras into the inactive pool:
			DidLayout=true;
			FirstPoolCamera=FirstCamera;
			LastPoolCamera=LastCamera;
			FirstCamera=null;
			LastCamera=null;
		}
		/// <summary>Adds the given active camera to the main linked list for processing.</summary>
		public void AddCamera(UICamera camera){
			if(FirstCamera==null){
				FirstCamera=LastCamera=camera;
			}else{
				LastCamera=LastCamera.CameraAfter=camera;
			}
		}
		/// <summary>Gets a camera from the inactive pool. Null if the pool is empty.</summary>
		public UICamera GetPooledCamera(){
			if(FirstPoolCamera==null){
				return null;
			}
			
			UICamera result=FirstPoolCamera;
			FirstPoolCamera=result.CameraAfter;
			result.CameraAfter=null;
			return result;
		}
		/// <summary>Clears the inactive pool.</summary>
		public void ClearPool(){
			DidLayout=false;
			UICamera current=FirstPoolCamera;
			FirstPoolCamera=null;
			LastPoolCamera=null;
			
			while(current!=null){
				current.Destroy();
				current=current.CameraAfter;
			}
		}
		/// <summary>Destroys everything in this set.</summary>
		public void Destroy(){
			
			// Clear the pool:
			ClearPool();
			
			// Put the whole active set into the inactive pool:
			FirstPoolCamera=FirstCamera;
			FirstCamera=null;
			LastCamera=null;
			
			// Clear the pool again:
			ClearPool();
		}