diff --git a/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp b/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp index d8d68e912..70eb76015 100644 --- a/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DecalMaterialShader.cpp @@ -3,7 +3,6 @@ #include "DecalMaterialShader.h" #include "MaterialParams.h" #include "Engine/Core/Math/OrientedBoundingBox.h" -#include "Engine/Engine/Time.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/RenderBuffers.h" @@ -64,7 +63,7 @@ void DecalMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; diff --git a/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp b/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp index babfaf830..9bc6df82d 100644 --- a/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp @@ -14,7 +14,6 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/GPULimits.h" -#include "Engine/Engine/Time.h" #include "Engine/Graphics/RenderTask.h" PACK_STRUCT(struct DeferredMaterialShaderData { @@ -89,7 +88,7 @@ void DeferredMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; const float scaleX = Vector3(drawCall.World.M11, drawCall.World.M12, drawCall.World.M13).Length(); diff --git a/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp b/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp index dafe13d46..3a96812d0 100644 --- a/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DeformableMaterialShader.cpp @@ -12,7 +12,6 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/GPULimits.h" -#include "Engine/Engine/Time.h" #include "Engine/Graphics/RenderTask.h" PACK_STRUCT(struct DeformableMaterialShaderData { @@ -76,7 +75,7 @@ void DeformableMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; materialData->WorldDeterminantSign = drawCall.WorldDeterminantSign; diff --git a/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp b/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp index 2ea17c9cd..816c98b89 100644 --- a/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp @@ -3,7 +3,6 @@ #include "ForwardMaterialShader.h" #include "MaterialShaderFeatures.h" #include "MaterialParams.h" -#include "Engine/Engine/Time.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPULimits.h" #include "Engine/Graphics/RenderView.h" @@ -95,7 +94,7 @@ void ForwardMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; const float scaleX = Vector3(drawCall.World.M11, drawCall.World.M12, drawCall.World.M13).Length(); diff --git a/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp b/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp index 769d36557..6b783602e 100644 --- a/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp @@ -2,10 +2,8 @@ #include "GUIMaterialShader.h" #include "MaterialParams.h" -#include "Engine/Engine/Time.h" #include "Engine/Core/Math/Viewport.h" #include "Engine/Graphics/GPUDevice.h" -#include "Engine/Graphics/RenderTask.h" #include "Engine/Graphics/Shaders/GPUShader.h" #include "Engine/Graphics/RenderView.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" @@ -53,7 +51,7 @@ void GUIMaterialShader::Bind(BindParameters& params) materialData->ViewPos = Vector3::Zero; materialData->ViewFar = 0.0f; materialData->ViewDir = Vector3::Forward; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = Vector4::Zero; auto& viewport = Render2D::GetViewport(); materialData->ScreenSize = Vector4(viewport.Width, viewport.Height, 1.0f / viewport.Width, 1.0f / viewport.Height); diff --git a/Source/Engine/Graphics/Materials/IMaterial.h b/Source/Engine/Graphics/Materials/IMaterial.h index 4d61656e8..8352f0625 100644 --- a/Source/Engine/Graphics/Materials/IMaterial.h +++ b/Source/Engine/Graphics/Materials/IMaterial.h @@ -139,35 +139,16 @@ public: int32 DrawCallsCount; MaterialParamsLink* ParamsLink = nullptr; void* CustomData = nullptr; + float TimeParam; /// /// The input scene color. It's optional and used in forward/postFx rendering. /// GPUTextureView* Input = nullptr; - BindParameters(::GPUContext* context, const ::RenderContext& renderContext) - : GPUContext(context) - , RenderContext(renderContext) - , FirstDrawCall(nullptr) - , DrawCallsCount(0) - { - } - - BindParameters(::GPUContext* context, const ::RenderContext& renderContext, const DrawCall& drawCall) - : GPUContext(context) - , RenderContext(renderContext) - , FirstDrawCall(&drawCall) - , DrawCallsCount(1) - { - } - - BindParameters(::GPUContext* context, const ::RenderContext& renderContext, const DrawCall* firstDrawCall, int32 drawCallsCount) - : GPUContext(context) - , RenderContext(renderContext) - , FirstDrawCall(firstDrawCall) - , DrawCallsCount(drawCallsCount) - { - } + BindParameters(::GPUContext* context, const ::RenderContext& renderContext); + BindParameters(::GPUContext* context, const ::RenderContext& renderContext, const DrawCall& drawCall); + BindParameters(::GPUContext* context, const ::RenderContext& renderContext, const DrawCall* firstDrawCall, int32 drawCallsCount); }; /// diff --git a/Source/Engine/Graphics/Materials/MaterialShader.cpp b/Source/Engine/Graphics/Materials/MaterialShader.cpp index 95a6f556e..5191357ad 100644 --- a/Source/Engine/Graphics/Materials/MaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/MaterialShader.cpp @@ -7,6 +7,7 @@ #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/Shaders/GPUConstantBuffer.h" #include "Engine/Graphics/Shaders/GPUShader.h" +#include "Engine/Engine/Time.h" #include "DecalMaterialShader.h" #include "PostFxMaterialShader.h" #include "ForwardMaterialShader.h" @@ -17,6 +18,33 @@ #include "DeformableMaterialShader.h" #include "VolumeParticleMaterialShader.h" +IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderContext& renderContext) + : GPUContext(context) + , RenderContext(renderContext) + , FirstDrawCall(nullptr) + , DrawCallsCount(0) + , TimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) +{ +} + +IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderContext& renderContext, const DrawCall& drawCall) + : GPUContext(context) + , RenderContext(renderContext) + , FirstDrawCall(&drawCall) + , DrawCallsCount(1) + , TimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) +{ +} + +IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderContext& renderContext, const DrawCall* firstDrawCall, int32 drawCallsCount) + : GPUContext(context) + , RenderContext(renderContext) + , FirstDrawCall(firstDrawCall) + , DrawCallsCount(drawCallsCount) + , TimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) +{ +} + GPUPipelineState* MaterialShader::PipelineStateCache::InitPS(CullMode mode, bool wireframe) { Desc.CullMode = mode; diff --git a/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp b/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp index 4180f0df5..fc475ea11 100644 --- a/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/ParticleMaterialShader.cpp @@ -3,7 +3,6 @@ #include "ParticleMaterialShader.h" #include "MaterialShaderFeatures.h" #include "MaterialParams.h" -#include "Engine/Engine/Time.h" #include "Engine/Renderer/DrawCall.h" #include "Engine/Renderer/RenderList.h" #include "Engine/Graphics/RenderView.h" @@ -112,7 +111,7 @@ void ParticleMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; materialData->SortedIndicesOffset = drawCall.Particle.Particles->GPU.SortedIndices && params.RenderContext.View.Pass != DrawPass::Depth ? sortedIndicesOffset : 0xFFFFFFFF; diff --git a/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp b/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp index a55455173..804445029 100644 --- a/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp @@ -2,7 +2,6 @@ #include "PostFxMaterialShader.h" #include "MaterialParams.h" -#include "Engine/Engine/Time.h" #include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/RenderTask.h" #include "Engine/Graphics/Shaders/GPUShader.h" @@ -47,7 +46,7 @@ void PostFxMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; materialData->TemporalAAJitter = view.TemporalAAJitter; diff --git a/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp b/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp index ec3c038a5..f975980de 100644 --- a/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/TerrainMaterialShader.cpp @@ -3,7 +3,6 @@ #include "TerrainMaterialShader.h" #include "MaterialShaderFeatures.h" #include "MaterialParams.h" -#include "Engine/Engine/Time.h" #include "Engine/Graphics/GPUContext.h" #include "Engine/Graphics/GPULimits.h" #include "Engine/Graphics/GPUDevice.h" @@ -80,7 +79,7 @@ void TerrainMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; const float scaleX = Vector3(drawCall.World.M11, drawCall.World.M12, drawCall.World.M13).Length(); diff --git a/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp b/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp index 5a536e926..a23dcb253 100644 --- a/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/VolumeParticleMaterialShader.cpp @@ -3,7 +3,6 @@ #include "VolumeParticleMaterialShader.h" #include "MaterialShaderFeatures.h" #include "MaterialParams.h" -#include "Engine/Engine/Time.h" #include "Engine/Renderer/DrawCall.h" #include "Engine/Renderer/VolumetricFogPass.h" #include "Engine/Renderer/RenderList.h" @@ -90,7 +89,7 @@ void VolumeParticleMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = Time::Draw.UnscaledTime.GetTotalSeconds(); + materialData->TimeParam = params.TimeParam; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; materialData->GridSize = customData->GridSize;