The fruits of my labor
This commit is contained in:
		| @@ -14,13 +14,13 @@ RenderManager::RenderManager(DawnGame *game) : | ||||
|   backBuffer(*this), | ||||
|   renderPipeline(this) | ||||
| { | ||||
|   this->uiShader = new UIShader(); | ||||
| } | ||||
|  | ||||
| void RenderManager::init() { | ||||
|   this->renderPipeline.init(); | ||||
|    | ||||
|   this->simpleShader.compile(); | ||||
|   this->uiShader->compile(); | ||||
|   this->uiShaderProgram.compile(); | ||||
|  | ||||
|   // Prepare the initial values | ||||
|   glEnable(GL_TEXTURE_2D); | ||||
| @@ -37,10 +37,6 @@ RenderPipeline * RenderManager::getRenderPipeline() { | ||||
|   return &this->renderPipeline; | ||||
| } | ||||
|  | ||||
| UIShader * RenderManager::getUIShader() { | ||||
|   return this->uiShader; | ||||
| } | ||||
|  | ||||
| void RenderManager::setRenderFlags(renderflag_t flags) { | ||||
|   this->renderFlags = flags; | ||||
|    | ||||
| @@ -62,5 +58,4 @@ void RenderManager::update() { | ||||
| } | ||||
|  | ||||
| RenderManager::~RenderManager() { | ||||
|   delete this->uiShader; | ||||
| } | ||||
| @@ -7,6 +7,7 @@ | ||||
| #include "display/_RenderManager.hpp" | ||||
| #include "display/BackBufferRenderTarget.hpp" | ||||
| #include "display/shader/SimpleTexturedShader.hpp" | ||||
| #include "display/shader/UIShaderProgram.hpp" | ||||
| #include "display/RenderPipeline.hpp" | ||||
|  | ||||
| namespace Dawn { | ||||
| @@ -17,7 +18,7 @@ namespace Dawn { | ||||
|     public: | ||||
|       BackBufferRenderTarget backBuffer; | ||||
|       SimpleTexturedShader simpleShader; | ||||
|       UIShader *uiShader; | ||||
|       UIShaderProgram uiShaderProgram; | ||||
|  | ||||
|       /** | ||||
|        * Construct a new RenderManager for a game instance. | ||||
| @@ -26,7 +27,6 @@ namespace Dawn { | ||||
|        | ||||
|       RenderTarget * getBackBuffer() override; | ||||
|       RenderPipeline * getRenderPipeline() override; | ||||
|       UIShader * getUIShader() override; | ||||
|       void setRenderFlags(renderflag_t renderFlags) override; | ||||
|       void init() override; | ||||
|       void update() override; | ||||
|   | ||||
| @@ -7,4 +7,5 @@ | ||||
| target_sources(${DAWN_TARGET_NAME} | ||||
|   PRIVATE | ||||
|     ShaderProgram.cpp | ||||
|     SimpleTexturedShader.cpp | ||||
| ) | ||||
| @@ -11,16 +11,25 @@ void SimpleTexturedShader::compile() { | ||||
|   this->program.compile(); | ||||
| } | ||||
|  | ||||
| std::vector<struct ShaderPass> SimpleTexturedShader::getItemPasses( | ||||
|   MeshRenderer *mesh, Material *material | ||||
| std::vector<struct ShaderPassItem> SimpleTexturedShader::getPassItems( | ||||
|   Mesh *mesh, | ||||
|   Material *material, | ||||
|   Camera *camera | ||||
| ) { | ||||
|   SimpleTexturedMaterial *simpleMaterial = dynamic_cast<SimpleTexturedMaterial*>(material); | ||||
|   assertNotNull(simpleMaterial); | ||||
|  | ||||
|   struct ShaderPass onlyPass; | ||||
|   struct ShaderPassItem onlyPass; | ||||
|   onlyPass.mesh = mesh; | ||||
|   onlyPass.shaderProgram = &program; | ||||
|   onlyPass.colorValues[program.paramColor] = simpleMaterial->color; | ||||
|   onlyPass.matrixValues[program.paramModel] = mesh->transform->getWorldTransform(); | ||||
|   onlyPass.matrixValues[program.paramModel] = material->transform->getWorldTransform(); | ||||
|   onlyPass.matrixValues[program.paramView] = camera->transform->getWorldTransform(); | ||||
|   onlyPass.matrixValues[program.paramProjection] = camera->projection; | ||||
|   onlyPass.renderFlags = ( | ||||
|     RENDER_MANAGER_RENDER_FLAG_BLEND | | ||||
|     RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST | ||||
|   ); | ||||
|  | ||||
|   if(simpleMaterial->texture != nullptr) { | ||||
|     onlyPass.boolValues[program.paramHasTexture] = true; | ||||
| @@ -30,14 +39,7 @@ std::vector<struct ShaderPass> SimpleTexturedShader::getItemPasses( | ||||
|     onlyPass.boolValues[program.paramHasTexture] = false; | ||||
|   } | ||||
|  | ||||
|   std::vector<struct ShaderPass> passes; | ||||
|   std::vector<struct ShaderPassItem> passes; | ||||
|   passes.push_back(onlyPass); | ||||
|   return passes; | ||||
| } | ||||
|  | ||||
| void SimpleTexturedShader::setGlobalParameters( | ||||
|   glm::mat4 cameraProjection, glm::mat4 cameraView | ||||
| ) { | ||||
|   this->program.setMatrix(this->program.paramProjection, cameraProjection); | ||||
|   this->program.setMatrix(this->program.paramView, cameraView); | ||||
| } | ||||
| @@ -16,12 +16,10 @@ namespace Dawn { | ||||
|     public: | ||||
|       void compile() override; | ||||
|  | ||||
|       std::vector<struct ShaderPass> getItemPasses( | ||||
|         MeshRenderer *mesh, Material *material | ||||
|       ) override; | ||||
|  | ||||
|       void setGlobalParameters( | ||||
|         glm::mat4 cameraProjection, glm::mat4 cameraView | ||||
|       std::vector<struct ShaderPassItem> getPassItems( | ||||
|         Mesh *mesh, | ||||
|         Material *material, | ||||
|         Camera *camera | ||||
|       ) override; | ||||
|   }; | ||||
| } | ||||
| @@ -1,12 +0,0 @@ | ||||
| // Copyright (c) 2022 Dominic Masters | ||||
| //  | ||||
| // This software is released under the MIT License. | ||||
| // https://opensource.org/licenses/MIT | ||||
|  | ||||
| #pragma once | ||||
| #include "SimpleTexturedShader.hpp" | ||||
|  | ||||
| namespace Dawn { | ||||
|   class UIShader : public SimpleTexturedShader { | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										43
									
								
								src/dawnopengl/display/shader/UIShaderProgram.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/dawnopengl/display/shader/UIShaderProgram.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| // Copyright (c) 2022 Dominic Masters | ||||
| //  | ||||
| // This software is released under the MIT License. | ||||
| // https://opensource.org/licenses/MIT | ||||
|  | ||||
| #pragma once | ||||
| #include "SimpleTexturedShaderProgram.hpp" | ||||
|  | ||||
| #define UI_SHADER_PROGRAM_PRIORITY 100 | ||||
|  | ||||
| namespace Dawn { | ||||
|   class UIShaderProgram : public SimpleTexturedShaderProgram { | ||||
|     public: | ||||
|       struct ShaderPassItem getUIPassItem( | ||||
|         glm::mat4 projection, | ||||
|         glm::mat4 view, | ||||
|         glm::mat4 transform, | ||||
|         Texture *texture, | ||||
|         struct Color color, | ||||
|         Mesh *mesh, | ||||
|         float_t z | ||||
|       ) { | ||||
|         struct ShaderPassItem item; | ||||
|         item.shaderProgram = this; | ||||
|         item.colorValues[this->paramColor] = color; | ||||
|         if(texture == nullptr) { | ||||
|           item.boolValues[this->paramHasTexture] = false; | ||||
|         } else { | ||||
|           item.textureSlots[0] = texture; | ||||
|           item.textureValues[this->paramTexture] = 0; | ||||
|           item.boolValues[this->paramHasTexture] = true; | ||||
|         } | ||||
|         item.matrixValues[this->paramProjection] = projection; | ||||
|         item.matrixValues[this->paramView] = view; | ||||
|         item.matrixValues[this->paramModel] = transform; | ||||
|         item.priority = UI_SHADER_PROGRAM_PRIORITY; | ||||
|         item.w = z; | ||||
|         item.renderFlags = RENDER_MANAGER_RENDER_FLAG_BLEND; | ||||
|         item.mesh = mesh; | ||||
|         return item; | ||||
|       } | ||||
|   }; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user