From bf54fb1fe9c0080c2cb5725c49b43f95801dcbf1 Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 14 May 2025 18:29:38 +0100 Subject: [PATCH] Component: Recreate cached images if ideal type changes This is intended to fix an issue where drawing a component snapshot into a temporary OpenGL image can fail, because the GL context may not be bound. --- .../juce_gui_basics/components/juce_Component.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/components/juce_Component.cpp b/modules/juce_gui_basics/components/juce_Component.cpp index e0337212b7..ebe96af1a6 100644 --- a/modules/juce_gui_basics/components/juce_Component.cpp +++ b/modules/juce_gui_basics/components/juce_Component.cpp @@ -214,14 +214,20 @@ public: auto scale = g.getInternalContext().getPhysicalPixelScaleFactor(); auto scaledBounds = c.getLocalBounds() * scale; - if (effectImage.getBounds() != scaledBounds) + const auto preferredType = g.getInternalContext().getPreferredImageTypeForTemporaryImages(); + const auto pixelData = effectImage.getPixelData(); + const auto shouldCreateImage = pixelData == nullptr + || pixelData->width != scaledBounds.getWidth() + || pixelData->height != scaledBounds.getHeight() + || pixelData->createType()->getTypeID() != preferredType->getTypeID(); + + if (shouldCreateImage) { - auto tempImageType = g.getInternalContext().getPreferredImageTypeForTemporaryImages(); effectImage = Image { c.isOpaque() ? Image::RGB : Image::ARGB, scaledBounds.getWidth(), scaledBounds.getHeight(), false, - *tempImageType }; + *preferredType }; effectImage.setBackupEnabled (false); }