diff --git a/patches/cocotron.patch b/patches/cocotron.patch index baaed82..97aeb5d 100644 --- a/patches/cocotron.patch +++ b/patches/cocotron.patch @@ -8723,7 +8723,7 @@ index 5dcac115..5de4f03f 100644 + @end diff --git a/QuartzCore/CALayerContext.m b/QuartzCore/CALayerContext.m -index 5dce8c56..dee2b80c 100644 +index 5dce8c56..d76cdae4 100644 --- a/QuartzCore/CALayerContext.m +++ b/QuartzCore/CALayerContext.m @@ -1,47 +1,58 @@ @@ -8879,7 +8879,7 @@ index 5dce8c56..dee2b80c 100644 } - (void) assignTextureIdsToLayerTree: (CALayer *) layer { -@@ -93,7 +148,22 @@ +@@ -93,8 +148,27 @@ [self assignTextureIdsToLayerTree: child]; } @@ -8900,9 +8900,14 @@ index 5dce8c56..dee2b80c 100644 - (void) renderLayer: (CALayer *) layer { + CFTimeInterval renderLayerStart = CACurrentMediaTime(); CGLContextMakeCurrentAndAttachToWindow(_glContext, _cglWindow); ++ // CAMetalLayer first makes this context current without a surface, which leaves GL_DRAW_BUFFER ++ // at GL_NONE on NVIDIA even once the window is attached (Mesa resets it). ++ glDrawBuffer(GL_BACK); ++ glReadBuffer(GL_BACK); glEnable(GL_DEPTH_TEST); -@@ -118,27 +188,63 @@ + glShadeModel(GL_SMOOTH); +@@ -118,27 +192,63 @@ [_deleteTextureIds removeAllObjects]; @@ -8971,7 +8976,7 @@ index 5dce8c56..dee2b80c 100644 } - (void) startTimerIfNeeded { -@@ -147,7 +253,7 @@ +@@ -147,7 +257,7 @@ target: self selector: @selector(timer:) userInfo: nil @@ -8980,7 +8985,7 @@ index 5dce8c56..dee2b80c 100644 } - (void) deleteTextureId: (NSNumber *) textureId { -@@ -155,7 +261,10 @@ +@@ -155,7 +265,10 @@ } - (void) flush {