From 084190b5aed27e167574e0bfa8619d304f64bb39 Mon Sep 17 00:00:00 2001 From: Ian C Date: Thu, 14 Dec 2023 20:06:19 +0000 Subject: Uodates --- metal_test.xcodeproj/project.pbxproj | 4 +++ metal_test/ContentView.swift | 20 +---------- metal_view.swift | 65 ++++++++++++++++++++++++++++++++---- 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 = ""; }; 3D63BC952B11E80E007AE59F /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 3D63BC972B11E80E007AE59F /* metal_test.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = metal_test.entitlements; sourceTree = ""; }; + 3D9ED6932B1BC48100BE74DB /* metal_view.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = metal_view.swift; sourceTree = ""; }; /* 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) -> 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) { + } + + 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() + } + } +} -- cgit v1.2.3