Camera ClearColor

- Camera now has a clear color
- The backbuffer is now cleared using the currently bound camera's
      clear color
This commit is contained in:
Light 2021-07-24 10:00:15 +04:30
parent 0513ae009f
commit 4abde46290
9 changed files with 21 additions and 13 deletions

View file

@ -6,8 +6,8 @@
namespace Light { namespace Light {
Camera::Camera(const glm::vec2& position, float aspectRatio, float 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_Up(0.0f, 1.0f, 0.0f), m_Position(position), m_AspectRatio(aspectRatio), m_ZoomLevel(zoomLevel), m_ClearColor(clearColor)
{ {
} }

View file

@ -18,8 +18,10 @@ namespace Light {
glm::mat4 m_Projection; glm::mat4 m_Projection;
glm::mat4 m_View; glm::mat4 m_View;
glm::vec4 m_ClearColor;
public: 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 // // CAMERA //
void CalculateView(); void CalculateView();
@ -30,6 +32,8 @@ namespace Light {
inline const glm::mat4& GetView() const { return m_View; } inline const glm::mat4& GetView() const { return m_View; }
inline const glm::mat4& GetProjection() const { return m_Projection; } inline const glm::mat4& GetProjection() const { return m_Projection; }
inline const glm::vec4& GetClearColor() const { return m_ClearColor; }
// CAMERA_CONTROLLER // // CAMERA_CONTROLLER //
void Move(const glm::vec2& position); void Move(const glm::vec2& position);
}; };

View file

@ -2,6 +2,8 @@
#include "Base.h" #include "Base.h"
#include <glm/glm.hpp>
struct GLFWwindow; struct GLFWwindow;
namespace Light { namespace Light {
@ -19,7 +21,7 @@ namespace Light {
virtual ~RenderCommand() = default; virtual ~RenderCommand() = default;
virtual void SwapBuffers() = 0; 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 Draw(unsigned int count) = 0;
virtual void DrawIndexed(unsigned int count) = 0; virtual void DrawIndexed(unsigned int count) = 0;

View file

@ -122,7 +122,7 @@ namespace Light {
void Renderer::EndFrame() void Renderer::EndFrame()
{ {
m_RenderCommand->SwapBuffers(); m_RenderCommand->SwapBuffers();
m_RenderCommand->ClearBackBuffer(); m_RenderCommand->ClearBackBuffer(m_Camera->GetClearColor());
} }
void Renderer::BeginSceneImpl(const std::shared_ptr<Camera>& camera, const std::shared_ptr<Framebuffer>& targetFrameBuffer /* = nullptr */) void Renderer::BeginSceneImpl(const std::shared_ptr<Camera>& camera, const std::shared_ptr<Framebuffer>& targetFrameBuffer /* = nullptr */)
@ -135,8 +135,9 @@ namespace Light {
m_RenderCommand->DefaultTargetFramebuffer(); m_RenderCommand->DefaultTargetFramebuffer();
m_Camera = camera;
glm::mat4* map = (glm::mat4*)m_ViewProjectionBuffer->Map(); 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_ViewProjectionBuffer->UnMap();
m_QuadRenderer.Map(); m_QuadRenderer.Map();

View file

@ -46,6 +46,8 @@ namespace Light {
std::shared_ptr<Framebuffer> m_TargetFramebuffer; std::shared_ptr<Framebuffer> m_TargetFramebuffer;
std::shared_ptr<Camera> m_Camera;
public: public:
static Renderer* Create(GLFWwindow* windowHandle, std::shared_ptr<SharedContext> sharedContext); static Renderer* Create(GLFWwindow* windowHandle, std::shared_ptr<SharedContext> sharedContext);

View file

@ -26,10 +26,9 @@ namespace Light {
#endif #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(), &clearColor[0]);
m_Context->GetDeviceContext()->ClearRenderTargetView(m_Context->GetRenderTargetView().Get(), colors);
} }
void dxRenderCommand::Draw(unsigned int count) void dxRenderCommand::Draw(unsigned int count)

View file

@ -19,7 +19,7 @@ namespace Light {
dxRenderCommand(std::shared_ptr<dxSharedContext> sharedContext); dxRenderCommand(std::shared_ptr<dxSharedContext> sharedContext);
virtual void SwapBuffers() override; 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 Draw(unsigned int count) override;
virtual void DrawIndexed(unsigned int count) override; virtual void DrawIndexed(unsigned int count) override;

View file

@ -15,9 +15,9 @@ namespace Light {
glfwSwapBuffers(m_WindowHandle); 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); glClear(GL_COLOR_BUFFER_BIT);
} }

View file

@ -14,7 +14,7 @@ namespace Light {
glRenderCommand(GLFWwindow* windowHandle); glRenderCommand(GLFWwindow* windowHandle);
void SwapBuffers() override; void SwapBuffers() override;
void ClearBackBuffer() override; void ClearBackBuffer(const glm::vec4& clearColor) override;
void Draw(unsigned int count) override; void Draw(unsigned int count) override;
void DrawIndexed(unsigned int count) override; void DrawIndexed(unsigned int count) override;