Called to send a transform 1 for this component to the rendering thread

/** Called to send a transform 1 for this component to the rendering thread
*
* **Caution**, this is called concurrently on multiple threads (but never the same component concurrently)
*/
virtual void SendRenderTransform_Concurrent();

void UActorComponent::DoDeferredRenderUpdates_Concurrent()

{

checkf(!HasAnyFlags(RF_Unreachable), TEXT("%s"), *GetFullName());

checkf(! IsTemplate(), TEXT("%s"), *[GetFullName]);

checkf(! IsPendingKill (), TEXT("%s"), *[GetFullName]);

if(! IsRegistered ())

{

UE_LOG(LogActorComponent, [Log], TEXT("UpdateComponent: (%s) Not registered, Aborting."), *[GetPathName]);

return;

}

if(bRenderStateDirty)

{

SCOPE_CYCLE_COUNTER(STAT_PostTickComponentRecreate);

[RecreateRenderState_Concurrent];

checkf(!bRenderStateDirty, TEXT("Failed to route CreateRenderState_Concurrent (%s)"), *[GetFullName]);

}

else

{

SCOPE_CYCLE_COUNTER(STAT_PostTickComponentLW);

if(bRenderTransformDirty)

{

// Update the component's transform if the actor has been moved since it was last updated.

[SendRenderTransform_Concurrent];

}

if(bRenderDynamicDataDirty)

{

[SendRenderDynamicData_Concurrent];

}

}

}

From https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Components/UActorComponent/DoDeferredRenderUpdates_Concurre-/index.html

void [UActorComponent::MarkRenderDynamicDataDirty]

{

// If registered and has a render state to make as dirty

if([IsRegistered] && [bRenderStateCreated](../../../API%5C%5CRuntime%5C%5CEngine%5C%5CComponents%5C%5CUActorComponent%5C%5CbRenderStateCreated))

{

// Flag as dirty

bRenderDynamicDataDirty = true;

[MarkForNeededEndOfFrameUpdate];

}

}

From https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Components/UActorComponent/MarkRenderDynamicDataDirty/index.html