From 28d0aecd0eb12cc3dbe855bbfb578ba7c1e80260 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 20 Jan 2020 16:09:29 +1100 Subject: [PATCH] openglcolorprocessor: delete texture when context is about to be destroyed --- .../backend/opengl/openglcolorprocessor.cpp | 21 ++++++++++++++----- .../backend/opengl/openglcolorprocessor.h | 6 +++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/render/backend/opengl/openglcolorprocessor.cpp b/app/render/backend/opengl/openglcolorprocessor.cpp index 404bb2bbd..60ea99c5c 100644 --- a/app/render/backend/opengl/openglcolorprocessor.cpp +++ b/app/render/backend/opengl/openglcolorprocessor.cpp @@ -17,6 +17,8 @@ void OpenGLColorProcessor::Enable(QOpenGLContext *context, bool alpha_is_associa ocio_lut_, GetProcessor(), alpha_is_associated); + + connect(context_, &QOpenGLContext::aboutToBeDestroyed, this, &OpenGLColorProcessor::ClearTexture, Qt::DirectConnection); } bool OpenGLColorProcessor::IsEnabled() const @@ -34,6 +36,19 @@ void OpenGLColorProcessor::ProcessOpenGL() OpenGLRenderFunctions::OCIOBlit(pipeline_, ocio_lut_); } +void OpenGLColorProcessor::ClearTexture() +{ + if (IsEnabled()) { + // Clean up OCIO LUT texture and shader + context_->functions()->glDeleteTextures(1, &ocio_lut_); + + disconnect(context_, &QOpenGLContext::aboutToBeDestroyed, this, &OpenGLColorProcessor::ClearTexture); + + ocio_lut_ = 0; + pipeline_ = nullptr; + } +} + OpenGLColorProcessor::OpenGLColorProcessor(OCIO::ConstConfigRcPtr config, const QString &source_space, const QString &dest_space) : ColorProcessor(config, source_space, dest_space), ocio_lut_(0) @@ -48,11 +63,7 @@ OpenGLColorProcessor::OpenGLColorProcessor(OCIO::ConstConfigRcPtr config, const OpenGLColorProcessor::~OpenGLColorProcessor() { - if (IsEnabled()) { - // Clean up OCIO LUT texture and shader - context_->functions()->glDeleteTextures(1, &ocio_lut_); - pipeline_ = nullptr; - } + ClearTexture(); } OpenGLColorProcessorPtr OpenGLColorProcessor::CreateOpenGL(OCIO::ConstConfigRcPtr config, const QString &source_space, const QString &dest_space) diff --git a/app/render/backend/opengl/openglcolorprocessor.h b/app/render/backend/opengl/openglcolorprocessor.h index 66eaf133d..d7c2b9910 100644 --- a/app/render/backend/opengl/openglcolorprocessor.h +++ b/app/render/backend/opengl/openglcolorprocessor.h @@ -7,8 +7,9 @@ class OpenGLColorProcessor; using OpenGLColorProcessorPtr = std::shared_ptr; -class OpenGLColorProcessor : public ColorProcessor +class OpenGLColorProcessor : public QObject, public ColorProcessor { + Q_OBJECT public: OpenGLColorProcessor(OCIO::ConstConfigRcPtr config, const QString &source_space, const QString &dest_space); @@ -42,6 +43,9 @@ private: OpenGLShaderPtr pipeline_; +private slots: + void ClearTexture(); + }; #endif // OPENGLCOLORPROCESSOR_H