该宏非常重要, 其作用是: 创建一个渲染命令任务,并将该任务压入渲染队列,待渲染线程执行. 主要用于多线程渲染!
#define ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER(TypeName,ParamType1,ParamName1,ParamValue1,Code)class EURCMacro_TypeName : public FRenderCommand{public:EURCMacro_TypeName(TCallTraits<ParamType1>::ParamType InParamName1):ParamName1(InParamName1){}void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent){FRHICommandListImmediate& RHICmdList = GetImmediateCommandList_ForRenderCommand();Code;}FORCEINLINE TStatId GetStatId() const{RETURN_QUICK_DECLARE_CYCLE_STAT(TypeName, STATGROUP_RenderThreadCommands);}private:ParamType1 ParamName1;};{LogRenderCommand(TypeName);if(ShouldExecuteOnRenderThread()){CheckNotBlockedOnRenderThread();TGraphTask<EURCMacro_TypeName>::CreateTask().ConstructAndDispatchWhenReady(ParamValue1);}else{EURCMacro_TypeName TempCommand(ParamValue1);FScopeCycleCounter EURCMacro_Scope(TempCommand.GetStatId());TempCommand.DoTask(ENamedThreads::GameThread, FGraphEventRef() );}}