cocoa: Fix OpenGL rendering on macOS 10.14 ("Mojave").

Fixes Bugzilla #4272.
This commit is contained in:
Ryan C. Gordon 2018-10-18 12:05:05 -04:00
parent eac3fd28d8
commit f677377339

View file

@ -632,8 +632,6 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
const unsigned int newflags = [NSEvent modifierFlags] & NSEventModifierFlagCapsLock; const unsigned int newflags = [NSEvent modifierFlags] & NSEventModifierFlagCapsLock;
_data->videodata->modifierFlags = (_data->videodata->modifierFlags & ~NSEventModifierFlagCapsLock) | newflags; _data->videodata->modifierFlags = (_data->videodata->modifierFlags & ~NSEventModifierFlagCapsLock) | newflags;
SDL_ToggleModState(KMOD_CAPS, newflags != 0); SDL_ToggleModState(KMOD_CAPS, newflags != 0);
ScheduleContextUpdates(_data);
} }
- (void)windowDidResignKey:(NSNotification *)aNotification - (void)windowDidResignKey:(NSNotification *)aNotification
@ -1145,14 +1143,18 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
- (BOOL)mouseDownCanMoveWindow; - (BOOL)mouseDownCanMoveWindow;
- (void)drawRect:(NSRect)dirtyRect; - (void)drawRect:(NSRect)dirtyRect;
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent; - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent;
- (BOOL)wantsUpdateLayer;
- (void)updateLayer;
@end @end
@implementation SDLView @implementation SDLView
- (void)setSDLWindow:(SDL_Window*)window - (void)setSDLWindow:(SDL_Window*)window
{ {
_sdlWindow = window; _sdlWindow = window;
} }
/* this is used on older macOS revisions. 10.8 and later use updateLayer. */
- (void)drawRect:(NSRect)dirtyRect - (void)drawRect:(NSRect)dirtyRect
{ {
/* Force the graphics context to clear to black so we don't get a flash of /* Force the graphics context to clear to black so we don't get a flash of
@ -1163,6 +1165,21 @@ SetWindowStyle(SDL_Window * window, NSUInteger style)
SDL_SendWindowEvent(_sdlWindow, SDL_WINDOWEVENT_EXPOSED, 0, 0); SDL_SendWindowEvent(_sdlWindow, SDL_WINDOWEVENT_EXPOSED, 0, 0);
} }
-(BOOL) wantsUpdateLayer
{
return YES;
}
-(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
only gets called for window creation and other extraordinary events. */
self.layer.backgroundColor = NSColor.blackColor.CGColor;
ScheduleContextUpdates((SDL_WindowData *) _sdlWindow->driverdata);
SDL_SendWindowEvent(_sdlWindow, SDL_WINDOWEVENT_EXPOSED, 0, 0);
}
- (void)rightMouseDown:(NSEvent *)theEvent - (void)rightMouseDown:(NSEvent *)theEvent
{ {
[[self nextResponder] rightMouseDown:theEvent]; [[self nextResponder] rightMouseDown:theEvent];
@ -1345,6 +1362,7 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window)
[contentView setWantsBestResolutionOpenGLSurface:YES]; [contentView setWantsBestResolutionOpenGLSurface:YES];
} }
} }
#if SDL_VIDEO_OPENGL_ES2 #if SDL_VIDEO_OPENGL_ES2
#if SDL_VIDEO_OPENGL_EGL #if SDL_VIDEO_OPENGL_EGL
if ((window->flags & SDL_WINDOW_OPENGL) && if ((window->flags & SDL_WINDOW_OPENGL) &&