关于processor创建的一点疑问

FMeshPassProcessor* CreateBasePassProcessor(ERHIFeatureLevel::Type FeatureLevel, const FScene* Scene, const FSceneView* InViewIfDynamicMeshCommand, FMeshPassDrawListContext* InDrawListContext)

{

const FExclusiveDepthStencil::Type DefaultBasePassDepthStencilAccess = FScene::GetDefaultBasePassDepthStencilAccess(FeatureLevel);

FMeshPassProcessorRenderState PassDrawRenderState;

SetupBasePassState(DefaultBasePassDepthStencilAccess, false, PassDrawRenderState);

<br/>

const FBasePassMeshProcessor::EFlags Flags = FBasePassMeshProcessor::EFlags::CanUseDepthStencil;

<br/>

return new FBasePassMeshProcessor(EMeshPass::BasePass, Scene, FeatureLevel, InViewIfDynamicMeshCommand, PassDrawRenderState, InDrawListContext, Flags);

}

<br/>

发现虚幻五创建processor的方式改成了:

return new FBasePassMeshProcessor(EMeshPass::BasePass, Scene, FeatureLevel, InViewIfDynamicMeshCommand, PassDrawRenderState, InDrawListContext, Flags);

的方式了。

<br/>

虚幻四的时候,还是使用,类似:

return new(FMemStack::Get()) FBasePassMeshProcessor(EMeshPass::BasePass, Scene, FeatureLevel, InViewIfDynamicMeshCommand, PassDrawRenderState, InDrawListContext, Flags);

<br/>

虚幻五的这种写法有什么讲究吗?无需显示 new(FMemStack::Get()) 能起到优化内存缓存的做用吗?

我们新建customprocessor的话,是要遵循五的这种写法吗?

Hi,

因为在UE5里,改用FSceneRenderingAllocatorObject来管理FSceneRendering的内存分配,如果你新建一个processor的话,可以继承这个类,不需要用MemStack了。

改动的git地址 https://github.com/EpicGames/UnrealEngine/commit/91ad9111482b64922dfbcd2eb4dcc1221fa5c9e3