From cc382fd57138c215845fbb0b6cb5be89e50afada Mon Sep 17 00:00:00 2001 From: Ben Doherty Date: Mon, 18 Aug 2025 15:18:53 -0400 Subject: [PATCH] Metal: verify that the native window is a CAMetalLayer (#9104) --- filament/backend/CMakeLists.txt | 1 + filament/backend/src/metal/MetalHandles.mm | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/filament/backend/CMakeLists.txt b/filament/backend/CMakeLists.txt index a6d941d140..ec77a49c2c 100644 --- a/filament/backend/CMakeLists.txt +++ b/filament/backend/CMakeLists.txt @@ -412,6 +412,7 @@ endif() if (APPLE AND NOT IOS) target_link_libraries(${TARGET} PRIVATE "-framework Cocoa") + target_link_libraries(${TARGET} PRIVATE "-framework QuartzCore") endif() target_link_libraries(${TARGET} PUBLIC math) diff --git a/filament/backend/src/metal/MetalHandles.mm b/filament/backend/src/metal/MetalHandles.mm index f6d3190c06..317173544d 100644 --- a/filament/backend/src/metal/MetalHandles.mm +++ b/filament/backend/src/metal/MetalHandles.mm @@ -118,6 +118,10 @@ MetalSwapChain::MetalSwapChain( layerDrawableMutex(std::make_shared()), type(SwapChainType::CAMETALLAYER) { + FILAMENT_CHECK_PRECONDITION([nativeWindow isKindOfClass:[CAMetalLayer class]]) + << "nativeWindow pointer of class " + << [NSStringFromClass([nativeWindow class]) UTF8String] << " is not a CAMetalLayer"; + if (!(flags & SwapChain::CONFIG_TRANSPARENT) && !nativeWindow.opaque) { LOG(WARNING) << "Warning: Filament SwapChain has no CONFIG_TRANSPARENT flag, but the " "CAMetaLayer("