You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
UE4 - Revert Reflection captures changes
[CL 2298631 by Rolando Caloca in Main branch]
This commit is contained in:
committed by
UnrealBot
parent
306edc200e
commit
42b7dfcecb
@@ -75,6 +75,8 @@ FSceneRenderTargetItem& GetEffectiveSourceTexture(bool bDownsamplePass, int32 Ta
|
||||
return GSceneRenderTargets.ReflectionColorScratchCubemap[ScratchTextureIndex]->GetRenderTargetItem();
|
||||
}
|
||||
|
||||
IMPLEMENT_SHADER_TYPE(,FDownsampleGS,TEXT("ReflectionEnvironmentShaders"),TEXT("DownsampleGS"),SF_Geometry);
|
||||
|
||||
class FDownsamplePS : public FGlobalShader
|
||||
{
|
||||
DECLARE_SHADER_TYPE(FDownsamplePS,Global);
|
||||
@@ -82,7 +84,7 @@ public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return true;
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
FDownsamplePS(const ShaderMetaType::CompiledShaderInitializerType& Initializer):
|
||||
@@ -137,7 +139,7 @@ public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return true;
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
static void ModifyCompilationEnvironment(EShaderPlatform Platform, FShaderCompilerEnvironment& OutEnvironment)
|
||||
@@ -211,7 +213,7 @@ public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return true;
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
static void ModifyCompilationEnvironment(EShaderPlatform Platform, FShaderCompilerEnvironment& OutEnvironment)
|
||||
@@ -327,26 +329,37 @@ void FilterReflectionEnvironment(FRHICommandListImmediate& RHICmdList, ERHIFeatu
|
||||
FSceneRenderTargetItem& EffectiveRT = GetEffectiveRenderTarget(true, MipIndex);
|
||||
FSceneRenderTargetItem& EffectiveSource = GetEffectiveSourceTexture(true, MipIndex);
|
||||
check(EffectiveRT.TargetableTexture != EffectiveSource.ShaderResourceTexture);
|
||||
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
|
||||
{
|
||||
SetRenderTarget(RHICmdList, EffectiveRT.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
SetRenderTarget(RHICmdList, EffectiveRT.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
|
||||
const FIntRect ViewRect(0, 0, MipSize, MipSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, MipSize, MipSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
const FIntRect ViewRect(0, 0, MipSize, MipSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, MipSize, MipSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
|
||||
TShaderMapRef<FScreenVS> VertexShader(GetGlobalShaderMap(FeatureLevel));
|
||||
TShaderMapRef<FDownsamplePS> PixelShader(GetGlobalShaderMap(FeatureLevel));
|
||||
TShaderMapRef<FScreenVSForGS> VertexShader(ShaderMap);
|
||||
TShaderMapRef<FDownsamplePS> PixelShader(ShaderMap);
|
||||
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, DownsampleBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, DownsampleBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
|
||||
PixelShader->SetParameters(RHICmdList, CubeFace, SourceMipIndex, EffectiveSource);
|
||||
PixelShader->SetParameters(RHICmdList, CubeFace, SourceMipIndex, EffectiveSource);
|
||||
|
||||
DrawRectangle(
|
||||
RHICmdList,
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
FIntPoint(ViewRect.Width(), ViewRect.Height()),
|
||||
FIntPoint(MipSize, MipSize),
|
||||
*VertexShader);
|
||||
|
||||
RHICmdList.CopyToResolveTarget(EffectiveRT.TargetableTexture, EffectiveRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), (ECubeFace)CubeFace, MipIndex));
|
||||
RHICmdList.CopyToResolveTarget(EffectiveRT.TargetableTexture, EffectiveRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), (ECubeFace)CubeFace, MipIndex));
|
||||
}
|
||||
}
|
||||
|
||||
if (MipSize == GDiffuseIrradianceCubemapSize)
|
||||
@@ -377,49 +390,51 @@ void FilterReflectionEnvironment(FRHICommandListImmediate& RHICmdList, ERHIFeatu
|
||||
check(EffectiveRT.TargetableTexture != EffectiveSource.ShaderResourceTexture);
|
||||
const int32 MipSize = 1 << (NumMips - MipIndex - 1);
|
||||
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
SetRenderTarget(RHICmdList, EffectiveRT.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
|
||||
const FIntRect ViewRect(0, 0, MipSize, MipSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, MipSize, MipSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
|
||||
TShaderMapRef<FScreenVS> VertexShader(GetGlobalShaderMap(FeatureLevel));
|
||||
TShaderMapRef< TCubeFilterPS<1> > CaptureCubemapArrayPixelShader(GetGlobalShaderMap(FeatureLevel));
|
||||
|
||||
FCubeFilterPS* PixelShader;
|
||||
if( bNormalize )
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
PixelShader = *TShaderMapRef< TCubeFilterPS<1> >(ShaderMap);
|
||||
static FGlobalBoundShaderState BoundShaderState;
|
||||
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, BoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, PixelShader);
|
||||
}
|
||||
else
|
||||
{
|
||||
PixelShader = *TShaderMapRef< TCubeFilterPS<0> >(ShaderMap);
|
||||
static FGlobalBoundShaderState BoundShaderState;
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, BoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, PixelShader);
|
||||
SetRenderTarget(RHICmdList, EffectiveRT.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
|
||||
const FIntRect ViewRect(0, 0, MipSize, MipSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, MipSize, MipSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
|
||||
TShaderMapRef<FScreenVSForGS> VertexShader(ShaderMap);
|
||||
TShaderMapRef< TCubeFilterPS<1> > CaptureCubemapArrayPixelShader(ShaderMap);
|
||||
//FFilterPS* PixelShader = (FFilterPS*)*CaptureCubemapArrayPixelShader;
|
||||
|
||||
FCubeFilterPS* PixelShader;
|
||||
if( bNormalize )
|
||||
{
|
||||
PixelShader = *TShaderMapRef< TCubeFilterPS<1> >(ShaderMap);
|
||||
static FGlobalBoundShaderState BoundShaderState;
|
||||
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, BoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, PixelShader);
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, BoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, PixelShader);
|
||||
}
|
||||
else
|
||||
{
|
||||
PixelShader = *TShaderMapRef< TCubeFilterPS<0> >(ShaderMap);
|
||||
static FGlobalBoundShaderState BoundShaderState;
|
||||
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, BoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, PixelShader);
|
||||
}
|
||||
|
||||
PixelShader->SetParameters(RHICmdList, CubeFace, MipIndex, EffectiveSource);
|
||||
|
||||
DrawRectangle(
|
||||
RHICmdList,
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
FIntPoint(ViewRect.Width(), ViewRect.Height()),
|
||||
FIntPoint(MipSize, MipSize),
|
||||
*VertexShader);
|
||||
|
||||
RHICmdList.CopyToResolveTarget(EffectiveRT.TargetableTexture, EffectiveRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), (ECubeFace)CubeFace, MipIndex));
|
||||
}
|
||||
|
||||
PixelShader->SetParameters(RHICmdList, CubeFace, MipIndex, EffectiveSource);
|
||||
|
||||
DrawRectangle(
|
||||
RHICmdList,
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
FIntPoint(ViewRect.Width(), ViewRect.Height()),
|
||||
FIntPoint(MipSize, MipSize),
|
||||
*VertexShader);
|
||||
|
||||
RHICmdList.CopyToResolveTarget(EffectiveRT.TargetableTexture, EffectiveRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), (ECubeFace)CubeFace, MipIndex));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -433,7 +448,7 @@ public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return true;
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
FCopyToCubeFaceVS() {}
|
||||
@@ -456,6 +471,42 @@ public:
|
||||
|
||||
IMPLEMENT_SHADER_TYPE(,FCopyToCubeFaceVS,TEXT("ReflectionEnvironmentShaders"),TEXT("CopyToCubeFaceVS"),SF_Vertex);
|
||||
|
||||
/** Geometry shader used when writing to a cubemap face. Supports writing to a cubemap array as well. */
|
||||
class FRouteToCubeFaceGS : public FGlobalShader
|
||||
{
|
||||
DECLARE_SHADER_TYPE(FRouteToCubeFaceGS,Global);
|
||||
public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
FRouteToCubeFaceGS(const ShaderMetaType::CompiledShaderInitializerType& Initializer):
|
||||
FGlobalShader(Initializer)
|
||||
{
|
||||
CubeFace.Bind(Initializer.ParameterMap,TEXT("CubeFace"));
|
||||
}
|
||||
FRouteToCubeFaceGS() {}
|
||||
|
||||
void SetParameters(FRHICommandList& RHICmdList, uint32 CubeFaceValue)
|
||||
{
|
||||
SetShaderValue(RHICmdList, GetGeometryShader(), CubeFace, CubeFaceValue);
|
||||
}
|
||||
|
||||
virtual bool Serialize(FArchive& Ar)
|
||||
{
|
||||
bool bShaderHasOutdatedParameters = FGlobalShader::Serialize(Ar);
|
||||
Ar << CubeFace;
|
||||
return bShaderHasOutdatedParameters;
|
||||
}
|
||||
|
||||
private:
|
||||
FShaderParameter CubeFace;
|
||||
};
|
||||
|
||||
IMPLEMENT_SHADER_TYPE(,FRouteToCubeFaceGS,TEXT("ReflectionEnvironmentShaders"),TEXT("RouteToCubeFaceGS"),SF_Geometry);
|
||||
|
||||
/** Pixel shader used when copying scene color from a scene render into a face of a reflection capture cubemap. */
|
||||
class FCopySceneColorToCubeFacePS : public FGlobalShader
|
||||
{
|
||||
@@ -464,7 +515,7 @@ public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return true;
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
static void ModifyCompilationEnvironment(EShaderPlatform Platform, FShaderCompilerEnvironment& OutEnvironment)
|
||||
@@ -549,7 +600,7 @@ public:
|
||||
|
||||
static bool ShouldCache(EShaderPlatform Platform)
|
||||
{
|
||||
return true;
|
||||
return IsFeatureLevelSupported(Platform, ERHIFeatureLevel::SM4);
|
||||
}
|
||||
|
||||
FCopyCubemapToCubeFacePS(const ShaderMetaType::CompiledShaderInitializerType& Initializer):
|
||||
@@ -647,10 +698,12 @@ void ClearScratchCubemaps(FRHICommandList& RHICmdList)
|
||||
|
||||
for (int32 MipIndex = 0; MipIndex < NumMips; MipIndex++)
|
||||
{
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
SetRenderTarget(RHICmdList, RT0.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
RHICmdList.Clear(true, FLinearColor(0, 10000, 0, 0), false, 0, false, 0, FIntRect());
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
SetRenderTarget(RHICmdList, RT0.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
RHICmdList.Clear(true, FLinearColor(0, 10000, 0, 0), false, 0, false, 0, FIntRect());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -658,10 +711,12 @@ void ClearScratchCubemaps(FRHICommandList& RHICmdList)
|
||||
|
||||
for (int32 MipIndex = 0; MipIndex < NumMips; MipIndex++)
|
||||
{
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
SetRenderTarget(RHICmdList, RT1.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
RHICmdList.Clear(true, FLinearColor(0, 10000, 0, 0), false, 0, false, 0, FIntRect());
|
||||
for (int32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
SetRenderTarget(RHICmdList, RT1.TargetableTexture, MipIndex, CubeFace, NULL);
|
||||
RHICmdList.Clear(true, FLinearColor(0, 10000, 0, 0), false, 0, false, 0, FIntRect());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -700,24 +755,22 @@ void CaptureSceneToScratchCubemap(FRHICommandListImmediate& RHICmdList, FSceneRe
|
||||
|
||||
{
|
||||
SCOPED_DRAW_EVENT(RHICmdList, CubeMapCopyScene, DEC_SCENE_ITEMS);
|
||||
|
||||
// Copy the captured scene into the cubemap face
|
||||
SetRenderTarget(RHICmdList, EffectiveColorRT.TargetableTexture, 0, CubeFace, NULL);
|
||||
{
|
||||
// Copy the captured scene into the cubemap face
|
||||
SetRenderTarget(RHICmdList, EffectiveColorRT.TargetableTexture, 0, CubeFace, NULL);
|
||||
|
||||
const FIntRect ViewRect(0, 0, EffectiveSize, EffectiveSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, EffectiveSize, EffectiveSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
const FIntRect ViewRect(0, 0, EffectiveSize, EffectiveSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, EffectiveSize, EffectiveSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
|
||||
TShaderMapRef<FCopyToCubeFaceVS> VertexShader(GetGlobalShaderMap(FeatureLevel));
|
||||
TShaderMapRef<FCopySceneColorToCubeFacePS> PixelShader(GetGlobalShaderMap(FeatureLevel));
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, CopyColorCubemapBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
TShaderMapRef<FCopyToCubeFaceVS> VertexShader(ShaderMap);
|
||||
TShaderMapRef<FCopySceneColorToCubeFacePS> PixelShader(ShaderMap);
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, CopyColorCubemapBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, CopyColorCubemapBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
|
||||
PixelShader->SetParameters(RHICmdList, SceneRenderer->Views[0], bCapturingForSkyLight, bLowerHemisphereIsBlack);
|
||||
VertexShader->SetParameters(RHICmdList, SceneRenderer->Views[0]);
|
||||
PixelShader->SetParameters(RHICmdList, SceneRenderer->Views[0], bCapturingForSkyLight, bLowerHemisphereIsBlack);
|
||||
VertexShader->SetParameters(RHICmdList, SceneRenderer->Views[0]);
|
||||
|
||||
DrawRectangle(
|
||||
RHICmdList,
|
||||
@@ -727,9 +780,10 @@ void CaptureSceneToScratchCubemap(FRHICommandListImmediate& RHICmdList, FSceneRe
|
||||
ViewRect.Width() * GSupersampleCaptureFactor, ViewRect.Height() * GSupersampleCaptureFactor,
|
||||
FIntPoint(ViewRect.Width(), ViewRect.Height()),
|
||||
GSceneRenderTargets.GetBufferSizeXY(),
|
||||
*VertexShader);
|
||||
*VertexShader);
|
||||
|
||||
RHICmdList.CopyToResolveTarget(EffectiveColorRT.TargetableTexture, EffectiveColorRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), CubeFace));
|
||||
RHICmdList.CopyToResolveTarget(EffectiveColorRT.TargetableTexture, EffectiveColorRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), CubeFace));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -745,36 +799,40 @@ void CopyCubemapToScratchCubemap(FRHICommandList& RHICmdList, ERHIFeatureLevel::
|
||||
const int32 EffectiveSize = GReflectionCaptureSize;
|
||||
FSceneRenderTargetItem& EffectiveColorRT = GSceneRenderTargets.ReflectionColorScratchCubemap[0]->GetRenderTargetItem();
|
||||
|
||||
for (uint32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
auto ShaderMap = GetGlobalShaderMap(FeatureLevel);
|
||||
|
||||
{
|
||||
// Copy the captured scene into the cubemap face
|
||||
SetRenderTarget(RHICmdList, EffectiveColorRT.TargetableTexture, 0, CubeFace, NULL);
|
||||
for (uint32 CubeFace = 0; CubeFace < CubeFace_MAX; CubeFace++)
|
||||
{
|
||||
// Copy the captured scene into the cubemap face
|
||||
SetRenderTarget(RHICmdList, EffectiveColorRT.TargetableTexture, 0, CubeFace, NULL);
|
||||
|
||||
const FTexture* SourceCubemapResource = SourceCubemap->Resource;
|
||||
const FIntPoint SourceDimensions(SourceCubemapResource->GetSizeX(), SourceCubemapResource->GetSizeY());
|
||||
const FIntRect ViewRect(0, 0, EffectiveSize, EffectiveSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, EffectiveSize, EffectiveSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
const FTexture* SourceCubemapResource = SourceCubemap->Resource;
|
||||
const FIntPoint SourceDimensions(SourceCubemapResource->GetSizeX(), SourceCubemapResource->GetSizeY());
|
||||
const FIntRect ViewRect(0, 0, EffectiveSize, EffectiveSize);
|
||||
RHICmdList.SetViewport(0, 0, 0.0f, EffectiveSize, EffectiveSize, 1.0f);
|
||||
RHICmdList.SetRasterizerState(TStaticRasterizerState<FM_Solid, CM_None>::GetRHI());
|
||||
RHICmdList.SetDepthStencilState(TStaticDepthStencilState<false, CF_Always>::GetRHI());
|
||||
RHICmdList.SetBlendState(TStaticBlendState<>::GetRHI());
|
||||
|
||||
TShaderMapRef<FScreenVS> VertexShader(GetGlobalShaderMap(FeatureLevel));
|
||||
TShaderMapRef<FCopyCubemapToCubeFacePS> PixelShader(GetGlobalShaderMap(FeatureLevel));
|
||||
TShaderMapRef<FScreenVSForGS> VertexShader(ShaderMap);
|
||||
TShaderMapRef<FCopyCubemapToCubeFacePS> PixelShader(ShaderMap);
|
||||
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, CopyFromCubemapToCubemapBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
PixelShader->SetParameters(RHICmdList, SourceCubemapResource, CubeFace, bIsSkyLight, bLowerHemisphereIsBlack);
|
||||
SetGlobalBoundShaderState(RHICmdList, FeatureLevel, CopyFromCubemapToCubemapBoundShaderState, GFilterVertexDeclaration.VertexDeclarationRHI, *VertexShader, *PixelShader);
|
||||
PixelShader->SetParameters(RHICmdList, SourceCubemapResource, CubeFace, bIsSkyLight, bLowerHemisphereIsBlack);
|
||||
|
||||
DrawRectangle(
|
||||
RHICmdList,
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
0, 0,
|
||||
SourceDimensions.X, SourceDimensions.Y,
|
||||
FIntPoint(ViewRect.Width(), ViewRect.Height()),
|
||||
SourceDimensions,
|
||||
*VertexShader);
|
||||
DrawRectangle(
|
||||
RHICmdList,
|
||||
ViewRect.Min.X, ViewRect.Min.Y,
|
||||
ViewRect.Width(), ViewRect.Height(),
|
||||
0, 0,
|
||||
SourceDimensions.X, SourceDimensions.Y,
|
||||
FIntPoint(ViewRect.Width(), ViewRect.Height()),
|
||||
SourceDimensions,
|
||||
*VertexShader);
|
||||
|
||||
RHICmdList.CopyToResolveTarget(EffectiveColorRT.TargetableTexture, EffectiveColorRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), (ECubeFace)CubeFace));
|
||||
RHICmdList.CopyToResolveTarget(EffectiveColorRT.TargetableTexture, EffectiveColorRT.ShaderResourceTexture, true, FResolveParams(FResolveRect(), (ECubeFace)CubeFace));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1322,9 +1380,8 @@ void CopyToSkyTexture(FRHICommandList& RHICmdList, FScene* Scene, FTexture* Proc
|
||||
}
|
||||
|
||||
void FScene::UpdateSkyCaptureContents(const USkyLightComponent* CaptureComponent, bool bCaptureEmissiveOnly, FTexture* OutProcessedTexture, FSHVectorRGB3& OutIrradianceEnvironmentMap)
|
||||
{
|
||||
//todo maybe use ShouldRenderSkylight here, but currently the Skylight hasn't been loaded in time.
|
||||
if (GSupportsRenderTargetFormat_PF_FloatRGBA)
|
||||
{
|
||||
if (GetFeatureLevel() >= ERHIFeatureLevel::SM4)
|
||||
{
|
||||
ENQUEUE_UNIQUE_RENDER_COMMAND(
|
||||
ClearCommand,
|
||||
|
||||
Reference in New Issue
Block a user