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  }