diff --git a/src/engine/renderer/opengl/renderer_opengl.cc b/src/engine/renderer/opengl/renderer_opengl.cc index 7fdebc6..b25d43d 100644 --- a/src/engine/renderer/opengl/renderer_opengl.cc +++ b/src/engine/renderer/opengl/renderer_opengl.cc @@ -46,7 +46,27 @@ RendererOpenGL::RendererOpenGL() RendererOpenGL::RendererOpenGL() = default; #endif // THREADED_RENDERING -RendererOpenGL::~RendererOpenGL() = default; +RendererOpenGL::~RendererOpenGL() { + Shutdown(); +} + +void RendererOpenGL::Shutdown() { +#ifdef THREADED_RENDERING + if (terminate_render_thread_) + return; + + LOG << "Shutting down renderer."; + { + std::unique_lock scoped_lock(mutex_); + terminate_render_thread_ = true; + } + cv_.notify_one(); + LOG << "Terminating render thread"; + render_thread_.join(); +#else + ShutdownInternal(); +#endif // THREADED_RENDERING +} uint64_t RendererOpenGL::CreateGeometry(std::unique_ptr mesh) { auto cmd = std::make_unique(); @@ -348,24 +368,6 @@ bool RendererOpenGL::StartRenderThread() { #endif // THREADED_RENDERING } -void RendererOpenGL::TerminateRenderThread() { -#ifdef THREADED_RENDERING - if (terminate_render_thread_) - return; - - // Notify worker thread and wait for it to terminate. - { - std::unique_lock scoped_lock(mutex_); - terminate_render_thread_ = true; - } - cv_.notify_one(); - LOG << "Terminating render thread"; - render_thread_.join(); -#else - ShutdownInternal(); -#endif // THREADED_RENDERING -} - #ifdef THREADED_RENDERING void RendererOpenGL::RenderThreadMain(std::promise promise) { diff --git a/src/engine/renderer/opengl/renderer_opengl.h b/src/engine/renderer/opengl/renderer_opengl.h index 4dd8f4e..c9019c1 100644 --- a/src/engine/renderer/opengl/renderer_opengl.h +++ b/src/engine/renderer/opengl/renderer_opengl.h @@ -170,7 +170,6 @@ class RendererOpenGL final : public Renderer { void DestroyAllResources(); bool StartRenderThread(); - void TerminateRenderThread(); #ifdef THREADED_RENDERING void RenderThreadMain(std::promise promise); diff --git a/src/engine/renderer/opengl/renderer_opengl_android.cc b/src/engine/renderer/opengl/renderer_opengl_android.cc index 16856eb..d3e94a0 100644 --- a/src/engine/renderer/opengl/renderer_opengl_android.cc +++ b/src/engine/renderer/opengl/renderer_opengl_android.cc @@ -14,11 +14,6 @@ bool RendererOpenGL::Initialize(ANativeWindow* window) { return StartRenderThread(); } -void RendererOpenGL::Shutdown() { - LOG << "Shutting down renderer."; - TerminateRenderThread(); -} - bool RendererOpenGL::InitInternal() { ndk_helper::GLContext* gl_context = ndk_helper::GLContext::GetInstance(); diff --git a/src/engine/renderer/opengl/renderer_opengl_linux.cc b/src/engine/renderer/opengl/renderer_opengl_linux.cc index 85bcbe7..15ec965 100644 --- a/src/engine/renderer/opengl/renderer_opengl_linux.cc +++ b/src/engine/renderer/opengl/renderer_opengl_linux.cc @@ -18,12 +18,6 @@ bool RendererOpenGL::Initialize(Display* display, Window window) { return StartRenderThread(); } -void RendererOpenGL::Shutdown() { - LOG << "Shutting down renderer."; - - TerminateRenderThread(); -} - bool RendererOpenGL::InitInternal() { // Create the OpenGL context. glx_context_ = diff --git a/src/engine/renderer/vulkan/renderer_vulkan.cc b/src/engine/renderer/vulkan/renderer_vulkan.cc index b0d4170..290189f 100644 --- a/src/engine/renderer/vulkan/renderer_vulkan.cc +++ b/src/engine/renderer/vulkan/renderer_vulkan.cc @@ -372,7 +372,9 @@ namespace eng { RendererVulkan::RendererVulkan() = default; -RendererVulkan::~RendererVulkan() = default; +RendererVulkan::~RendererVulkan() { + Shutdown(); +} uint64_t RendererVulkan::CreateGeometry(std::unique_ptr mesh) { auto& geometry = geometries_[++last_resource_id_] = {};