Add **Sample Global SDF** node to materials
This commit is contained in:
@@ -48,7 +48,7 @@ void DecalMaterialShader::Bind(BindParameters& params)
|
||||
bindMeta.Context = context;
|
||||
bindMeta.Constants = cb;
|
||||
bindMeta.Input = nullptr;
|
||||
bindMeta.Buffers = nullptr;
|
||||
bindMeta.Buffers = params.RenderContext.Buffers;
|
||||
bindMeta.CanSampleDepth = true;
|
||||
bindMeta.CanSampleGBuffer = false;
|
||||
MaterialParams::Bind(params.ParamsLink, bindMeta);
|
||||
|
||||
@@ -74,7 +74,7 @@ void DeferredMaterialShader::Bind(BindParameters& params)
|
||||
bindMeta.Context = context;
|
||||
bindMeta.Constants = cb;
|
||||
bindMeta.Input = nullptr;
|
||||
bindMeta.Buffers = nullptr;
|
||||
bindMeta.Buffers = params.RenderContext.Buffers;
|
||||
bindMeta.CanSampleDepth = false;
|
||||
bindMeta.CanSampleGBuffer = false;
|
||||
MaterialParams::Bind(params.ParamsLink, bindMeta);
|
||||
|
||||
@@ -62,7 +62,7 @@ void DeformableMaterialShader::Bind(BindParameters& params)
|
||||
bindMeta.Context = context;
|
||||
bindMeta.Constants = cb;
|
||||
bindMeta.Input = nullptr;
|
||||
bindMeta.Buffers = nullptr;
|
||||
bindMeta.Buffers = params.RenderContext.Buffers;
|
||||
bindMeta.CanSampleDepth = false;
|
||||
bindMeta.CanSampleGBuffer = false;
|
||||
MaterialParams::Bind(params.ParamsLink, bindMeta);
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "Engine/Graphics/RenderBuffers.h"
|
||||
#include "Engine/Graphics/GPUDevice.h"
|
||||
#include "Engine/Graphics/GPULimits.h"
|
||||
#include "Engine/Graphics/RenderTask.h"
|
||||
#include "Engine/Renderer/GlobalSignDistanceFieldPass.h"
|
||||
#include "Engine/Streaming/Streaming.h"
|
||||
|
||||
bool MaterialInfo8::operator==(const MaterialInfo8& other) const
|
||||
@@ -157,6 +159,9 @@ const Char* ToString(MaterialParameterType value)
|
||||
case MaterialParameterType::TextureGroupSampler:
|
||||
result = TEXT("TextureGroupSampler");
|
||||
break;
|
||||
case MaterialParameterType::GlobalSDF:
|
||||
result = TEXT("GlobalSDF");
|
||||
break;
|
||||
default:
|
||||
result = TEXT("");
|
||||
break;
|
||||
@@ -198,7 +203,6 @@ Variant MaterialParameter::GetValue() const
|
||||
case MaterialParameterType::GPUTexture:
|
||||
return _asGPUTexture.Get();
|
||||
default:
|
||||
CRASH;
|
||||
return Variant::Zero;
|
||||
}
|
||||
}
|
||||
@@ -303,6 +307,8 @@ void MaterialParameter::SetValue(const Variant& value)
|
||||
invalidType = true;
|
||||
}
|
||||
break;
|
||||
case MaterialParameterType::GlobalSDF:
|
||||
break;
|
||||
default:
|
||||
invalidType = true;
|
||||
}
|
||||
@@ -475,6 +481,16 @@ void MaterialParameter::Bind(BindMeta& meta) const
|
||||
case MaterialParameterType::TextureGroupSampler:
|
||||
meta.Context->BindSampler(_registerIndex, Streaming::GetTextureGroupSampler(_asInteger));
|
||||
break;
|
||||
case MaterialParameterType::GlobalSDF:
|
||||
{
|
||||
GlobalSignDistanceFieldPass::BindingData bindingData;
|
||||
if (GlobalSignDistanceFieldPass::Instance()->Get(meta.Buffers, bindingData))
|
||||
Platform::MemoryClear(&bindingData, sizeof(bindingData));
|
||||
for (int32 i = 0; i < 4; i++)
|
||||
meta.Context->BindSR(_registerIndex + i, bindingData.Cascades[i] ? bindingData.Cascades[i]->ViewVolume() : nullptr);
|
||||
*((GlobalSignDistanceFieldPass::GlobalSDFData*)(meta.Constants.Get() + _offset)) = bindingData.GlobalSDF;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -128,6 +128,11 @@ enum class MaterialParameterType : byte
|
||||
/// The texture sampler derived from texture group settings.
|
||||
/// </summary>
|
||||
TextureGroupSampler = 19,
|
||||
|
||||
/// <summary>
|
||||
/// The Global SDF (textures and constants).
|
||||
/// </summary>
|
||||
GlobalSDF = 20,
|
||||
};
|
||||
|
||||
const Char* ToString(MaterialParameterType value);
|
||||
|
||||
@@ -67,7 +67,7 @@ void TerrainMaterialShader::Bind(BindParameters& params)
|
||||
bindMeta.Context = context;
|
||||
bindMeta.Constants = cb;
|
||||
bindMeta.Input = nullptr;
|
||||
bindMeta.Buffers = nullptr;
|
||||
bindMeta.Buffers = params.RenderContext.Buffers;
|
||||
bindMeta.CanSampleDepth = false;
|
||||
bindMeta.CanSampleGBuffer = false;
|
||||
MaterialParams::Bind(params.ParamsLink, bindMeta);
|
||||
|
||||
Reference in New Issue
Block a user