diff --git a/include/Nazara/Graphics/AbstractViewer.hpp b/include/Nazara/Graphics/AbstractViewer.hpp index a0e0c4352..5c1af5b5d 100644 --- a/include/Nazara/Graphics/AbstractViewer.hpp +++ b/include/Nazara/Graphics/AbstractViewer.hpp @@ -8,6 +8,7 @@ #define NAZARA_GRAPHICS_ABSTRACTVIEWER_HPP #include +#include #include #include @@ -22,6 +23,7 @@ namespace Nz AbstractViewer() = default; ~AbstractViewer() = default; + virtual const Color& GetClearColor() const = 0; virtual UInt32 GetRenderMask() const = 0; virtual const RenderTarget& GetRenderTarget() = 0; virtual ViewerInstance& GetViewerInstance() = 0; diff --git a/include/Nazara/Graphics/BakedFrameGraph.hpp b/include/Nazara/Graphics/BakedFrameGraph.hpp index fdd65c0b2..3eba46e55 100644 --- a/include/Nazara/Graphics/BakedFrameGraph.hpp +++ b/include/Nazara/Graphics/BakedFrameGraph.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -72,6 +73,7 @@ namespace Nz std::shared_ptr renderPass; std::string name; std::vector outputTextureIndices; + std::vector outputClearValues; std::vector subpasses; std::vector transitions; FramePass::ExecutionCallback executionCallback; diff --git a/include/Nazara/Graphics/Camera.hpp b/include/Nazara/Graphics/Camera.hpp index fd9c75a9a..db27ee2ac 100644 --- a/include/Nazara/Graphics/Camera.hpp +++ b/include/Nazara/Graphics/Camera.hpp @@ -28,6 +28,7 @@ namespace Nz ~Camera() = default; inline float GetAspectRatio() const; + const Color& GetClearColor() const override; inline DegreeAnglef GetFOV() const; UInt32 GetRenderMask() const override; const RenderTarget& GetRenderTarget() override; @@ -39,6 +40,7 @@ namespace Nz inline float GetZFar() const; inline float GetZNear() const; + inline void UpdateClearColor(Color color); inline void UpdateFOV(DegreeAnglef fov); inline void UpdateProjectionType(ProjectionType projectionType); inline void UpdateRenderMask(UInt32 renderMask); @@ -61,6 +63,7 @@ namespace Nz NazaraSlot(RenderTarget, OnRenderTargetSizeChange, m_onRenderTargetSizeChange); const RenderTarget* m_renderTarget; + Color m_clearColor; DegreeAnglef m_fov; ProjectionType m_projectionType; Rectf m_targetRegion; diff --git a/include/Nazara/Graphics/Camera.inl b/include/Nazara/Graphics/Camera.inl index 16399ef5a..3ab53ff10 100644 --- a/include/Nazara/Graphics/Camera.inl +++ b/include/Nazara/Graphics/Camera.inl @@ -10,6 +10,7 @@ namespace Nz { inline Camera::Camera(const RenderTarget* renderTarget, ProjectionType projectionType) : m_renderTarget(nullptr), + m_clearColor(Color::Black), m_fov(70.f), m_projectionType(projectionType), m_targetRegion(0.f, 0.f, 1.f, 1.f), @@ -24,6 +25,7 @@ namespace Nz inline Camera::Camera(const Camera& camera) : m_renderTarget(nullptr), + m_clearColor(camera.m_clearColor), m_fov(camera.m_fov), m_projectionType(camera.m_projectionType), m_targetRegion(camera.m_targetRegion), @@ -39,6 +41,7 @@ namespace Nz inline Camera::Camera(Camera&& camera) noexcept : m_renderTarget(nullptr), + m_clearColor(camera.m_clearColor), m_fov(camera.m_fov), m_projectionType(camera.m_projectionType), m_targetRegion(camera.m_targetRegion), @@ -82,6 +85,11 @@ namespace Nz return m_zNear; } + inline void Camera::UpdateClearColor(Color color) + { + m_clearColor = color; + } + inline void Camera::UpdateFOV(DegreeAnglef fov) { m_fov = fov; diff --git a/src/Nazara/Graphics/BakedFrameGraph.cpp b/src/Nazara/Graphics/BakedFrameGraph.cpp index 07b4e6eea..df68570de 100644 --- a/src/Nazara/Graphics/BakedFrameGraph.cpp +++ b/src/Nazara/Graphics/BakedFrameGraph.cpp @@ -62,7 +62,7 @@ namespace Nz builder.TextureBarrier(textureTransition.srcStageMask, textureTransition.dstStageMask, textureTransition.srcAccessMask, textureTransition.dstAccessMask, textureTransition.oldLayout, textureTransition.newLayout, *texture); } - builder.BeginRenderPass(*passData.framebuffer, *passData.renderPass, passData.renderRect); + builder.BeginRenderPass(*passData.framebuffer, *passData.renderPass, passData.renderRect, passData.outputClearValues.data(), passData.outputClearValues.size()); if (!passData.name.empty()) builder.BeginDebugRegion(passData.name, Color::Green); diff --git a/src/Nazara/Graphics/Camera.cpp b/src/Nazara/Graphics/Camera.cpp index caa4d7f87..0aa03f28e 100644 --- a/src/Nazara/Graphics/Camera.cpp +++ b/src/Nazara/Graphics/Camera.cpp @@ -8,6 +8,11 @@ namespace Nz { + const Color& Camera::GetClearColor() const + { + return m_clearColor; + } + UInt32 Camera::GetRenderMask() const { return m_renderMask; diff --git a/src/Nazara/Graphics/ForwardFramePipeline.cpp b/src/Nazara/Graphics/ForwardFramePipeline.cpp index 52be3a011..3abb65f0c 100644 --- a/src/Nazara/Graphics/ForwardFramePipeline.cpp +++ b/src/Nazara/Graphics/ForwardFramePipeline.cpp @@ -475,7 +475,7 @@ namespace Nz forwardPass.SetDepthStencilInput(viewerData.depthStencilAttachment); //forwardPass.SetDepthStencilOutput(viewerData.depthStencilAttachment); - forwardPass.SetClearColor(0, Color::Black); + forwardPass.SetClearColor(0, viewer->GetClearColor()); forwardPass.SetDepthStencilClear(1.f, 0); forwardPass.SetExecutionCallback([&]()