deallocate pipeline in renderer on pipeline destroy

This commit is contained in:
h4570
2022-07-30 18:17:48 +02:00
parent 1bdb33e1a6
commit 927c10e82a
6 changed files with 20 additions and 3 deletions
@@ -16,12 +16,13 @@ namespace Tyra {
class Renderer3DPipeline { class Renderer3DPipeline {
public: public:
Renderer3DPipeline() {} Renderer3DPipeline() { onDestroy = nullptr; }
~Renderer3DPipeline() {} ~Renderer3DPipeline() {}
virtual void setRenderer(RendererCore* core) = 0; virtual void setRenderer(RendererCore* core) = 0;
virtual void onUse() = 0; virtual void onUse() = 0;
virtual void onUseEnd() = 0; virtual void onUseEnd() = 0;
std::function<void(Renderer3DPipeline*)> onDestroy;
}; };
} // namespace Tyra } // namespace Tyra
+2
View File
@@ -19,10 +19,12 @@ class Renderer3D {
Renderer3D(); Renderer3D();
~Renderer3D(); ~Renderer3D();
/** Deinitialize previous pipeline and initialize new pipeline */
void usePipeline(Renderer3DPipeline* pipeline); void usePipeline(Renderer3DPipeline* pipeline);
private: private:
Renderer3DPipeline* currentPipeline; Renderer3DPipeline* currentPipeline;
void onDestroy(Renderer3DPipeline* pipeline);
}; };
} // namespace Tyra } // namespace Tyra
@@ -17,7 +17,9 @@ const u32 DynamicPipeline::halfBuffersCount = buffersCount / 2;
DynamicPipeline::DynamicPipeline() {} DynamicPipeline::DynamicPipeline() {}
DynamicPipeline::~DynamicPipeline() {} DynamicPipeline::~DynamicPipeline() {
if (onDestroy) onDestroy(this);
}
void DynamicPipeline::setRenderer(RendererCore* t_core) { void DynamicPipeline::setRenderer(RendererCore* t_core) {
rendererCore = t_core; rendererCore = t_core;
@@ -21,6 +21,7 @@ MinecraftPipeline::MinecraftPipeline() {
} }
MinecraftPipeline::~MinecraftPipeline() { MinecraftPipeline::~MinecraftPipeline() {
if (onDestroy) onDestroy(this);
if (bbox) { if (bbox) {
delete bbox; delete bbox;
} }
@@ -15,7 +15,9 @@ namespace Tyra {
StaticPipeline::StaticPipeline() {} StaticPipeline::StaticPipeline() {}
StaticPipeline::~StaticPipeline() {} StaticPipeline::~StaticPipeline() {
if (onDestroy) onDestroy(this);
}
void StaticPipeline::setRenderer(RendererCore* t_core) { void StaticPipeline::setRenderer(RendererCore* t_core) {
rendererCore = t_core; rendererCore = t_core;
+9
View File
@@ -21,8 +21,17 @@ void Renderer3D::usePipeline(Renderer3DPipeline* pipeline) {
if (currentPipeline != pipeline) { if (currentPipeline != pipeline) {
if (currentPipeline) currentPipeline->onUseEnd(); if (currentPipeline) currentPipeline->onUseEnd();
currentPipeline = pipeline; currentPipeline = pipeline;
currentPipeline->onDestroy =
std::bind(&Renderer3D::onDestroy, this, std::placeholders::_1);
currentPipeline->onUse(); currentPipeline->onUse();
} }
} }
void Renderer3D::onDestroy(Renderer3DPipeline* pipeline) {
if (currentPipeline == pipeline) {
currentPipeline->onUseEnd();
currentPipeline = nullptr;
}
}
} // namespace Tyra } // namespace Tyra