FPrimitiveSceneProxy* UPaperSpriteComponent::CreateSceneProxy()
{
	FPaperSpriteSceneProxy* NewProxy = new FPaperSpriteSceneProxy(this);
	if (SourceSprite != nullptr)
	{
		FSpriteDrawCallRecord DrawCall;
		DrawCall.BuildFromSprite(SourceSprite);
		DrawCall.Color = SpriteColor.ToFColor(/*bSRGB=*/ false);
		NewProxy->SetSprite_RenderThread(DrawCall, SourceSprite->AlternateMaterialSplitIndex);
	}
	return NewProxy;
}
FPrimitiveSceneProxy* UPaperFlipbookComponent::CreateSceneProxy()
{
	FPaperFlipbookSceneProxy* NewProxy = new FPaperFlipbookSceneProxy(this);

	CalculateCurrentFrame();
	UPaperSprite* SpriteToSend = GetSpriteAtCachedIndex();

	FSpriteDrawCallRecord DrawCall;
	DrawCall.BuildFromSprite(SpriteToSend);
	DrawCall.Color = SpriteColor;
	NewProxy->SetDrawCall_RenderThread(DrawCall);
	return NewProxy;
}
void UPaperSpriteComponent::SendRenderDynamicData_Concurrent()
{
	if (SceneProxy != nullptr)
	{
		FSpriteDrawCallRecord DrawCall;
		DrawCall.BuildFromSprite(SourceSprite);
		DrawCall.Color = SpriteColor.ToFColor(/*bSRGB=*/ false);
		const int32 SplitIndex = (SourceSprite != nullptr) ? SourceSprite->AlternateMaterialSplitIndex : INDEX_NONE;

		ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER(
				FSendPaperSpriteComponentDynamicData,
				FPaperSpriteSceneProxy*,InSceneProxy,(FPaperSpriteSceneProxy*)SceneProxy,
				FSpriteDrawCallRecord,InSpriteToSend,DrawCall,
				int32,InSplitIndex,SplitIndex,
			{
				InSceneProxy->SetSprite_RenderThread(InSpriteToSend, InSplitIndex);
			});
void UPaperFlipbookComponent::SendRenderDynamicData_Concurrent()
{
	if (SceneProxy != nullptr)
	{
		UPaperSprite* SpriteToSend = GetSpriteAtCachedIndex();

		FSpriteDrawCallRecord DrawCall;
		DrawCall.BuildFromSprite(SpriteToSend);
		DrawCall.Color = SpriteColor;

		ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER(
				FSendPaperRenderComponentDynamicData,
				FPaperRenderSceneProxy*,InSceneProxy,(FPaperRenderSceneProxy*)SceneProxy,
				FSpriteDrawCallRecord,InSpriteToSend,DrawCall,
				UBodySetup*,InBodySetup,CachedBodySetup,
			{
				InSceneProxy->SetDrawCall_RenderThread(InSpriteToSend);
				InSceneProxy->SetBodySetup_RenderThread(InBodySetup);
			});