app/headless: implement headless windows

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-11-28 12:34:45 +01:00
parent 9df3c76aa2
commit 0b84137f40
10 changed files with 367 additions and 1 deletions
+45
View File
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: Unlicense OR MIT
// +build darwin,!ios
@import AppKit;
@import OpenGL;
@import OpenGL.GL;
#include <CoreFoundation/CoreFoundation.h>
#include "headless_darwin.h"
void gio_headless_releaseContext(CFTypeRef ctxRef) {
CFBridgingRelease(ctxRef);
}
CFTypeRef gio_headless_newContext(void) {
NSOpenGLPixelFormatAttribute attr[] = {
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAccelerated,
// Opt-in to automatic GPU switching. CGL-only property.
kCGLPFASupportsAutomaticGraphicsSwitching,
NSOpenGLPFAAllowOfflineRenderers,
0
};
NSOpenGLPixelFormat *pixFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attr];
if (pixFormat == nil) {
return NULL;
}
NSOpenGLContext *ctx = [[NSOpenGLContext alloc] initWithFormat:pixFormat shareContext:nil];
return CFBridgingRetain(ctx);
}
void gio_headless_clearCurrentContext(CFTypeRef ctxRef) {
NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
CGLUnlockContext([ctx CGLContextObj]);
[NSOpenGLContext clearCurrentContext];
}
void gio_headless_makeCurrentContext(CFTypeRef ctxRef) {
NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
[ctx makeCurrentContext];
glEnable(GL_FRAMEBUFFER_SRGB);
CGLLockContext([ctx CGLContextObj]);
}