Working on RenderTarget example
This commit is contained in:
		
							
								
								
									
										46
									
								
								src/dawnopengl/display/BackBufferRenderTarget.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/dawnopengl/display/BackBufferRenderTarget.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| // Copyright (c) 2022 Dominic Masters | ||||
| //  | ||||
| // This software is released under the MIT License. | ||||
| // https://opensource.org/licenses/MIT | ||||
|  | ||||
| #include "BackBufferRenderTarget.hpp" | ||||
|  | ||||
| using namespace Dawn; | ||||
|  | ||||
| BackBufferRenderTarget::BackBufferRenderTarget( | ||||
|   std::weak_ptr<RenderManager> renderManager | ||||
| ) { | ||||
|   this->renderManager = renderManager; | ||||
| } | ||||
|  | ||||
| float_t BackBufferRenderTarget::getWidth() { | ||||
|   return this->width; | ||||
| } | ||||
|  | ||||
| float_t BackBufferRenderTarget::getHeight() { | ||||
|   return this->height; | ||||
| } | ||||
|  | ||||
| void BackBufferRenderTarget::setSize(float_t width, float_t height) { | ||||
|   this->width = width; | ||||
|   this->height = height; | ||||
| } | ||||
|  | ||||
| void BackBufferRenderTarget::setClearColor(struct Color color) { | ||||
|   this->clearColor = color; | ||||
| } | ||||
|  | ||||
| void BackBufferRenderTarget::clear(flag8_t clearFlags) { | ||||
|   glClearColor( | ||||
|     this->clearColor.r, | ||||
|     this->clearColor.g, | ||||
|     this->clearColor.b, | ||||
|     this->clearColor.a | ||||
|   ); | ||||
|   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | ||||
| } | ||||
|  | ||||
| void BackBufferRenderTarget::bind() { | ||||
|   glBindFramebuffer(GL_FRAMEBUFFER, 0); | ||||
|   glViewport(0, 0, (GLsizei)this->width, (GLsizei)this->height); | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/dawnopengl/display/BackBufferRenderTarget.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/dawnopengl/display/BackBufferRenderTarget.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| // Copyright (c) 2022 Dominic Masters | ||||
| //  | ||||
| // This software is released under the MIT License. | ||||
| // https://opensource.org/licenses/MIT | ||||
|  | ||||
| #pragma once | ||||
| #include "dawnopengl.hpp" | ||||
| #include "display/RenderTarget.hpp" | ||||
| #include "display/RenderManager.hpp" | ||||
|  | ||||
| namespace Dawn { | ||||
|   class BackBufferRenderTarget : public RenderTarget { | ||||
|     private: | ||||
|       std::weak_ptr<RenderManager> renderManager; | ||||
|       float_t width = 1; | ||||
|       float_t height = 1; | ||||
|       struct Color clearColor = COLOR_CORNFLOWER_BLUE; | ||||
|  | ||||
|     public: | ||||
|       BackBufferRenderTarget(std::weak_ptr<RenderManager> renderManager); | ||||
|  | ||||
|       float_t getWidth() override; | ||||
|       float_t getHeight() override; | ||||
|  | ||||
|       void setSize(float_t width, float_t height); | ||||
|  | ||||
|       void setClearColor(struct Color color); | ||||
|  | ||||
|       void clear(flag8_t clearFlags) override; | ||||
|       void bind() override; | ||||
|   }; | ||||
| } | ||||
| @@ -7,6 +7,7 @@ | ||||
| target_sources(${DAWN_TARGET_NAME} | ||||
|   PRIVATE | ||||
|     RenderManager.cpp | ||||
|     BackBufferRenderTarget.cpp | ||||
| ) | ||||
|  | ||||
| # Subdirs | ||||
|   | ||||
| @@ -6,26 +6,28 @@ | ||||
| #include "dawnopengl.hpp" | ||||
| #include "game/DawnGame.hpp" | ||||
| #include "display/RenderManager.hpp" | ||||
| #include "display/BackBufferRenderTarget.hpp" | ||||
|  | ||||
| using namespace Dawn; | ||||
|  | ||||
| RenderManager::RenderManager(std::weak_ptr<DawnGame> game) { | ||||
|   this->game = game; | ||||
|   this->renderTarget=std::make_shared<BackBufferRenderTarget>(weak_from_this()); | ||||
| } | ||||
|  | ||||
| void RenderManager::init() { | ||||
|   glClearColor( | ||||
|     0.39215686274f, | ||||
|     0.58431372549f, | ||||
|     0.9294117647f, | ||||
|     1.0f | ||||
|   ); | ||||
| } | ||||
|  | ||||
|   glViewport(0, 0, 1280, 720); | ||||
| std::shared_ptr<RenderTarget> RenderManager::getBackBuffer() { | ||||
|   return this->renderTarget; | ||||
| } | ||||
|  | ||||
| void RenderManager::update() { | ||||
|   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | ||||
|   this->getBackBuffer()->bind(); | ||||
|   this->getBackBuffer()->clear( | ||||
|     RENDER_TARGET_CLEAR_FLAG_COLOR | | ||||
|     RENDER_TARGET_CLEAR_FLAG_DEPTH | ||||
|   ); | ||||
| } | ||||
|  | ||||
| RenderManager::~RenderManager() { | ||||
|   | ||||
							
								
								
									
										36
									
								
								src/dawnopengl/display/RenderManager.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/dawnopengl/display/RenderManager.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // Copyright (c) 2022 Dominic Masters | ||||
| //  | ||||
| // This software is released under the MIT License. | ||||
| // https://opensource.org/licenses/MIT | ||||
|  | ||||
| #pragma once | ||||
| #include "display/_RenderManager.hpp" | ||||
|  | ||||
| namespace Dawn { | ||||
|   class BackBufferRenderTarget; | ||||
|  | ||||
|   class RenderManager : | ||||
|     public IRenderManager, | ||||
|     public std::enable_shared_from_this<RenderManager> | ||||
|   { | ||||
|  | ||||
|     public: | ||||
|       std::shared_ptr<BackBufferRenderTarget> renderTarget; | ||||
|      | ||||
|       /** | ||||
|        * Construct a new RenderManager for a game instance. | ||||
|        *  | ||||
|        * @param game Game instance this render manager belongs to. | ||||
|        */ | ||||
|       RenderManager(std::weak_ptr<DawnGame> game); | ||||
|  | ||||
|       std::shared_ptr<RenderTarget> getBackBuffer() override; | ||||
|       void init() override; | ||||
|       void update() override; | ||||
|        | ||||
|       /** | ||||
|        * Destroy a previously initialized RenderManager. | ||||
|        */ | ||||
|       ~RenderManager(); | ||||
|   }; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user