diff --git a/Engine/src/Engine/Camera/Camera.cpp b/Engine/src/Engine/Camera/Camera.cpp index ce54896..41679f7 100644 --- a/Engine/src/Engine/Camera/Camera.cpp +++ b/Engine/src/Engine/Camera/Camera.cpp @@ -6,8 +6,8 @@ namespace Light { - Camera::Camera(const glm::vec2& position, float aspectRatio, float zoomLevel) - : m_Up(0.0f, 1.0f, 0.0f), m_Position(position), m_AspectRatio(aspectRatio), m_ZoomLevel(zoomLevel) + Camera::Camera(const glm::vec2& position, float aspectRatio, float zoomLevel, const glm::vec4& clearColor /* = glm::vec4(0.1f, 0.3f, 0.7f, 1.0f) */) + : m_Up(0.0f, 1.0f, 0.0f), m_Position(position), m_AspectRatio(aspectRatio), m_ZoomLevel(zoomLevel), m_ClearColor(clearColor) { } diff --git a/Engine/src/Engine/Camera/Camera.h b/Engine/src/Engine/Camera/Camera.h index 49cf477..5a57e1c 100644 --- a/Engine/src/Engine/Camera/Camera.h +++ b/Engine/src/Engine/Camera/Camera.h @@ -18,8 +18,10 @@ namespace Light { glm::mat4 m_Projection; glm::mat4 m_View; + glm::vec4 m_ClearColor; + public: - Camera(const glm::vec2& position, float aspectRatio, float zoomLevel); + Camera(const glm::vec2& position, float aspectRatio, float zoomLevel, const glm::vec4& clearColor = glm::vec4(0.1f, 0.3f, 0.7f, 1.0f)); // CAMERA // void CalculateView(); @@ -30,6 +32,8 @@ namespace Light { inline const glm::mat4& GetView() const { return m_View; } inline const glm::mat4& GetProjection() const { return m_Projection; } + inline const glm::vec4& GetClearColor() const { return m_ClearColor; } + // CAMERA_CONTROLLER // void Move(const glm::vec2& position); }; diff --git a/Engine/src/Engine/Graphics/RenderCommand.h b/Engine/src/Engine/Graphics/RenderCommand.h index 681633a..473e408 100644 --- a/Engine/src/Engine/Graphics/RenderCommand.h +++ b/Engine/src/Engine/Graphics/RenderCommand.h @@ -2,6 +2,8 @@ #include "Base.h" +#include + struct GLFWwindow; namespace Light { @@ -19,7 +21,7 @@ namespace Light { virtual ~RenderCommand() = default; virtual void SwapBuffers() = 0; - virtual void ClearBackBuffer() = 0; + virtual void ClearBackBuffer(const glm::vec4& clearColor) = 0; virtual void Draw(unsigned int count) = 0; virtual void DrawIndexed(unsigned int count) = 0; diff --git a/Engine/src/Engine/Graphics/Renderer.cpp b/Engine/src/Engine/Graphics/Renderer.cpp index 76917f5..529dbd0 100644 --- a/Engine/src/Engine/Graphics/Renderer.cpp +++ b/Engine/src/Engine/Graphics/Renderer.cpp @@ -122,7 +122,7 @@ namespace Light { void Renderer::EndFrame() { m_RenderCommand->SwapBuffers(); - m_RenderCommand->ClearBackBuffer(); + m_RenderCommand->ClearBackBuffer(m_Camera->GetClearColor()); } void Renderer::BeginSceneImpl(const std::shared_ptr& camera, const std::shared_ptr& targetFrameBuffer /* = nullptr */) @@ -135,8 +135,9 @@ namespace Light { m_RenderCommand->DefaultTargetFramebuffer(); + m_Camera = camera; glm::mat4* map = (glm::mat4*)m_ViewProjectionBuffer->Map(); - map[0] = camera->GetProjection() * camera->GetView(); + map[0] = m_Camera->GetProjection() * m_Camera->GetView(); m_ViewProjectionBuffer->UnMap(); m_QuadRenderer.Map(); diff --git a/Engine/src/Engine/Graphics/Renderer.h b/Engine/src/Engine/Graphics/Renderer.h index 77f2775..ad102d5 100644 --- a/Engine/src/Engine/Graphics/Renderer.h +++ b/Engine/src/Engine/Graphics/Renderer.h @@ -46,6 +46,8 @@ namespace Light { std::shared_ptr m_TargetFramebuffer; + std::shared_ptr m_Camera; + public: static Renderer* Create(GLFWwindow* windowHandle, std::shared_ptr sharedContext); diff --git a/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.cpp b/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.cpp index e213f56..1c2c15d 100644 --- a/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.cpp +++ b/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.cpp @@ -26,10 +26,9 @@ namespace Light { #endif } - void dxRenderCommand::ClearBackBuffer() + void dxRenderCommand::ClearBackBuffer(const glm::vec4& clearColor) { - float colors[] = { 0.1, 0.35f, 0.46f, 1.0f }; // #todo: use a local variable for this - m_Context->GetDeviceContext()->ClearRenderTargetView(m_Context->GetRenderTargetView().Get(), colors); + m_Context->GetDeviceContext()->ClearRenderTargetView(m_Context->GetRenderTargetView().Get(), &clearColor[0]); } void dxRenderCommand::Draw(unsigned int count) diff --git a/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.h b/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.h index b6597d5..f0f2130 100644 --- a/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.h +++ b/Engine/src/Platform/GraphicsAPI/DirectX/dxRenderCommand.h @@ -19,7 +19,7 @@ namespace Light { dxRenderCommand(std::shared_ptr sharedContext); virtual void SwapBuffers() override; - virtual void ClearBackBuffer() override; + virtual void ClearBackBuffer(const glm::vec4& clearColor) override; virtual void Draw(unsigned int count) override; virtual void DrawIndexed(unsigned int count) override; diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.cpp b/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.cpp index 7574456..4ef8d19 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.cpp +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.cpp @@ -15,9 +15,9 @@ namespace Light { glfwSwapBuffers(m_WindowHandle); } - void glRenderCommand::ClearBackBuffer() + void glRenderCommand::ClearBackBuffer(const glm::vec4& clearColor) { - glClearColor(0.25f, 0.45f, 0.91f, 1.0f); // #todo: use a variable for this + glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a); glClear(GL_COLOR_BUFFER_BIT); } diff --git a/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.h b/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.h index 684e946..657ab2f 100644 --- a/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.h +++ b/Engine/src/Platform/GraphicsAPI/OpenGL/glRenderCommand.h @@ -14,7 +14,7 @@ namespace Light { glRenderCommand(GLFWwindow* windowHandle); void SwapBuffers() override; - void ClearBackBuffer() override; + void ClearBackBuffer(const glm::vec4& clearColor) override; void Draw(unsigned int count) override; void DrawIndexed(unsigned int count) override;