metal_ios.go 1.1 KB

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