// Copyright (c) 2022 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "dawnopengl.hpp" #include "game/DawnGame.hpp" #include "display/RenderManager.hpp" using namespace Dawn; RenderManager::RenderManager(DawnGame *game) : IRenderManager(game), backBuffer(*this), renderPipeline(this) { } void RenderManager::init() { // Lock the common shaders this->lockSimpleTextured = this->shaderManager.lockShader(); this->simpleTexturedShader = this->shaderManager.getShader(this->lockSimpleTextured); this->lockUIShaderProgram = this->shaderManager.lockShader(); this->uiShader = this->shaderManager.getShader(this->lockUIShaderProgram); this->lockFontShader = this->shaderManager.lockShader(); this->fontShader = this->shaderManager.getShader(this->lockFontShader); this->renderPipeline.init(); this->fontManager.init(); // Prepare the initial values glEnable(GL_TEXTURE_2D); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthMask(GL_TRUE); glDepthFunc(GL_LESS); this->defaultFont.init(); } RenderTarget * RenderManager::getBackBuffer() { return &this->backBuffer; } RenderPipeline * RenderManager::getRenderPipeline() { return &this->renderPipeline; } ShaderManager * RenderManager::getShaderManager() { return &this->shaderManager; } FontManager * RenderManager::getFontManager() { return &this->fontManager; } void RenderManager::setRenderFlags(renderflag_t flags) { this->renderFlags = flags; if((flags & RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST) == 0) { glDisable(GL_DEPTH_TEST); } else { glEnable(GL_DEPTH_TEST); } if((flags & RENDER_MANAGER_RENDER_FLAG_BLEND) == 0) { glDisable(GL_BLEND); } else { glEnable(GL_BLEND); } } void RenderManager::update() { this->getRenderPipeline()->render(); } RenderManager::~RenderManager() { this->shaderManager.releaseShader(this->lockSimpleTextured); this->shaderManager.releaseShader(this->lockUIShaderProgram); this->shaderManager.releaseShader(this->lockFontShader); }