ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER

该宏非常重要, 其作用是: 创建一个渲染命令任务,并将该任务压入渲染队列,待渲染线程执行. 主要用于多线程渲染!

    #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() );
		}
	}

猜你喜欢

转载自blog.csdn.net/sukhoi27smk/article/details/79513011