1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include "DrawEdgePsRendering.h" #include "GlobalShader.h" #include "ShaderParameterStruct.h" #include "Engine/World.h" #include "PipelineStateCache.h" #include "RHIStaticStates.h" #include "SceneUtils.h" #include "SceneInterface.h" #include "ShaderParameterUtils.h" #include "../SceneRendering.h" #include "../Public/ScreenPass.h"
class FEdgePsPS : public FGlobalShader { public: DECLARE_SHADER_TYPE(FEdgePsPS, Global);
SHADER_USE_PARAMETER_STRUCT(FEdgePsPS, FGlobalShader);
BEGIN_SHADER_PARAMETER_STRUCT(FParameters,) SHADER_PARAMETER_STRUCT_REF(FViewUniformShaderParameters, View) SHADER_PARAMETER_RDG_TEXTURE(Texture2D, SceneColorTexture) SHADER_PARAMETER_SAMPLER(SamplerState, SceneColorSampler) RENDER_TARGET_BINDING_SLOTS() END_SHADER_PARAMETER_STRUCT() };
IMPLEMENT_SHADER_TYPE(, FEdgePsPS, TEXT("/Engine/Private/DrawEdge/EdgePsShaders.usf"), TEXT("MainPS"), SF_Pixel)
void RenderEdgePs(FRDGBuilder& GraphBuilder, const FViewInfo& View, FRDGTextureRef InputColorTexture, FRDGTextureRef ViewFamilyTexture) { FRDGTextureRef CopiedViewFamilyTexture = GraphBuilder.CreateTexture(ViewFamilyTexture->Desc, TEXT("CopiedViewFamilyTexture")); AddCopyTexturePass(GraphBuilder, ViewFamilyTexture, CopiedViewFamilyTexture);
TShaderMapRef<FEdgePsPS> PixelShader(View.ShaderMap); FEdgePsPS::FParameters* PassParameters = GraphBuilder.AllocParameters<FEdgePsPS::FParameters>(); PassParameters->View = View.ViewUniformBuffer; PassParameters->SceneColorSampler = TStaticSamplerState<SF_Point, AM_Clamp, AM_Clamp, AM_Clamp>::GetRHI(); PassParameters->SceneColorTexture = CopiedViewFamilyTexture; PassParameters->RenderTargets[0] = FRenderTargetBinding(ViewFamilyTexture, ERenderTargetLoadAction::ENoAction);
AddDrawScreenPass(GraphBuilder, RDG_EVENT_NAME("Edge Pass"), View, FScreenPassTextureViewport(ViewFamilyTexture), FScreenPassTextureViewport(ViewFamilyTexture), PixelShader, PassParameters); }
|