Files
UnrealEngineUWP/Engine/Source/Runtime/Renderer/Private/RequiredTextureResolutionRendering.h
Ryan Vance 35eb0041ab Merging //UE4/Dev-Main to Dev-VR (//UE4/Dev-VR)
#rb integration

[CL 5387703 by Ryan Vance in Dev-VR branch]
2019-03-13 15:19:08 -04:00

91 lines
3.4 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
RequiredTextureResolutionRendering.h: Declarations used for the viewmode.
=============================================================================*/
#pragma once
#include "MeshMaterialShader.h"
#include "DebugViewModeRendering.h"
#include "Engine/TextureStreamingTypes.h"
#include "DebugViewModeInterface.h"
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
/**
* Pixel shader that renders texcoord scales.
* The shader is only compiled with the local vertex factory to prevent multiple compilation.
* Nothing from the factory is actually used, but the shader must still derive from FMeshMaterialShader.
*/
class FRequiredTextureResolutionPS : public FDebugViewModePS
{
DECLARE_SHADER_TYPE(FRequiredTextureResolutionPS,MeshMaterial);
public:
static bool ShouldCompilePermutation(EShaderPlatform Platform, const FMaterial* Material, const FVertexFactoryType* VertexFactoryType)
{
// See FDebugViewModeMaterialProxy::GetFriendlyName()
return AllowDebugViewShaderMode(DVSM_RequiredTextureResolution, Platform, GetMaxSupportedFeatureLevel(Platform)) && Material->GetFriendlyName().Contains(TEXT("RequiredTextureResolution"));
}
FRequiredTextureResolutionPS(const ShaderMetaType::CompiledShaderInitializerType& Initializer):
FDebugViewModePS(Initializer)
{
AnalysisParamsParameter.Bind(Initializer.ParameterMap,TEXT("AnalysisParams"));
PrimitiveAlphaParameter.Bind(Initializer.ParameterMap, TEXT("PrimitiveAlpha"));
}
FRequiredTextureResolutionPS() {}
virtual bool Serialize(FArchive& Ar) override
{
bool bShaderHasOutdatedParameters = FMeshMaterialShader::Serialize(Ar);
Ar << AnalysisParamsParameter;
Ar << PrimitiveAlphaParameter;
return bShaderHasOutdatedParameters;
}
static void ModifyCompilationEnvironment(EShaderPlatform Platform, const FMaterial* Material, FShaderCompilerEnvironment& OutEnvironment)
{
OutEnvironment.SetDefine(TEXT("UNDEFINED_ACCURACY"), UndefinedStreamingAccuracyIntensity);
OutEnvironment.SetDefine(TEXT("MAX_NUM_TEX_COORD"), (uint32)TEXSTREAM_MAX_NUM_UVCHANNELS);
OutEnvironment.SetDefine(TEXT("MAX_NUM_TEXTURE_REGISTER"), (uint32)TEXSTREAM_MAX_NUM_TEXTURES_PER_MATERIAL);
FMeshMaterialShader::ModifyCompilationEnvironment(Platform, OutEnvironment);
}
virtual void GetDebugViewModeShaderBindings(
const FPrimitiveSceneProxy* RESTRICT PrimitiveSceneProxy,
const FMaterialRenderProxy& RESTRICT MaterialRenderProxy,
const FMaterial& RESTRICT Material,
EDebugViewShaderMode DebugViewMode,
const FVector& ViewOrigin,
int32 VisualizeLODIndex,
int32 VisualizeElementIndex,
int32 NumVSInstructions,
int32 NumPSInstructions,
int32 ViewModeParam,
FName ViewModeParamName,
FMeshDrawSingleShaderBindings& ShaderBindings
) const override;
private:
FShaderParameter AnalysisParamsParameter;
FShaderParameter PrimitiveAlphaParameter;
};
class FRequiredTextureResolutionInterface: public FDebugViewModeInterface
{
public:
FRequiredTextureResolutionInterface() : FDebugViewModeInterface(TEXT("RequiredTextureResolution"), false, true, false) {}
virtual FDebugViewModePS* GetPixelShader(const FMaterial* InMaterial, FVertexFactoryType* VertexFactoryType) const override
{
return InMaterial->GetShader<FRequiredTextureResolutionPS>(VertexFactoryType);
}
};
#endif // !(UE_BUILD_SHIPPING || UE_BUILD_TEST)