// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "SimpleRenderTargetQuad.hpp" using namespace Dawn; SimpleRenderTargetQuad::SimpleRenderTargetQuad(SceneItem *i) : SceneItemComponent(i), renderTarget(nullptr) { } void SimpleRenderTargetQuad::onRenderTargetResized( RenderTarget *target, float_t w, float_t h ) { assertTrue(target == this->renderTarget); QuadMesh::bufferQuadMesh( &this->meshHost->mesh, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2( ((RenderTarget*)this->renderTarget)->getWidth(), ((RenderTarget*)this->renderTarget)->getHeight() ), glm::vec2(1, 1), 0, 0 ); } 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); useEffect(this->renderTarget, [&]{ if(this->renderTarget.previous != nullptr) { this->renderTarget.previous->eventRenderTargetResized.addListener( this, &SimpleRenderTargetQuad::onRenderTargetResized ); } if(this->renderTarget == nullptr) return; // Update mesh QuadMesh::bufferQuadMesh( &this->meshHost->mesh, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2( ((RenderTarget*)this->renderTarget)->getWidth(), ((RenderTarget*)this->renderTarget)->getHeight() ), glm::vec2(1, 1), 0, 0 ); ((RenderTarget*)this->renderTarget)->eventRenderTargetResized.addListener( this, &SimpleRenderTargetQuad::onRenderTargetResized ); }); // Perform first resize. if(this->renderTarget != nullptr) { QuadMesh::bufferQuadMesh( &this->meshHost->mesh, glm::vec2(0, 0), glm::vec2(0, 0), glm::vec2( ((RenderTarget*)this->renderTarget)->getWidth(), ((RenderTarget*)this->renderTarget)->getHeight() ), glm::vec2(1, 1), 0, 0 ); } } void SimpleRenderTargetQuad::onDispose() { if(this->renderTarget != nullptr) { ((RenderTarget*)this->renderTarget)->eventRenderTargetResized.removeListener( this, &SimpleRenderTargetQuad::onRenderTargetResized ); } }