Browse Source

Use existing metal layer if present on NSWindow

If we create and assign a new metal layer to NSWindow, when another one
was already assigned, the window content stays black.
Blaž Tomažič 7 năm trước cách đây
mục cha
commit
dd4edb23ed
1 tập tin đã thay đổi với 11 bổ sung3 xóa
  1. 11 3
      src/renderer_mtl.mm

+ 11 - 3
src/renderer_mtl.mm

@@ -2868,9 +2868,17 @@ namespace bgfx { namespace mtl
 				else
 				{
 					NSWindow* nsWindow = (NSWindow*)_nwh;
-					[nsWindow.contentView setWantsLayer:YES];
-					m_metalLayer = [CAMetalLayer layer];
-					[nsWindow.contentView setLayer:m_metalLayer];
+					CALayer* layer = nsWindow.contentView.layer;
+					if(NULL != layer && [layer isKindOfClass:NSClassFromString(@"CAMetalLayer")])
+					{
+						m_metalLayer = (CAMetalLayer*)layer;
+					}
+					else
+					{
+						[nsWindow.contentView setWantsLayer:YES];
+						m_metalLayer = [CAMetalLayer layer];
+						[nsWindow.contentView setLayer:m_metalLayer];
+					}
 				}
 			}
 #endif // BX_PLATFORM_*