From ea7563df88981a76c5de39666c29067e1438ea7d Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 2 Sep 2023 12:53:45 -0500 Subject: [PATCH] rhi gl: Remove the garbage disposal --- src/rhi/gl3_core/gl3_core_rhi.cpp | 27 +++++++++++++-------------- src/rhi/gl3_core/gl3_core_rhi.hpp | 2 -- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/rhi/gl3_core/gl3_core_rhi.cpp b/src/rhi/gl3_core/gl3_core_rhi.cpp index 55f856699..f905dc7d7 100644 --- a/src/rhi/gl3_core/gl3_core_rhi.cpp +++ b/src/rhi/gl3_core/gl3_core_rhi.cpp @@ -617,7 +617,8 @@ void GlCoreRhi::destroy_texture(rhi::Handle handle) SRB2_ASSERT(texture_slab_.is_valid(handle) == true); GlCoreTexture casted = texture_slab_.remove(handle); GLuint name = casted.texture; - disposal_.push_back([this, name] { gl_->DeleteTextures(1, &name); }); + gl_->DeleteTextures(1, &name); + GL_ASSERT; } void GlCoreRhi::update_texture( @@ -701,7 +702,8 @@ void GlCoreRhi::destroy_buffer(rhi::Handle handle) GlCoreBuffer casted = buffer_slab_.remove(handle); GLuint name = casted.buffer; - disposal_.push_back([this, name] { gl_->DeleteBuffers(1, &name); }); + gl_->DeleteBuffers(1, &name); + GL_ASSERT; } void GlCoreRhi::update_buffer( @@ -864,7 +866,8 @@ void GlCoreRhi::destroy_renderbuffer(rhi::Handle handle) SRB2_ASSERT(renderbuffer_slab_.is_valid(handle) == true); GlCoreRenderbuffer casted = renderbuffer_slab_.remove(handle); GLuint name = casted.renderbuffer; - disposal_.push_back([this, name] { gl_->DeleteRenderbuffers(1, &name); }); + gl_->DeleteRenderbuffers(1, &name); + GL_ASSERT; } rhi::Handle GlCoreRhi::create_pipeline(const PipelineDesc& desc) @@ -1181,9 +1184,12 @@ void GlCoreRhi::destroy_pipeline(rhi::Handle handle) GLuint fragment_shader = casted.fragment_shader; GLuint program = casted.program; - disposal_.push_back([this, fragment_shader] { gl_->DeleteShader(fragment_shader); }); - disposal_.push_back([this, vertex_shader] { gl_->DeleteShader(vertex_shader); }); - disposal_.push_back([this, program] { gl_->DeleteProgram(program); }); + gl_->DeleteProgram(program); + GL_ASSERT; + gl_->DeleteShader(vertex_shader); + GL_ASSERT; + gl_->DeleteShader(fragment_shader); + GL_ASSERT; } rhi::Handle GlCoreRhi::begin_graphics() @@ -1867,16 +1873,9 @@ void GlCoreRhi::finish() for (auto& fbset : framebuffers_) { gl_->DeleteFramebuffers(1, &fbset.second); + GL_ASSERT; } framebuffers_.clear(); - - for (auto it = disposal_.begin(); it != disposal_.end(); it++) - { - (*it)(); - } - - disposal_.clear(); - GL_ASSERT; } void GlCoreRhi::copy_framebuffer_to_texture( diff --git a/src/rhi/gl3_core/gl3_core_rhi.hpp b/src/rhi/gl3_core/gl3_core_rhi.hpp index 51e838088..100f58184 100644 --- a/src/rhi/gl3_core/gl3_core_rhi.hpp +++ b/src/rhi/gl3_core/gl3_core_rhi.hpp @@ -165,8 +165,6 @@ class GlCoreRhi final : public Rhi uint8_t stencil_back_compare_mask_ = 0xFF; uint8_t stencil_back_write_mask_ = 0xFF; - std::vector> disposal_; - public: GlCoreRhi(std::unique_ptr&& platform, GlLoadFunc load_func); virtual ~GlCoreRhi();