metal_macos.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // SPDX-License-Identifier: Unlicense OR MIT
  2. //go:build darwin && !ios && !nometal
  3. // +build darwin,!ios,!nometal
  4. package app
  5. /*
  6. #cgo CFLAGS: -Werror -xobjective-c -fobjc-arc
  7. #import <AppKit/AppKit.h>
  8. #import <QuartzCore/CAMetalLayer.h>
  9. #include <CoreFoundation/CoreFoundation.h>
  10. CALayer *gio_layerFactory(BOOL presentWithTrans) {
  11. @autoreleasepool {
  12. CAMetalLayer *l = [CAMetalLayer layer];
  13. l.autoresizingMask = kCALayerHeightSizable|kCALayerWidthSizable;
  14. l.needsDisplayOnBoundsChange = YES;
  15. l.presentsWithTransaction = presentWithTrans;
  16. return l;
  17. }
  18. }
  19. static CFTypeRef getMetalLayer(CFTypeRef viewRef) {
  20. @autoreleasepool {
  21. NSView *view = (__bridge NSView *)viewRef;
  22. return CFBridgingRetain(view.layer);
  23. }
  24. }
  25. static void resizeDrawable(CFTypeRef viewRef, CFTypeRef layerRef) {
  26. @autoreleasepool {
  27. NSView *view = (__bridge NSView *)viewRef;
  28. CAMetalLayer *layer = (__bridge CAMetalLayer *)layerRef;
  29. CGSize size = layer.bounds.size;
  30. size.width *= layer.contentsScale;
  31. size.height *= layer.contentsScale;
  32. layer.drawableSize = size;
  33. }
  34. }
  35. */
  36. import "C"
  37. func getMetalLayer(view C.CFTypeRef) C.CFTypeRef {
  38. return C.getMetalLayer(view)
  39. }
  40. func resizeDrawable(view, layer C.CFTypeRef) {
  41. C.resizeDrawable(view, layer)
  42. }