summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2023-12-14 20:06:19 +0000
committerIan C <ianc@noddybox.co.uk>2023-12-14 20:06:19 +0000
commit084190b5aed27e167574e0bfa8619d304f64bb39 (patch)
treefbfb306496d4aa7442ccda18a2c08a262555ce10
parent8fb7fc734f15817e0a3dfe9b14005eb334c2629c (diff)
Uodatesmain
-rw-r--r--metal_test.xcodeproj/project.pbxproj4
-rw-r--r--metal_test/ContentView.swift20
-rw-r--r--metal_view.swift65
3 files changed, 63 insertions, 26 deletions
diff --git a/metal_test.xcodeproj/project.pbxproj b/metal_test.xcodeproj/project.pbxproj
index 42b5659..625e4f5 100644
--- a/metal_test.xcodeproj/project.pbxproj
+++ b/metal_test.xcodeproj/project.pbxproj
@@ -13,6 +13,7 @@
3D63BC912B11E80D007AE59F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D63BC902B11E80D007AE59F /* ContentView.swift */; };
3D63BC932B11E80E007AE59F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3D63BC922B11E80E007AE59F /* Assets.xcassets */; };
3D63BC962B11E80E007AE59F /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3D63BC952B11E80E007AE59F /* Preview Assets.xcassets */; };
+ 3D9ED6942B1BC48100BE74DB /* metal_view.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9ED6932B1BC48100BE74DB /* metal_view.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -24,6 +25,7 @@
3D63BC922B11E80E007AE59F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
3D63BC952B11E80E007AE59F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
3D63BC972B11E80E007AE59F /* metal_test.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = metal_test.entitlements; sourceTree = "<group>"; };
+ 3D9ED6932B1BC48100BE74DB /* metal_view.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = metal_view.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -40,6 +42,7 @@
3D63BC822B11E80D007AE59F = {
isa = PBXGroup;
children = (
+ 3D9ED6932B1BC48100BE74DB /* metal_view.swift */,
3D63BC8D2B11E80D007AE59F /* metal_test */,
3D63BC8C2B11E80D007AE59F /* Products */,
);
@@ -149,6 +152,7 @@
3D4E32F82B12959E00968289 /* MapView.swift in Sources */,
3D63BC8F2B11E80D007AE59F /* metal_testApp.swift in Sources */,
3D4E32F62B1290C900968289 /* CircleImage.swift in Sources */,
+ 3D9ED6942B1BC48100BE74DB /* metal_view.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/metal_test/ContentView.swift b/metal_test/ContentView.swift
index 481242f..1aa8e64 100644
--- a/metal_test/ContentView.swift
+++ b/metal_test/ContentView.swift
@@ -10,25 +10,7 @@ import Metal
struct ContentView: View {
var body: some View {
- VStack {
- MapView()
- .frame(height:300)
- CircleImage()
- .offset(y:-130)
- .padding(.bottom,-130)
- VStack {
- Text("Turtle Rock")
- .font(.title)
- HStack {
- Text("Joshua Tree National Park")
- .font(.subheadline)
- Spacer()
- Text("California")
- .font(.subheadline)
- }
- }
- }
- .padding()
+ MetalView()
}
}
diff --git a/metal_view.swift b/metal_view.swift
index 7cc8d34..31c2ea8 100644
--- a/metal_view.swift
+++ b/metal_view.swift
@@ -1,8 +1,59 @@
-//
-// metal_view.swift
-// metal_test
-//
-// Created by Ian C on 02/12/2023.
-//
+import SwiftUI
+import MetalKit
-import Foundation
+struct MetalView: NSViewRepresentable {
+ func makeCoordinator() -> Coordinator {
+ Coordinator(self)
+ }
+ func makeNSView(context: NSViewRepresentableContext<MetalView>) -> MTKView {
+ let mtkView = MTKView()
+ mtkView.delegate = context.coordinator
+ mtkView.preferredFramesPerSecond = 60
+ mtkView.enableSetNeedsDisplay = true
+ if let metalDevice = MTLCreateSystemDefaultDevice() {
+ mtkView.device = metalDevice
+ }
+ mtkView.framebufferOnly = false
+ mtkView.clearColor = MTLClearColor(red: 0, green: 0, blue: 0, alpha: 0)
+ mtkView.drawableSize = mtkView.frame.size
+ mtkView.enableSetNeedsDisplay = true
+ mtkView.isPaused = false
+ return mtkView
+ }
+
+ func updateNSView(_ nsView: MTKView, context: NSViewRepresentableContext<MetalView>) {
+ }
+
+ class Coordinator : NSObject, MTKViewDelegate {
+ var parent: MetalView
+ var metalDevice: MTLDevice!
+ var metalCommandQueue: MTLCommandQueue!
+
+ init(_ parent: MetalView) {
+ self.parent = parent
+ if let metalDevice = MTLCreateSystemDefaultDevice() {
+ self.metalDevice = metalDevice
+ }
+ self.metalCommandQueue = metalDevice.makeCommandQueue()!
+ super.init()
+ }
+
+ func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {
+ }
+
+ func draw(in view: MTKView) {
+ guard let drawable = view.currentDrawable else {
+ return
+ }
+ let commandBuffer = metalCommandQueue.makeCommandBuffer()
+ let rpd = view.currentRenderPassDescriptor
+ rpd?.colorAttachments[0].clearColor = MTLClearColorMake(0, 0, 0, 1)
+ rpd?.colorAttachments[0].loadAction = .clear
+ rpd?.colorAttachments[0].storeAction = .store
+ let re = commandBuffer?.makeRenderCommandEncoder(descriptor: rpd!)
+ re?.endEncoding()
+ commandBuffer?.present(drawable)
+ commandBuffer?.commit()
+ }
+ }
+}