12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // SPDX-License-Identifier: Unlicense OR MIT
- // +build darwin,!ios,nometal
- #import <AppKit/AppKit.h>
- #include <CoreFoundation/CoreFoundation.h>
- #include <OpenGL/OpenGL.h>
- #include "_cgo_export.h"
- CALayer *gio_layerFactory(BOOL presentWithTrans) {
- @autoreleasepool {
- return [CALayer layer];
- }
- }
- CFTypeRef gio_createGLContext(void) {
- @autoreleasepool {
- 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];
- NSOpenGLContext *ctx = [[NSOpenGLContext alloc] initWithFormat:pixFormat shareContext: nil];
- return CFBridgingRetain(ctx);
- }
- }
- void gio_setContextView(CFTypeRef ctxRef, CFTypeRef viewRef) {
- NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
- NSView *view = (__bridge NSView *)viewRef;
- [view setWantsBestResolutionOpenGLSurface:YES];
- [ctx setView:view];
- }
- void gio_clearCurrentContext(void) {
- @autoreleasepool {
- [NSOpenGLContext clearCurrentContext];
- }
- }
- void gio_updateContext(CFTypeRef ctxRef) {
- @autoreleasepool {
- NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
- [ctx update];
- }
- }
- void gio_makeCurrentContext(CFTypeRef ctxRef) {
- @autoreleasepool {
- NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
- [ctx makeCurrentContext];
- }
- }
- void gio_lockContext(CFTypeRef ctxRef) {
- @autoreleasepool {
- NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
- CGLLockContext([ctx CGLContextObj]);
- }
- }
- void gio_unlockContext(CFTypeRef ctxRef) {
- @autoreleasepool {
- NSOpenGLContext *ctx = (__bridge NSOpenGLContext *)ctxRef;
- CGLUnlockContext([ctx CGLContextObj]);
- }
- }
|