From 208be3dd5eb6f4fc77794c25767430ae8cd91b99 Mon Sep 17 00:00:00 2001 From: reuk Date: Sat, 15 Apr 2023 15:09:44 +0100 Subject: [PATCH] CGMetalLayerRenderer: Fix crash when attempting to render zero-sized components --- .../native/juce_CGMetalLayerRenderer_mac.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_CGMetalLayerRenderer_mac.h b/modules/juce_gui_basics/native/juce_CGMetalLayerRenderer_mac.h index c0187d3e67..de0949776c 100644 --- a/modules/juce_gui_basics/native/juce_CGMetalLayerRenderer_mac.h +++ b/modules/juce_gui_basics/native/juce_CGMetalLayerRenderer_mac.h @@ -86,9 +86,13 @@ public: { layer.drawableSize = transformedFrameSize; resources = std::make_unique (device.get(), layer); - dirtyRegions = convertToRectFloat (layer.bounds); + dirtyRegions.clear(); + dirtyRegions.add (convertToRectFloat (layer.bounds)); } + if (CGSizeEqualToSize (transformedFrameSize, CGSizeZero)) + return dirtyRegions; + auto gpuTexture = resources->getGpuTexture(); if (gpuTexture == nullptr) @@ -209,7 +213,8 @@ private: GpuTexturePool (id metalDevice, MTLTextureDescriptor* descriptor) { for (auto& t : textureCache) - t.reset ([metalDevice newTextureWithDescriptor: descriptor]); + t.reset ((descriptor.width != 0 && descriptor.height != 0) ? [metalDevice newTextureWithDescriptor: descriptor] + : nullptr); } id take() const