diff --git a/src/graphics_surface.c b/src/graphics_surface.c index fb8a9cf..5715f89 100644 --- a/src/graphics_surface.c +++ b/src/graphics_surface.c @@ -153,7 +153,7 @@ mg_surface mg_surface_create_for_window(mp_window window, mg_surface_api api) mg_surface mg_surface_create_remote(u32 width, u32 height, mg_surface_api api) { - if(__mgData.init) + if(!__mgData.init) { mg_init(); } @@ -180,7 +180,7 @@ mg_surface mg_surface_create_remote(u32 width, u32 height, mg_surface_api api) mg_surface mg_surface_create_host(mp_window window) { - if(__mgData.init) + if(!__mgData.init) { mg_init(); } diff --git a/src/mtl_surface.m b/src/mtl_surface.m index bba001c..e310030 100644 --- a/src/mtl_surface.m +++ b/src/mtl_surface.m @@ -170,12 +170,18 @@ mg_surface_data* mg_mtl_surface_create_for_window(mp_window window) //NOTE(martin): create a mtl device and a mtl layer and //----------------------------------------------------------- - surface->device = MTLCreateSystemDefaultDevice(); - [surface->device retain]; + /*WARN(martin): + Calling MTLCreateDefaultSystemDevice(), as advised by the doc, hangs Discord's screen sharing... + The workaround I found, which doesn't make sense, is to set the mtlLayer.device to mtlLayer.preferredDevice, + even if mtlLayer.preferredDevice is the same value as returned by MTLCreateDefaultSystemDevice(). + This works for now and allows screen sharing while using orca, but we'll have to revisit this when we want + more control over what GPU gets used. + */ surface->mtlLayer = [CAMetalLayer layer]; [surface->mtlLayer retain]; + surface->mtlLayer.device = surface->mtlLayer.preferredDevice; + surface->device = surface->mtlLayer.device; - surface->mtlLayer.device = surface->device; [surface->mtlLayer setOpaque:NO]; [surface->interface.layer.caLayer addSublayer: (CALayer*)surface->mtlLayer];