// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "SimpleRenderTargetQuad.hpp" #include "scene/Scene.hpp" using namespace Dawn; SimpleRenderTargetQuad::SimpleRenderTargetQuad(SceneItem *i) : SceneItemComponent(i) { } void SimpleRenderTargetQuad::onRenderTargetResized( RenderTarget *target, float_t w, float_t h ) { assertTrue(target == this->renderTarget); // Update mesh QuadMesh::bufferQuadMesh( &this->meshHost->mesh, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2(w, h), glm::vec2(1, 1), 0, 0 ); } void SimpleRenderTargetQuad::setRenderTarget(RenderTarget *rt) { assertTrue(rt != this->renderTarget); // Remove old event listener if(this->renderTarget != nullptr) { this->renderTarget->eventRenderTargetResized.removeListener( this, &SimpleRenderTargetQuad::onRenderTargetResized ); } this->renderTarget = rt; // Add new event listener. if(rt != nullptr) { rt->eventRenderTargetResized.addListener( this, &SimpleRenderTargetQuad::onRenderTargetResized ); } } std::vector SimpleRenderTargetQuad::getDependencies() { return std::vector{ (this->meshHost = this->item->getComponent()) }; } void SimpleRenderTargetQuad::onStart() { assertNotNull(this->meshHost); // Create quad mesh this->meshHost->mesh.createBuffers(QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT); // Perform first resize. if(this->renderTarget != nullptr) { QuadMesh::bufferQuadMesh( &this->meshHost->mesh, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2(this->renderTarget->getWidth(), this->renderTarget->getHeight()), glm::vec2(1,1), 0, 0 ); } } SimpleRenderTargetQuad::~SimpleRenderTargetQuad() { if(this->renderTarget != nullptr) { this->renderTarget->eventRenderTargetResized.removeListener( this, &SimpleRenderTargetQuad::onRenderTargetResized ); } }