81 lines
2.0 KiB
C++
81 lines
2.0 KiB
C++
// 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<SceneItemComponent*> SimpleRenderTargetQuad::getDependencies() {
|
|
return std::vector<SceneItemComponent*>{
|
|
(this->meshHost = this->item->getComponent<MeshHost>())
|
|
};
|
|
}
|
|
|
|
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
|
|
);
|
|
}
|
|
} |