aboutsummaryrefslogtreecommitdiff
path: root/sokol_gfx.h
diff options
context:
space:
mode:
Diffstat (limited to 'sokol_gfx.h')
-rw-r--r--sokol_gfx.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/sokol_gfx.h b/sokol_gfx.h
index 9049ae27..acda3dc4 100644
--- a/sokol_gfx.h
+++ b/sokol_gfx.h
@@ -10578,6 +10578,11 @@ _SOKOL_PRIVATE void _sg_mtl_begin_pass(_sg_pass_t* pass, const sg_pass_action* a
/* block until the oldest frame in flight has finished */
dispatch_semaphore_wait(_sg.mtl.sem, DISPATCH_TIME_FOREVER);
_sg.mtl.cmd_buffer = [_sg.mtl.cmd_queue commandBufferWithUnretainedReferences];
+ [_sg.mtl.cmd_buffer addCompletedHandler:^(id<MTLCommandBuffer> cmd_buffer) {
+ // NOTE: this code is called on a different thread!
+ _SOKOL_UNUSED(cmd_buffer);
+ dispatch_semaphore_signal(_sg.mtl.sem);
+ }];
}
/* if this is first pass in frame, get uniform buffer base pointer */
@@ -10724,11 +10729,9 @@ _SOKOL_PRIVATE void _sg_mtl_commit(void) {
else {
cur_drawable = (__bridge id<MTLDrawable>) _sg.mtl.drawable_userdata_cb(_sg.mtl.user_data);
}
- [_sg.mtl.cmd_buffer presentDrawable:cur_drawable];
- [_sg.mtl.cmd_buffer addCompletedHandler:^(id<MTLCommandBuffer> cmd_buffer) {
- _SOKOL_UNUSED(cmd_buffer);
- dispatch_semaphore_signal(_sg.mtl.sem);
- }];
+ if (nil != cur_drawable) {
+ [_sg.mtl.cmd_buffer presentDrawable:cur_drawable];
+ }
[_sg.mtl.cmd_buffer commit];
/* garbage-collect resources pending for release */