Shutdown renderer in destructor

This commit is contained in:
Attila Uygun 2023-05-22 23:25:07 +02:00
parent 94242fca0b
commit b7f1f7faa2
5 changed files with 24 additions and 32 deletions

View File

@ -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<std::mutex> 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> mesh) {
auto cmd = std::make_unique<CmdCreateGeometry>();
@ -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<std::mutex> 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<bool> promise) {

View File

@ -170,7 +170,6 @@ class RendererOpenGL final : public Renderer {
void DestroyAllResources();
bool StartRenderThread();
void TerminateRenderThread();
#ifdef THREADED_RENDERING
void RenderThreadMain(std::promise<bool> promise);

View File

@ -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();

View File

@ -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_ =

View File

@ -372,7 +372,9 @@ namespace eng {
RendererVulkan::RendererVulkan() = default;
RendererVulkan::~RendererVulkan() = default;
RendererVulkan::~RendererVulkan() {
Shutdown();
}
uint64_t RendererVulkan::CreateGeometry(std::unique_ptr<Mesh> mesh) {
auto& geometry = geometries_[++last_resource_id_] = {};