From a9779b45469199e55f2944d85ed6bfb1c15a881a Mon Sep 17 00:00:00 2001 From: attila Date: Tue, 18 Nov 2025 15:55:07 +0100 Subject: [PATCH] OpenGL: Fix missing buffered image after context detach Prior to this commit a Component with setBufferedToImage (true) could have its image buffer deleted when an OpenGL context was detached. This meant that this Component continued to be rendered without buffering even though it was previously requested that it use a buffer. --- .../juce_gui_basics/detail/juce_ComponentHelpers.h | 2 ++ .../juce_gui_basics/detail/juce_ScalingHelpers.h | 2 ++ modules/juce_opengl/opengl/juce_OpenGLContext.cpp | 13 ++++--------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/juce_gui_basics/detail/juce_ComponentHelpers.h b/modules/juce_gui_basics/detail/juce_ComponentHelpers.h index c83dbe1e98..5a34ab7ecd 100644 --- a/modules/juce_gui_basics/detail/juce_ComponentHelpers.h +++ b/modules/juce_gui_basics/detail/juce_ComponentHelpers.h @@ -32,6 +32,8 @@ ============================================================================== */ +#include "juce_ScalingHelpers.h" + namespace juce::detail { diff --git a/modules/juce_gui_basics/detail/juce_ScalingHelpers.h b/modules/juce_gui_basics/detail/juce_ScalingHelpers.h index 457fcd1b34..68d8cf71d4 100644 --- a/modules/juce_gui_basics/detail/juce_ScalingHelpers.h +++ b/modules/juce_gui_basics/detail/juce_ScalingHelpers.h @@ -32,6 +32,8 @@ ============================================================================== */ +#pragma once + namespace juce::detail { diff --git a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp index fef9f788bd..a02f90ac00 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp @@ -32,6 +32,8 @@ ============================================================================== */ +#include + #if JUCE_MAC #include #endif @@ -1102,19 +1104,12 @@ public: detach(); } - static void clearCachedImagesInComponentTree (Component& root) - { - root.setCachedComponentImage (nullptr); - - for (auto* child : root.getChildren()) - clearCachedImagesInComponentTree (*child); - } - void detach() { auto& comp = *getComponent(); stop(); - clearCachedImagesInComponentTree (comp); + detail::ComponentHelpers::releaseAllCachedImageResources (comp); + comp.setCachedComponentImage (nullptr); context.nativeContext = nullptr; }