CAMetalLayer.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using static Veldrid.MetalBindings.ObjectiveCRuntime;
  2. using System;
  3. namespace Veldrid.MetalBindings
  4. {
  5. public struct CAMetalLayer
  6. {
  7. public readonly IntPtr NativePtr;
  8. public CAMetalLayer(IntPtr ptr) => NativePtr = ptr;
  9. public static CAMetalLayer New() => s_class.AllocInit<CAMetalLayer>();
  10. public static bool TryCast(IntPtr layerPointer, out CAMetalLayer metalLayer)
  11. {
  12. var layerObject = new NSObject(layerPointer);
  13. if (layerObject.IsKindOfClass(s_class))
  14. {
  15. metalLayer = new CAMetalLayer(layerPointer);
  16. return true;
  17. }
  18. metalLayer = default;
  19. return false;
  20. }
  21. public MTLDevice device
  22. {
  23. get => objc_msgSend<MTLDevice>(NativePtr, sel_device);
  24. set => objc_msgSend(NativePtr, sel_setDevice, value);
  25. }
  26. public MTLPixelFormat pixelFormat
  27. {
  28. get => (MTLPixelFormat)uint_objc_msgSend(NativePtr, sel_pixelFormat);
  29. set => objc_msgSend(NativePtr, sel_setPixelFormat, (uint)value);
  30. }
  31. public Bool8 framebufferOnly
  32. {
  33. get => bool8_objc_msgSend(NativePtr, sel_framebufferOnly);
  34. set => objc_msgSend(NativePtr, sel_setFramebufferOnly, value);
  35. }
  36. public CGSize drawableSize
  37. {
  38. get => CGSize_objc_msgSend(NativePtr, sel_drawableSize);
  39. set => objc_msgSend(NativePtr, sel_setDrawableSize, value);
  40. }
  41. public CGRect frame
  42. {
  43. get => CGRect_objc_msgSend(NativePtr, "frame");
  44. set => objc_msgSend(NativePtr, "setFrame:", value);
  45. }
  46. public Bool8 opaque
  47. {
  48. get => bool8_objc_msgSend(NativePtr, "isOpaque");
  49. set => objc_msgSend(NativePtr, "setOpaque:", value);
  50. }
  51. public CAMetalDrawable nextDrawable() => objc_msgSend<CAMetalDrawable>(NativePtr, sel_nextDrawable);
  52. public Bool8 displaySyncEnabled
  53. {
  54. get => bool8_objc_msgSend(NativePtr, "displaySyncEnabled");
  55. set => objc_msgSend(NativePtr, "setDisplaySyncEnabled:", value);
  56. }
  57. private static readonly ObjCClass s_class = new ObjCClass(nameof(CAMetalLayer));
  58. private static readonly Selector sel_device = "device";
  59. private static readonly Selector sel_setDevice = "setDevice:";
  60. private static readonly Selector sel_pixelFormat = "pixelFormat";
  61. private static readonly Selector sel_setPixelFormat = "setPixelFormat:";
  62. private static readonly Selector sel_framebufferOnly = "framebufferOnly";
  63. private static readonly Selector sel_setFramebufferOnly = "setFramebufferOnly:";
  64. private static readonly Selector sel_drawableSize = "drawableSize";
  65. private static readonly Selector sel_setDrawableSize = "setDrawableSize:";
  66. private static readonly Selector sel_nextDrawable = "nextDrawable";
  67. }
  68. }