Lower final color into final output stage
This commit is contained in:
@@ -45,17 +45,18 @@ public:
|
||||
const RenderSurface& surface);
|
||||
|
||||
private:
|
||||
void PrepareOwnedCameraPostProcessState(size_t requestCount);
|
||||
void PrepareOwnedFullscreenStageState(size_t requestCount);
|
||||
void ResolveCameraFinalColorPolicies(
|
||||
std::vector<CameraRenderRequest>& requests) const;
|
||||
void AttachCameraPostProcessRequests(
|
||||
void AttachFullscreenStageRequests(
|
||||
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;
|
||||
std::vector<std::unique_ptr<RenderPassSequence>> m_ownedFinalOutputSequences;
|
||||
std::vector<std::unique_ptr<FullscreenPassSurfaceCache>> m_ownedFullscreenStageSurfaces;
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Core/Asset/ResourceHandle.h>
|
||||
#include <XCEngine/Core/Containers/String.h>
|
||||
#include <XCEngine/Rendering/Planning/FinalColorSettings.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/RHI/RHIEnums.h>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
class RHIDescriptorPool;
|
||||
class RHIDescriptorSet;
|
||||
class RHIPipelineLayout;
|
||||
class RHIPipelineState;
|
||||
class RHISampler;
|
||||
class RHIDevice;
|
||||
} // namespace RHI
|
||||
|
||||
namespace Rendering {
|
||||
namespace Passes {
|
||||
|
||||
class BuiltinFinalColorPass final : public RenderPass {
|
||||
public:
|
||||
struct OwnedDescriptorSet {
|
||||
RHI::RHIDescriptorPool* pool = nullptr;
|
||||
RHI::RHIDescriptorSet* set = nullptr;
|
||||
};
|
||||
|
||||
explicit BuiltinFinalColorPass(
|
||||
const FinalColorSettings& settings = {},
|
||||
Containers::String shaderPath = {});
|
||||
~BuiltinFinalColorPass() override;
|
||||
|
||||
const char* GetName() const override;
|
||||
bool Execute(const RenderPassContext& context) override;
|
||||
void Shutdown() override;
|
||||
|
||||
void SetSettings(const FinalColorSettings& settings);
|
||||
const FinalColorSettings& GetSettings() const;
|
||||
|
||||
void SetShaderPath(const Containers::String& shaderPath);
|
||||
const Containers::String& GetShaderPath() const;
|
||||
|
||||
private:
|
||||
bool EnsureInitialized(const RenderContext& renderContext, RHI::Format renderTargetFormat);
|
||||
bool CreateResources(const RenderContext& renderContext, RHI::Format renderTargetFormat);
|
||||
void DestroyResources();
|
||||
void DestroyOwnedDescriptorSet(OwnedDescriptorSet& descriptorSet);
|
||||
|
||||
Containers::String m_shaderPath;
|
||||
FinalColorSettings m_settings = {};
|
||||
RHI::RHIDevice* m_device = nullptr;
|
||||
RHI::RHIType m_backendType = RHI::RHIType::D3D12;
|
||||
RHI::Format m_renderTargetFormat = RHI::Format::Unknown;
|
||||
Resources::ResourceHandle<Resources::Shader> m_shader;
|
||||
RHI::RHISampler* m_sampler = nullptr;
|
||||
RHI::RHIPipelineLayout* m_pipelineLayout = nullptr;
|
||||
RHI::RHIPipelineState* m_pipelineState = nullptr;
|
||||
OwnedDescriptorSet m_constantsSet = {};
|
||||
OwnedDescriptorSet m_textureSet = {};
|
||||
OwnedDescriptorSet m_samplerSet = {};
|
||||
RHI::RHIResourceView* m_boundSourceColorView = nullptr;
|
||||
};
|
||||
|
||||
} // namespace Passes
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Rendering/Passes/BuiltinFinalColorPass.h>
|
||||
#include <XCEngine/Rendering/Planning/FinalColorSettings.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
inline std::unique_ptr<RenderPassSequence> BuildFinalColorPassSequence(
|
||||
const ResolvedFinalColorPolicy& finalColorPolicy) {
|
||||
if (!finalColorPolicy.RequiresProcessing()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<RenderPassSequence> sequence = std::make_unique<RenderPassSequence>();
|
||||
sequence->AddPass(std::make_unique<Passes::BuiltinFinalColorPass>(finalColorPolicy));
|
||||
return sequence;
|
||||
}
|
||||
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
@@ -30,6 +30,7 @@ Containers::String GetBuiltinShadowCasterShaderPath();
|
||||
Containers::String GetBuiltinObjectIdShaderPath();
|
||||
Containers::String GetBuiltinSkyboxShaderPath();
|
||||
Containers::String GetBuiltinColorScalePostProcessShaderPath();
|
||||
Containers::String GetBuiltinFinalColorShaderPath();
|
||||
Containers::String GetBuiltinDefaultPrimitiveTexturePath();
|
||||
|
||||
bool TryParseBuiltinPrimitiveType(const Containers::String& path, BuiltinPrimitiveType& outPrimitiveType);
|
||||
|
||||
Reference in New Issue
Block a user