Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
macOS: Fix the initial window background not being black since macOS …
…10.14.2 or so, when OpenGL is used (bug #4810). Also fixes "CGContext: invalid context 0x0" errors when an OpenGL window is created (bug #4470).
  • Loading branch information
slime73 committed Oct 14, 2019
1 parent 009226c commit 074f6a5
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions src/video/cocoa/SDL_cocoawindow.m
Expand Up @@ -1266,23 +1266,32 @@ - (void)setSDLWindow:(SDL_Window*)window
_sdlWindow = window;
}

/* this is used on older macOS revisions. 10.8 and later use updateLayer. */
/* this is used on older macOS revisions, and newer ones which emulate old
NSOpenGLContext behaviour while still using a layer under the hood. 10.8 and
later use updateLayer, up until 10.14.2 or so, which uses drawRect without
a GraphicsContext and with a layer active instead (for OpenGL contexts). */
- (void)drawRect:(NSRect)dirtyRect
{
/* Force the graphics context to clear to black so we don't get a flash of
white until the app is ready to draw. In practice on modern macOS, this
only gets called for window creation and other extraordinary events. */
[[NSColor blackColor] setFill];
NSRectFill(dirtyRect);
if ([NSGraphicsContext currentContext]) {
[[NSColor blackColor] setFill];
NSRectFill(dirtyRect);
} else if (self.layer) {
self.layer.backgroundColor = CGColorGetConstantColor(kCGColorBlack);
}

SDL_SendWindowEvent(_sdlWindow, SDL_WINDOWEVENT_EXPOSED, 0, 0);
}

-(BOOL) wantsUpdateLayer
- (BOOL)wantsUpdateLayer
{
return YES;
}

-(void) updateLayer
/* This is also called when a Metal layer is active. */
- (void)updateLayer
{
/* Force the graphics context to clear to black so we don't get a flash of
white until the app is ready to draw. In practice on modern macOS, this
Expand Down

0 comments on commit 074f6a5

Please sign in to comment.