summaryrefslogtreecommitdiff
path: root/Source/Core/Common/GL/GLInterface
diff options
context:
space:
mode:
authorMichael Maltese <michaeljosephmaltese@gmail.com>2017-04-15 19:23:19 -0700
committerMichael Maltese <michaeljosephmaltese@gmail.com>2017-04-15 19:34:42 -0700
commit5298328cb175a17eb9ea534a9d07dc57b42d2d42 (patch)
tree1a0bcdbc85ba3045cf0ff92fc7332ef9b15a5011 /Source/Core/Common/GL/GLInterface
parenta389ae0711142d8c5c996fda3d1e6c5731d71de3 (diff)
Add headless support on macOS
Diffstat (limited to 'Source/Core/Common/GL/GLInterface')
-rw-r--r--Source/Core/Common/GL/GLInterface/AGL.mm70
1 files changed, 38 insertions, 32 deletions
diff --git a/Source/Core/Common/GL/GLInterface/AGL.mm b/Source/Core/Common/GL/GLInterface/AGL.mm
index 78b2db2ea4..594a854f31 100644
--- a/Source/Core/Common/GL/GLInterface/AGL.mm
+++ b/Source/Core/Common/GL/GLInterface/AGL.mm
@@ -14,22 +14,6 @@ void cInterfaceAGL::Swap()
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
bool cInterfaceAGL::Create(void* window_handle, bool core)
{
- cocoaWin = reinterpret_cast<NSView*>(window_handle);
- NSSize size = [cocoaWin frame].size;
-
- // Enable high-resolution display support.
- [cocoaWin setWantsBestResolutionOpenGLSurface:YES];
-
- NSWindow* window = [cocoaWin window];
-
- float scale = [window backingScaleFactor];
- size.width *= scale;
- size.height *= scale;
-
- // Control window size and picture scaling
- s_backbuffer_width = size.width;
- s_backbuffer_height = size.height;
-
NSOpenGLPixelFormatAttribute attr[] = {NSOpenGLPFADoubleBuffer, NSOpenGLPFAOpenGLProfile,
core ? NSOpenGLProfileVersion3_2Core :
NSOpenGLProfileVersionLegacy,
@@ -49,15 +33,34 @@ bool cInterfaceAGL::Create(void* window_handle, bool core)
return false;
}
- if (cocoaWin == nil)
+ if (window_handle)
{
- ERROR_LOG(VIDEO, "failed to create window");
- return false;
- }
+ cocoaWin = reinterpret_cast<NSView*>(window_handle);
+ NSSize size = [cocoaWin frame].size;
+
+ // Enable high-resolution display support.
+ [cocoaWin setWantsBestResolutionOpenGLSurface:YES];
- [window makeFirstResponder:cocoaWin];
- [cocoaCtx setView:cocoaWin];
- [window makeKeyAndOrderFront:nil];
+ NSWindow* window = [cocoaWin window];
+
+ float scale = [window backingScaleFactor];
+ size.width *= scale;
+ size.height *= scale;
+
+ // Control window size and picture scaling
+ s_backbuffer_width = size.width;
+ s_backbuffer_height = size.height;
+
+ if (cocoaWin == nil)
+ {
+ ERROR_LOG(VIDEO, "failed to create window");
+ return false;
+ }
+
+ [window makeFirstResponder:cocoaWin];
+ [cocoaCtx setView:cocoaWin];
+ [window makeKeyAndOrderFront:nil];
+ }
return true;
}
@@ -84,18 +87,21 @@ void cInterfaceAGL::Shutdown()
void cInterfaceAGL::Update()
{
- NSWindow* window = [cocoaWin window];
- NSSize size = [cocoaWin frame].size;
+ if (cocoaWin)
+ {
+ NSWindow* window = [cocoaWin window];
+ NSSize size = [cocoaWin frame].size;
- float scale = [window backingScaleFactor];
- size.width *= scale;
- size.height *= scale;
+ float scale = [window backingScaleFactor];
+ size.width *= scale;
+ size.height *= scale;
- if (s_backbuffer_width == size.width && s_backbuffer_height == size.height)
- return;
+ if (s_backbuffer_width == size.width && s_backbuffer_height == size.height)
+ return;
- s_backbuffer_width = size.width;
- s_backbuffer_height = size.height;
+ s_backbuffer_width = size.width;
+ s_backbuffer_height = size.height;
+ }
[cocoaCtx update];
}