Browse Source

macOS: Handle unavailable Metal device

v7.0.9
Tom Poole 2 years ago
parent
commit
6f629547d5
3 changed files with 19 additions and 7 deletions
  1. +4
    -1
      modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm
  2. +14
    -5
      modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h
  3. +1
    -1
      modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm

+ 4
- 1
modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm View File

@@ -1398,7 +1398,10 @@ UIViewComponentPeer::UIViewComponentPeer (Component& comp, int windowStyleFlags,
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
if (@available (iOS 13, *))
metalRenderer = std::make_unique<CoreGraphicsMetalLayerRenderer<UIView>> (view, comp.isOpaque());
{
metalRenderer = CoreGraphicsMetalLayerRenderer<UIView>::create (view, comp.isOpaque());
jassert (metalRenderer != nullptr);
}
#endif
if ((windowStyleFlags & ComponentPeer::windowRequiresSynchronousCoreGraphicsRendering) == 0)


+ 14
- 5
modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h View File

@@ -35,12 +35,11 @@ class CoreGraphicsMetalLayerRenderer
{
public:
//==============================================================================
CoreGraphicsMetalLayerRenderer (ViewType* view, bool isOpaque)
static auto create (ViewType* view, bool isOpaque)
{
device.reset (MTLCreateSystemDefaultDevice());
commandQueue.reset ([device.get() newCommandQueue]);
attach (view, isOpaque);
ObjCObjectHandle<id<MTLDevice>> device { MTLCreateSystemDefaultDevice() };
return rawToUniquePtr (device != nullptr ? new CoreGraphicsMetalLayerRenderer (device, view, isOpaque)
: nullptr);
}
~CoreGraphicsMetalLayerRenderer()
@@ -223,6 +222,16 @@ public:
}
private:
//==============================================================================
CoreGraphicsMetalLayerRenderer (ObjCObjectHandle<id<MTLDevice>> mtlDevice,
ViewType* view,
bool isOpaque)
: device (mtlDevice),
commandQueue ([device.get() newCommandQueue])
{
attach (view, isOpaque);
}
//==============================================================================
static auto alignTo (size_t n, size_t alignment)
{


+ 1
- 1
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm View File

@@ -151,7 +151,7 @@ public:
#if USE_COREGRAPHICS_RENDERING
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
if (@available (macOS 10.14, *))
metalRenderer = std::make_unique<CoreGraphicsMetalLayerRenderer<NSView>> (view, getComponent().isOpaque());
metalRenderer = CoreGraphicsMetalLayerRenderer<NSView>::create (view, getComponent().isOpaque());
#endif
if ((windowStyleFlags & ComponentPeer::windowRequiresSynchronousCoreGraphicsRendering) == 0)
{


Loading…
Cancel
Save