github.com/gop9/olt@v0.0.0-20200202132135-d956aad50b08/gio/app/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 "headless_darwin.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  }
    46  
    47  void gio_headless_prepareContext(CFTypeRef ctxRef) {
    48  	// Bind a default VBA to emulate OpenGL ES 2.
    49  	GLuint defVBA;
    50  	glGenVertexArrays(1, &defVBA);
    51  	glBindVertexArray(defVBA);
    52  	glEnable(GL_FRAMEBUFFER_SRGB);
    53  }