该宏非常重要, 其作用是: 创建一个渲染命令任务,并将该任务压入渲染队列,待渲染线程执行. 主要用于多线程渲染!
#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() ); } }