feat(editor): persist graphics settings and shadow overrides

This commit is contained in:
2026-04-19 00:01:49 +08:00
parent 9ca7960346
commit 8257403036
31 changed files with 1233 additions and 134 deletions

View File

@@ -2,6 +2,7 @@
#include <XCEngine/Components/Component.h>
#include <XCEngine/Core/Math/Color.h>
#include <XCEngine/Rendering/Shadow/DirectionalShadowSettings.h>
namespace XCEngine {
namespace Components {
@@ -34,6 +35,34 @@ public:
bool GetCastsShadows() const { return m_castsShadows; }
void SetCastsShadows(bool value) { m_castsShadows = value; }
bool GetOverridesDirectionalShadowSettings() const { return m_overrideDirectionalShadowSettings; }
void SetOverridesDirectionalShadowSettings(bool value) { m_overrideDirectionalShadowSettings = value; }
const Rendering::DirectionalShadowSamplingSettings& GetDirectionalShadowSamplingSettings() const {
return m_directionalShadowSampling;
}
void SetDirectionalShadowSamplingSettings(const Rendering::DirectionalShadowSamplingSettings& value);
const Rendering::DirectionalShadowCasterBiasSettings& GetDirectionalShadowCasterBiasSettings() const {
return m_directionalShadowCasterBias;
}
void SetDirectionalShadowCasterBiasSettings(const Rendering::DirectionalShadowCasterBiasSettings& value);
float GetDirectionalShadowReceiverDepthBias() const { return m_directionalShadowSampling.receiverDepthBias; }
void SetDirectionalShadowReceiverDepthBias(float value);
float GetDirectionalShadowNormalBiasScale() const { return m_directionalShadowSampling.normalBiasScale; }
void SetDirectionalShadowNormalBiasScale(float value);
float GetDirectionalShadowStrength() const { return m_directionalShadowSampling.shadowStrength; }
void SetDirectionalShadowStrength(float value);
float GetDirectionalShadowDepthBiasFactor() const { return m_directionalShadowCasterBias.depthBiasFactor; }
void SetDirectionalShadowDepthBiasFactor(float value);
int GetDirectionalShadowDepthBiasUnits() const { return m_directionalShadowCasterBias.depthBiasUnits; }
void SetDirectionalShadowDepthBiasUnits(int value);
void Serialize(std::ostream& os) const override;
void Deserialize(std::istream& is) override;
@@ -44,6 +73,9 @@ private:
float m_range = 10.0f;
float m_spotAngle = 30.0f;
bool m_castsShadows = false;
bool m_overrideDirectionalShadowSettings = false;
Rendering::DirectionalShadowSamplingSettings m_directionalShadowSampling = {};
Rendering::DirectionalShadowCasterBiasSettings m_directionalShadowCasterBias = {};
};
} // namespace Components

View File

@@ -0,0 +1,50 @@
#pragma once
#include <XCEngine/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h>
namespace XCEngine {
namespace Rendering {
class GraphicsSettingsState final {
public:
GraphicsSettingsState() = default;
void SetManagedRenderPipelineBridge(
std::shared_ptr<const Pipelines::ManagedRenderPipelineBridge> bridge);
void ClearManagedRenderPipelineBridge();
std::shared_ptr<const Pipelines::ManagedRenderPipelineBridge>
GetManagedRenderPipelineBridge() const {
return m_managedRenderPipelineBridge;
}
size_t GetManagedRenderPipelineBridgeGeneration() const {
return m_managedRenderPipelineBridgeGeneration;
}
size_t GetEnvironmentGeneration() const {
return m_environmentGeneration;
}
void SetRenderPipelineAssetDescriptor(
const Pipelines::ManagedRenderPipelineAssetDescriptor& descriptor);
void ClearRenderPipelineAssetDescriptor();
Pipelines::ManagedRenderPipelineAssetDescriptor
GetRenderPipelineAssetDescriptor() const {
return m_renderPipelineAssetDescriptor;
}
private:
void BumpEnvironmentGeneration();
Pipelines::ManagedRenderPipelineAssetDescriptor
m_renderPipelineAssetDescriptor = {};
std::shared_ptr<const Pipelines::ManagedRenderPipelineBridge>
m_managedRenderPipelineBridge = nullptr;
size_t m_managedRenderPipelineBridgeGeneration = 1u;
size_t m_environmentGeneration = 1u;
};
GraphicsSettingsState& GetGraphicsSettingsState();
} // namespace Rendering
} // namespace XCEngine