diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index d5832203c1..d04a793ce7 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -6832,17 +6832,32 @@ VK_DESTROY if (NULL != vkCreateMacOSSurfaceMVK) { NSWindow* window = (NSWindow*)(m_nwh); - NSView* contentView = (NSView*)window.contentView; - CAMetalLayer* layer = [CAMetalLayer layer]; + CAMetalLayer* layer = (CAMetalLayer*)(m_nwh); + + if ([window isKindOfClass:[NSWindow class]]) + { + NSView *contentView = (NSView *)window.contentView; + layer = [CAMetalLayer layer]; + + [contentView setWantsLayer : YES]; + [contentView setLayer : layer]; + } + else if ([layer isKindOfClass:[CAMetalLayer class]]) + { + NSView *contentView = (NSView *)layer.delegate; + window = contentView.window; + } + else + { + BX_WARN(0, "Unable to create MoltenVk surface. Please set platform data window to an NSWindow or CAMetalLayer"); + return result; + } if (m_resolution.reset & BGFX_RESET_HIDPI) { layer.contentsScale = [window backingScaleFactor]; } - [contentView setWantsLayer : YES]; - [contentView setLayer : layer]; - VkMacOSSurfaceCreateInfoMVK sci; sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK; sci.pNext = NULL;