Wire camera-config post-process requests

This commit is contained in:
2026-04-06 14:14:11 +08:00
parent 6a1ed4be68
commit ff49120ffe
8 changed files with 330 additions and 164 deletions

View File

@@ -5,6 +5,7 @@
#include <XCEngine/Core/Asset/ResourceHandle.h>
#include <XCEngine/Core/Math/Color.h>
#include <XCEngine/Core/Math/Rect.h>
#include <XCEngine/Core/Math/Vector4.h>
#include <XCEngine/Resources/Material/Material.h>
#include <string>
@@ -89,6 +90,12 @@ public:
const Math::Color& GetSkyboxBottomColor() const { return m_skyboxBottomColor; }
void SetSkyboxBottomColor(const Math::Color& value) { m_skyboxBottomColor = value; }
bool IsColorScalePostProcessEnabled() const { return m_colorScalePostProcessEnabled; }
void SetColorScalePostProcessEnabled(bool value) { m_colorScalePostProcessEnabled = value; }
const Math::Vector4& GetColorScalePostProcessScale() const { return m_colorScalePostProcessScale; }
void SetColorScalePostProcessScale(const Math::Vector4& value) { m_colorScalePostProcessScale = value; }
void Serialize(std::ostream& os) const override;
void Deserialize(std::istream& is) override;
@@ -112,6 +119,8 @@ private:
Math::Color m_skyboxTopColor = Math::Color(0.18f, 0.36f, 0.74f, 1.0f);
Math::Color m_skyboxHorizonColor = Math::Color(0.78f, 0.84f, 0.92f, 1.0f);
Math::Color m_skyboxBottomColor = Math::Color(0.92f, 0.93f, 0.95f, 1.0f);
bool m_colorScalePostProcessEnabled = false;
Math::Vector4 m_colorScalePostProcessScale = Math::Vector4::One();
};
} // namespace Components

View File

@@ -4,6 +4,7 @@
#include <XCEngine/Rendering/Planning/CameraRenderRequest.h>
#include <XCEngine/Rendering/Planning/SceneRenderRequestPlanner.h>
#include <memory>
#include <vector>
namespace XCEngine {
@@ -15,13 +16,14 @@ class Scene;
namespace Rendering {
class RenderPipelineAsset;
class FullscreenPassSurfaceCache;
class SceneRenderer {
public:
SceneRenderer();
explicit SceneRenderer(std::unique_ptr<RenderPipeline> pipeline);
explicit SceneRenderer(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
~SceneRenderer() = default;
~SceneRenderer();
void SetPipeline(std::unique_ptr<RenderPipeline> pipeline);
void SetPipelineAsset(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
@@ -32,7 +34,7 @@ public:
const Components::Scene& scene,
Components::CameraComponent* overrideCamera,
const RenderContext& context,
const RenderSurface& surface) const;
const RenderSurface& surface);
bool Render(const CameraRenderRequest& request);
bool Render(const std::vector<CameraRenderRequest>& requests);
@@ -43,8 +45,15 @@ public:
const RenderSurface& surface);
private:
void PrepareOwnedCameraPostProcessState(size_t requestCount);
void AttachCameraPostProcessRequests(
const RenderContext& context,
std::vector<CameraRenderRequest>& requests);
SceneRenderRequestPlanner m_requestPlanner;
CameraRenderer m_cameraRenderer;
std::vector<std::unique_ptr<RenderPassSequence>> m_ownedPostProcessSequences;
std::vector<std::unique_ptr<FullscreenPassSurfaceCache>> m_ownedPostProcessSourceSurfaces;
};
} // namespace Rendering