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:
parent
0513ae009f
commit
4abde46290
9 changed files with 21 additions and 13 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue