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