deallocate pipeline in renderer on pipeline destroy
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user