always calling UI API on main thread

This commit is contained in:
Attila Kocsis
2020-01-22 17:40:33 +01:00
committed by Бранимир Караџић
parent 880f932cb8
commit ecc8f791f2

View File

@@ -3036,16 +3036,36 @@ namespace bgfx { namespace mtl
return;
}
CALayer* layer = contentView.layer;
if(NULL != layer && [layer isKindOfClass:NSClassFromString(@"CAMetalLayer")])
void (^setLayer)(void) = ^{
CALayer* layer = contentView.layer;
if(NULL != layer && [layer isKindOfClass:NSClassFromString(@"CAMetalLayer")])
{
m_metalLayer = (CAMetalLayer*)layer;
}
else
{
[contentView setWantsLayer:YES];
m_metalLayer = [CAMetalLayer layer];
[contentView setLayer:m_metalLayer];
}
};
if ([NSThread isMainThread])
{
m_metalLayer = (CAMetalLayer*)layer;
setLayer();
}
else
{
[contentView setWantsLayer:YES];
m_metalLayer = [CAMetalLayer layer];
[contentView setLayer:m_metalLayer];
bx::Semaphore semaphore;
bx::Semaphore* psemaphore = &semaphore;
CFRunLoopPerformBlock([[NSRunLoop mainRunLoop] getCFRunLoop],
kCFRunLoopCommonModes,
^{
setLayer();
psemaphore->post();
});
semaphore.wait();
}
}
}