From 70d99d1cc4a0e50f74bcad081a1961a285556265 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 18 Apr 2023 16:19:17 +0100 Subject: [PATCH] NSViewComponentPeer: Fix occasional rendering artefacts When clearing deferredRepaints in drawRect, dirty regions in the 'next' frame could be incorrectly removed while drawing the 'current' frame. Now, deferredRepaints is cleared in setNeedsDisplayRectangles, as it was before 9d50ab6c59d34ebcbe04a459ec3ac17bbf4bc748. --- .../juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm b/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm index d7388ea248..5d79e41dd3 100644 --- a/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm +++ b/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm @@ -951,8 +951,6 @@ public: if (r.size.width < 1.0f || r.size.height < 1.0f) return; - deferredRepaints.subtract ({ convertToRectFloat (r) }); - auto cg = [] { if (@available (macOS 10.10, *)) @@ -1114,6 +1112,11 @@ public: [view setNeedsDisplayInRect: makeNSRect (i)]; lastRepaintTime = Time::getMillisecondCounter(); + + #if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS + if (metalRenderer == nullptr) + #endif + deferredRepaints.clear(); } void performAnyPendingRepaintsNow() override