Browse Source

Fixed creating MoltenVk surface with agnostic backends such as SDL2 (#3158)

Jamil Halabi 2 years ago
parent
commit
64e83a0ec2
1 changed files with 20 additions and 5 deletions
  1. 20 5
      src/renderer_vk.cpp

+ 20 - 5
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;