Commit b7a4fdd31828b7fc5beefd3b0ecd1bc3b344f4e2

Ryan C. Gordon 2020-07-17T11:16:35

metal: Make sure we have a command buffer available before trying to present. This fixes a case where you render to the backbuffer, then render to a render target, set the current target back to the backbuffer, and then present without drawing anything else; in this circumstance, the Present command would never happen. Fixes Bugzilla #5011.

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/src/render/metal/SDL_render_metal.m b/src/render/metal/SDL_render_metal.m
index ba31b6e..04616e3 100644
--- a/src/render/metal/SDL_render_metal.m
+++ b/src/render/metal/SDL_render_metal.m
@@ -1518,6 +1518,8 @@ METAL_RenderPresent(SDL_Renderer * renderer)
 { @autoreleasepool {
     METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
 
+    METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, nil);
+
     if (data.mtlcmdencoder != nil) {
         [data.mtlcmdencoder endEncoding];
     }