Fix #3342 to properly place new param in Constant Buffer

#3299
This commit is contained in:
Wojtek Figat
2025-08-14 11:53:25 +02:00
parent 5e19a9729b
commit 1087bd2445
12 changed files with 31 additions and 34 deletions

View File

@@ -20,6 +20,8 @@ float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float4 ViewSize;
float3 ViewPadding0;
float UnscaledTimeParam;
@1META_CB_END
// Shader resources

View File

@@ -19,6 +19,8 @@ float4 ViewInfo;
float4 ScreenSize;
float4 TemporalAAJitter;
float4x4 InverseViewProjectionMatrix;
float3 ViewPadding0;
float UnscaledTimeParam;
@1META_CB_END
// Shader resources

View File

@@ -1389,7 +1389,7 @@ namespace FlaxEditor.Surface.Archetypes
Size = new Float2(110, 40),
Elements = new[]
{
NodeElementArchetype.Factory.Output(0, "Scaled Time", typeof(float), 0),
NodeElementArchetype.Factory.Output(0, "Time", typeof(float), 0),
NodeElementArchetype.Factory.Output(1, "Unscaled Time", typeof(float), 1),
}
},

View File

@@ -23,6 +23,8 @@ PACK_STRUCT(struct GUIMaterialShaderData {
Float4 ViewInfo;
Float4 ScreenSize;
Float4 ViewSize;
Float3 ViewPadding0;
float UnscaledTimeParam;
});
void GUIMaterialShader::Bind(BindParameters& params)
@@ -55,7 +57,8 @@ void GUIMaterialShader::Bind(BindParameters& params)
materialData->ViewPos = Float3::Zero;
materialData->ViewFar = 0.0f;
materialData->ViewDir = Float3::Forward;
materialData->TimeParam = params.UnscaledTimeParam;
materialData->TimeParam = params.Time;
materialData->UnscaledTimeParam = params.UnscaledTime;
materialData->ViewInfo = Float4::Zero;
auto& viewport = Render2D::GetViewport();
materialData->ScreenSize = Float4(viewport.Width, viewport.Height, 1.0f / viewport.Width, 1.0f / viewport.Height);

View File

@@ -148,8 +148,7 @@ public:
const ::DrawCall* DrawCall = nullptr;
MaterialParamsLink* ParamsLink = nullptr;
void* CustomData = nullptr;
float UnscaledTimeParam;
float ScaledTimeParam;
float Time, UnscaledTime;
bool Instanced = false;
/// <summary>

View File

@@ -30,20 +30,21 @@ GPU_CB_STRUCT(MaterialShaderDataPerView {
Float3 ViewPos;
float ViewFar;
Float3 ViewDir;
float UnscaledTimeParam;
float ScaledTimeParam;
float TimeParam;
Float4 ViewInfo;
Float4 ScreenSize;
Float4 TemporalAAJitter;
Float3 LargeWorldsChunkIndex;
float LargeWorldsChunkSize;
Float3 ViewPadding0;
float UnscaledTimeParam;
});
IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderContext& renderContext)
: GPUContext(context)
, RenderContext(renderContext)
, UnscaledTimeParam(Time::Draw.UnscaledTime.GetTotalSeconds())
, ScaledTimeParam(Time::Draw.Time.GetTotalSeconds())
, Time(Time::Draw.Time.GetTotalSeconds())
, UnscaledTime(Time::Draw.UnscaledTime.GetTotalSeconds())
{
}
@@ -51,8 +52,8 @@ IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderC
: GPUContext(context)
, RenderContext(renderContext)
, DrawCall(&drawCall)
, UnscaledTimeParam(Time::Draw.UnscaledTime.GetTotalSeconds())
, ScaledTimeParam(Time::Draw.Time.GetTotalSeconds())
, Time(Time::Draw.Time.GetTotalSeconds())
, UnscaledTime(Time::Draw.UnscaledTime.GetTotalSeconds())
, Instanced(instanced)
{
}
@@ -80,8 +81,8 @@ void IMaterial::BindParameters::BindViewData()
cb.ViewPos = view.Position;
cb.ViewFar = view.Far;
cb.ViewDir = view.Direction;
cb.UnscaledTimeParam = UnscaledTimeParam;
cb.ScaledTimeParam = ScaledTimeParam;
cb.TimeParam = Time;
cb.UnscaledTimeParam = UnscaledTime;
cb.ViewInfo = view.ViewInfo;
cb.ScreenSize = view.ScreenSize;
cb.TemporalAAJitter = view.TemporalAAJitter;

View File

@@ -10,7 +10,7 @@
/// <summary>
/// Current materials shader version.
/// </summary>
#define MATERIAL_GRAPH_VERSION 173
#define MATERIAL_GRAPH_VERSION 174
class Material;
class GPUShader;

View File

@@ -21,6 +21,8 @@ PACK_STRUCT(struct PostFxMaterialShaderData {
Float4 ScreenSize;
Float4 TemporalAAJitter;
Matrix InverseViewProjectionMatrix;
Float3 ViewPadding0;
float UnscaledTimeParam;
});
void PostFxMaterialShader::Bind(BindParameters& params)
@@ -51,7 +53,8 @@ void PostFxMaterialShader::Bind(BindParameters& params)
materialData->ViewPos = view.Position;
materialData->ViewFar = view.Far;
materialData->ViewDir = view.Direction;
materialData->TimeParam = params.UnscaledTimeParam;
materialData->TimeParam = params.Time;
materialData->UnscaledTimeParam = params.UnscaledTime;
materialData->ViewInfo = view.ViewInfo;
materialData->ScreenSize = view.ScreenSize;
materialData->TemporalAAJitter = view.TemporalAAJitter;

View File

@@ -48,28 +48,14 @@ void MaterialGenerator::ProcessGroupTools(Box* box, Node* node, Value& value)
}
// Time
case 3:
{
switch (box->ID)
{
// Scaled Time
case 0:
value = getScaledTime;
break;
// Unscaled Time
case 1:
value = getUnscaledTime;
break;
default:
break;
}
value = box->ID == 1 ? getUnscaledTime : getTime;
break;
}
// Panner
case 6:
{
// Get inputs
const Value uv = tryGetValue(node->GetBox(0), getUVs).AsFloat2();
const Value time = tryGetValue(node->GetBox(1), getUnscaledTime).AsFloat();
const Value time = tryGetValue(node->GetBox(1), getTime).AsFloat();
const Value speed = tryGetValue(node->GetBox(2), Value::One).AsFloat2();
const bool useFractionalPart = (bool)node->Values[0];

View File

@@ -106,8 +106,8 @@ bool FeatureData::Init()
}
MaterialValue MaterialGenerator::getUVs(VariantType::Float2, TEXT("input.TexCoord"));
MaterialValue MaterialGenerator::getTime(VariantType::Float, TEXT("TimeParam"));
MaterialValue MaterialGenerator::getUnscaledTime(VariantType::Float, TEXT("UnscaledTimeParam"));
MaterialValue MaterialGenerator::getScaledTime(VariantType::Float, TEXT("ScaledTimeParam"));
MaterialValue MaterialGenerator::getNormal(VariantType::Float3, TEXT("input.TBN[2]"));
MaterialValue MaterialGenerator::getNormalZero(VariantType::Float3, TEXT("float3(0, 0, 1)"));
MaterialValue MaterialGenerator::getVertexColor(VariantType::Float4, TEXT("GetVertexColor(input)"));

View File

@@ -209,8 +209,8 @@ private:
public:
static MaterialValue getUVs;
static MaterialValue getTime;
static MaterialValue getUnscaledTime;
static MaterialValue getScaledTime;
static MaterialValue getNormal;
static MaterialValue getNormalZero;
static MaterialValue getVertexColor;

View File

@@ -170,13 +170,14 @@ cbuffer ViewData : register(b1)
float3 ViewPos;
float ViewFar;
float3 ViewDir;
float UnscaledTimeParam;
float ScaledTimeParam;
float TimeParam;
float4 ViewInfo;
float4 ScreenSize;
float4 TemporalAAJitter;
float3 LargeWorldsChunkIndex;
float LargeWorldsChunkSize;
float3 ViewPadding0;
float UnscaledTimeParam;
};
#endif