github.com/cybriq/giocore@v0.0.7-0.20210703034601-cfb9cb5f3900/gpu/headless/headless_macos.m (about) 1 // SPDX-License-Identifier: Unlicense OR MIT 2 3 // +build darwin,!ios 4 5 @import AppKit; 6 @import OpenGL; 7 @import OpenGL.GL; 8 @import OpenGL.GL3; 9 10 #include <CoreFoundation/CoreFoundation.h> 11 #include "_cgo_export.h" 12 13 void gio_headless_releaseContext(CFTypeRef ctxRef) { 14 CFBridgingRelease(ctxRef); 15 } 16 17 CFTypeRef gio_headless_newContext(void) { 18 NSOpenGLPixelFormatAttribute attr[] = { 19 NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, 20 NSOpenGLPFAColorSize, 24, 21 NSOpenGLPFAAccelerated, 22 // Opt-in to automatic GPU switching. CGL-only property. 23 kCGLPFASupportsAutomaticGraphicsSwitching, 24 NSOpenGLPFAAllowOfflineRenderers, 25 0 26 }; 27 NSOpenGLPixelFormat *pixFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attr]; 28 if (pixFormat == nil) { 29 return NULL; 30 } 31 NSOpenGLContext *ctx = [[NSOpenGLContext alloc] initWithFormat:pixFormat shareContext:nil]; 32 return CFBridgingRetain(ctx); 33 } 34 35 void gio_headless_clearCurrentContext(CFTypeRef ctxRef) { 36 NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef; 37 CGLUnlockContext([ctx CGLContextObj]); 38 [NSOpenGLContext clearCurrentContext]; 39 } 40 41 void gio_headless_makeCurrentContext(CFTypeRef ctxRef) { 42 NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef; 43 [ctx makeCurrentContext]; 44 CGLLockContext([ctx CGLContextObj]); 45 }