You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
UE4 - rework RHI user-facing APIs to be safer and incorporate the desired sematics
[CL 2119499 by Gil Gribb in Main branch]
This commit is contained in:
@@ -22,14 +22,14 @@ FForwardShadingSceneRenderer::FForwardShadingSceneRenderer(const FSceneViewFamil
|
||||
* Initialize scene's views.
|
||||
* Check visibility, sort translucent items, etc.
|
||||
*/
|
||||
void FForwardShadingSceneRenderer::InitViews()
|
||||
void FForwardShadingSceneRenderer::InitViews(FRHICommandListImmediate& RHICmdList)
|
||||
{
|
||||
SCOPED_DRAW_EVENT(InitViews, DEC_SCENE_ITEMS);
|
||||
|
||||
SCOPE_CYCLE_COUNTER(STAT_InitViewsTime);
|
||||
|
||||
PreVisibilityFrameSetup();
|
||||
ComputeViewVisibility();
|
||||
PreVisibilityFrameSetup(RHICmdList);
|
||||
ComputeViewVisibility(RHICmdList);
|
||||
PostVisibilityFrameSetup();
|
||||
|
||||
OnStartFrame();
|
||||
@@ -38,7 +38,7 @@ void FForwardShadingSceneRenderer::InitViews()
|
||||
/**
|
||||
* Renders the view family.
|
||||
*/
|
||||
void FForwardShadingSceneRenderer::Render()
|
||||
void FForwardShadingSceneRenderer::Render(FRHICommandListImmediate& RHICmdList)
|
||||
{
|
||||
if(!ViewFamily.EngineShowFlags.Rendering)
|
||||
{
|
||||
@@ -48,21 +48,18 @@ void FForwardShadingSceneRenderer::Render()
|
||||
auto FeatureLevel = ViewFamily.Scene->GetFeatureLevel();
|
||||
|
||||
// Initialize global system textures (pass-through if already initialized).
|
||||
GSystemTextures.InitializeTextures(FeatureLevel);
|
||||
GSystemTextures.InitializeTextures(RHICmdList, FeatureLevel);
|
||||
|
||||
// Allocate the maximum scene render target space for the current view family.
|
||||
GSceneRenderTargets.Allocate(ViewFamily);
|
||||
|
||||
// Find the visible primitives.
|
||||
InitViews();
|
||||
|
||||
//@todo-rco: RHIPacketList
|
||||
FRHICommandList& RHICmdList = FRHICommandList::GetNullRef();
|
||||
|
||||
InitViews(RHICmdList);
|
||||
|
||||
// Notify the FX system that the scene is about to be rendered.
|
||||
if (Scene->FXSystem)
|
||||
{
|
||||
Scene->FXSystem->PreRender();
|
||||
Scene->FXSystem->PreRender(RHICmdList);
|
||||
}
|
||||
|
||||
GRenderTargetPool.VisualizeTexture.OnStartFrame(Views[0]);
|
||||
@@ -79,7 +76,7 @@ void FForwardShadingSceneRenderer::Render()
|
||||
else
|
||||
{
|
||||
// Begin rendering to scene color
|
||||
GSceneRenderTargets.BeginRenderingSceneColor(false);
|
||||
GSceneRenderTargets.BeginRenderingSceneColor(RHICmdList, false);
|
||||
}
|
||||
|
||||
// Clear color and depth buffer
|
||||
@@ -89,12 +86,12 @@ void FForwardShadingSceneRenderer::Render()
|
||||
RenderForwardShadingBasePass(RHICmdList);
|
||||
|
||||
// Make a copy of the scene depth if the current hardware doesn't support reading and writing to the same depth buffer
|
||||
GSceneRenderTargets.ResolveSceneDepthToAuxiliaryTexture();
|
||||
GSceneRenderTargets.ResolveSceneDepthToAuxiliaryTexture(RHICmdList);
|
||||
|
||||
// Notify the FX system that opaque primitives have been rendered.
|
||||
if (Scene->FXSystem)
|
||||
{
|
||||
Scene->FXSystem->PostRenderOpaque();
|
||||
Scene->FXSystem->PostRenderOpaque(RHICmdList);
|
||||
}
|
||||
|
||||
// Draw translucency.
|
||||
@@ -107,7 +104,7 @@ void FForwardShadingSceneRenderer::Render()
|
||||
// to apply refraction effect by distorting the scene color
|
||||
RenderDistortion(RHICmdList);
|
||||
}
|
||||
RenderTranslucency();
|
||||
RenderTranslucency(RHICmdList);
|
||||
}
|
||||
|
||||
if( !bGammaSpace )
|
||||
@@ -130,7 +127,7 @@ void FForwardShadingSceneRenderer::Render()
|
||||
FIntPoint PrePostSourceViewportSize = GSceneRenderTargets.GetBufferSizeXY();
|
||||
|
||||
FMemMark Mark(FMemStack::Get());
|
||||
FRenderingCompositePassContext CompositeContext(View);
|
||||
FRenderingCompositePassContext CompositeContext(RHICmdList, View);
|
||||
|
||||
FRenderingCompositePass* PostProcessSunMask = CompositeContext.Graph.RegisterPass(new(FMemStack::Get()) FRCPassPostProcessSunMaskES2(PrePostSourceViewportSize, true));
|
||||
CompositeContext.Root->AddDependency(FRenderingCompositeOutputRef(PostProcessSunMask));
|
||||
@@ -138,10 +135,10 @@ void FForwardShadingSceneRenderer::Render()
|
||||
}
|
||||
|
||||
// Resolve the scene color for post processing.
|
||||
GSceneRenderTargets.ResolveSceneColor(FResolveRect(0, 0, ViewFamily.FamilySizeX, ViewFamily.FamilySizeY));
|
||||
GSceneRenderTargets.ResolveSceneColor(RHICmdList, FResolveRect(0, 0, ViewFamily.FamilySizeX, ViewFamily.FamilySizeY));
|
||||
|
||||
// Drop depth and stencil before post processing to avoid export.
|
||||
RHIDiscardRenderTargets(true, true, 0);
|
||||
RHICmdList.DiscardRenderTargets(true, true, 0);
|
||||
|
||||
// Finish rendering for each view.
|
||||
{
|
||||
@@ -150,10 +147,10 @@ void FForwardShadingSceneRenderer::Render()
|
||||
for(int32 ViewIndex = 0;ViewIndex < Views.Num();ViewIndex++)
|
||||
{
|
||||
SCOPED_CONDITIONAL_DRAW_EVENTF(EventView, Views.Num() > 1, DEC_SCENE_ITEMS, TEXT("View%d"), ViewIndex);
|
||||
GPostProcessing.ProcessES2( Views[ViewIndex], bOnChipSunMask );
|
||||
GPostProcessing.ProcessES2(RHICmdList, Views[ViewIndex], bOnChipSunMask);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RenderFinish();
|
||||
RenderFinish(RHICmdList);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user