FVelocityDrawingPolicy::FVelocityDrawingPolicy( const FVertexFactory* InVertexFactory, const FMaterialRenderProxy* InMaterialRenderProxy, const FMaterial& InMaterialResource, ERHIFeatureLevel::Type InFeatureLevel ) : FMeshDrawingPolicy(InVertexFactory,InMaterialRenderProxy,InMaterialResource) { const FMaterialShaderMap* MaterialShaderIndex = InMaterialResource.GetRenderingThreadShaderMap(); const FMeshMaterialShaderMap* MeshShaderIndex = MaterialShaderIndex->GetMeshShaderMap(InVertexFactory->GetType()); HullShader = NULL; DomainShader = NULL; const EMaterialTessellationMode MaterialTessellationMode = InMaterialResource.GetTessellationMode(); if (RHISupportsTessellation(GShaderPlatformForFeatureLevel[InFeatureLevel]) && InVertexFactory->GetType()->SupportsTessellationShaders() && MaterialTessellationMode != MTM_NoTessellation) { bool HasHullShader = MeshShaderIndex->HasShader(&FVelocityHS::StaticType); bool HasDomainShader = MeshShaderIndex->HasShader(&FVelocityDS::StaticType); HullShader = HasHullShader ? MeshShaderIndex->GetShader<FVelocityHS>() : NULL; DomainShader = HasDomainShader ? MeshShaderIndex->GetShader<FVelocityDS>() : NULL; } bool HasVertexShader = MeshShaderIndex->HasShader(&FVelocityVS::StaticType); VertexShader = HasVertexShader ? MeshShaderIndex->GetShader<FVelocityVS>() : NULL; bool HasPixelShader = MeshShaderIndex->HasShader(&FVelocityPS::StaticType); PixelShader = HasPixelShader ? MeshShaderIndex->GetShader<FVelocityPS>() : NULL; }
FDepthDrawingPolicy::FDepthDrawingPolicy( const FVertexFactory* InVertexFactory, const FMaterialRenderProxy* InMaterialRenderProxy, const FMaterial& InMaterialResource, bool bIsTwoSided, ERHIFeatureLevel::Type InFeatureLevel ): FMeshDrawingPolicy(InVertexFactory,InMaterialRenderProxy,InMaterialResource,false,/*bInTwoSidedOverride=*/ bIsTwoSided) { // The primitive needs to be rendered with the material's pixel and vertex shaders if it is masked bNeedsPixelShader = false; if (InMaterialResource.IsMasked()) { bNeedsPixelShader = true; PixelShader = InMaterialResource.GetShader<FDepthOnlyPS>(InVertexFactory->GetType()); } else { PixelShader = NULL; } const EMaterialTessellationMode TessellationMode = InMaterialResource.GetTessellationMode(); VertexShader = NULL; HullShader = NULL; DomainShader = NULL; if (RHISupportsTessellation(GShaderPlatformForFeatureLevel[InFeatureLevel]) && InVertexFactory->GetType()->SupportsTessellationShaders() && TessellationMode != MTM_NoTessellation) { VertexShader = InMaterialResource.GetShader<TDepthOnlyVS<false> >(VertexFactory->GetType()); HullShader = InMaterialResource.GetShader<FDepthOnlyHS>(VertexFactory->GetType()); DomainShader = InMaterialResource.GetShader<FDepthOnlyDS>(VertexFactory->GetType()); } else { VertexShader = InMaterialResource.GetShader<TDepthOnlyVS<false> >(InVertexFactory->GetType()); } }