From fbe6e20802977ec830ef0d1e5dea76df839fbd7f Mon Sep 17 00:00:00 2001
From: xszAzy <3486170277@qq.com>
Date: Mon, 29 Sep 2025 23:22:37 +0800
Subject: [PATCH] for backing
---
.gitignore | 4 +
.gitmodules | 3 +
MEL.xcworkspace/contents.xcworkspacedata | 11 +
.../xcdebugger/Breakpoints_v2.xcbkptlist | 6 +
.../AccentColor.colorset/Contents.json | 11 -
.../AppIcon.appiconset/Contents.json | 85 -
MetalLearning/Assets.xcassets/Contents.json | 6 -
MetalLearning/ContentView.swift | 24 -
MetalLearning/Core.h | 4 +
MetalLearning/MEL.h | 4 +
.../MetalLearning.xcodeproj/project.pbxproj | 742 +++
.../xcschemes/xcschememanagement.plist | 14 +
MetalLearning/MetalLearningApp.swift | 17 -
MetalLearning/ShaderSrc/Shader.metal | 31 +
MetalLearning/src/MEL/Application.h | 19 +
MetalLearning/src/MEL/Application.mm | 38 +
MetalLearning/src/MEL/Entrypoint.mm | 17 +
.../src/MEL/Events/ApplicationEvent.h | 67 +
MetalLearning/src/MEL/Events/Event.h | 75 +
MetalLearning/src/MEL/Events/KeyEvent.h | 68 +
MetalLearning/src/MEL/Events/MouseEvent.h | 97 +
MetalLearning/src/MEL/Log/Log.h | 34 +
MetalLearning/src/MEL/Log/Log.mm | 15 +
MetalLearning/src/MEL/Renderer/AppDelegate.h | 7 +
MetalLearning/src/MEL/Renderer/AppDelegate.mm | 18 +
.../src/MEL/Renderer/MetalRenderer.h | 8 +
.../src/MEL/Renderer/MetalRenderer.mm | 94 +
.../src/MEL/Renderer/ViewController.h | 6 +
.../src/MEL/Renderer/ViewController.mm | 32 +
MetalLearning/src/MEL/Window/Window.h | 62 +
MetalLearning/src/MEL/Window/Window.mm | 123 +
MetalLearning/src/MEL/Window/WindowManager.h | 14 +
MetalLearning/src/MEL/Window/WindowManager.mm | 37 +
MetalLearning/src/Sandbox/Sandbox.mm | 16 +
MetalLearning/src/melpch.h | 12 +
MetalLearning/src/melpch.mm | 2 +
MetalLearning/vendor/spdlog | 1 +
MetalLearningTests/MetalLearningTests.swift | 16 -
.../MetalLearningUITests.swift | 41 -
.../MetalLearningUITestsLaunchTests.swift | 33 -
ShaderSrc/Shader.metal | 31 +
.../all-product-headers.yaml | 1 +
...ning-all-non-framework-target-headers.hmap | Bin 0 -> 121 bytes
.../MetalLearning-all-target-headers.hmap | Bin 0 -> 121 bytes
.../MetalLearning-generated-files.hmap | Bin 0 -> 121 bytes
.../MetalLearning-own-target-headers.hmap | Bin 0 -> 121 bytes
.../MetalLearning-project-headers.hmap | Bin 0 -> 233 bytes
.../MetalLearning.DependencyMetadataFileList | 0
...lLearning.DependencyStaticMetadataFileList | 0
.../MetalLearning.build/MetalLearning.hmap | Bin 0 -> 121 bytes
...4312c57c0f52879cdce924b91-common-args.resp | 1 +
.../8bba4233626f64a7ea772bb94a08a1a9 | 1 +
.../d41d8cd98f00b204e9800998ecf8427e | 0
.../f86cbb10517a3bd51f252887359b04af | 6 +-
.../fd8314defc70a8778956f026c0ddfd19 | Bin 0 -> 121 bytes
.../build-request.json | 58 +
.../description.msgpack | Bin 0 -> 3911 bytes
.../manifest.json | 1 +
.../target-graph.txt | 2 +
.../task-store.msgpack | Bin 0 -> 207743 bytes
.../MetalLearning/XCBuildData/build.db | Bin 0 -> 155648 bytes
.../0440f535d5a53410192dafeb23372191 | Bin 0 -> 233 bytes
.../8bba4233626f64a7ea772bb94a08a1a9 | 1 +
.../8d4fcfbc3367a5b675a05a2b57ea39ad | 4 +
.../9b89039b3e22784ed61e84b887da977f | 1 +
.../d41d8cd98f00b204e9800998ecf8427e | 0
.../f86cbb10517a3bd51f252887359b04af | 8 +
.../fd8314defc70a8778956f026c0ddfd19 | Bin 0 -> 121 bytes
.../build-request.json | 58 +
.../description.msgpack | Bin 0 -> 5781 bytes
.../manifest.json | 1 +
.../target-graph.txt | 2 +
.../task-store.msgpack | Bin 0 -> 237311 bytes
.../016e42f995b25361bf26837212204563 | 1 +
.../0440f535d5a53410192dafeb23372191 | Bin 0 -> 233 bytes
.../8bba4233626f64a7ea772bb94a08a1a9 | 1 +
.../8d4fcfbc3367a5b675a05a2b57ea39ad | 4 +
.../d41d8cd98f00b204e9800998ecf8427e | 0
.../f86cbb10517a3bd51f252887359b04af | 8 +
.../fd8314defc70a8778956f026c0ddfd19 | Bin 0 -> 121 bytes
.../build-request.json | 58 +
.../description.msgpack | Bin 0 -> 5781 bytes
.../manifest.json | 1 +
.../target-graph.txt | 2 +
.../task-store.msgpack | Bin 0 -> 239487 bytes
.../0440f535d5a53410192dafeb23372191 | Bin 0 -> 233 bytes
.../3bc73c31caa9a47b71370260bec2dc47 | 1 +
.../8bba4233626f64a7ea772bb94a08a1a9 | 1 +
.../8d4fcfbc3367a5b675a05a2b57ea39ad | 4 +
.../d41d8cd98f00b204e9800998ecf8427e | 0
.../f86cbb10517a3bd51f252887359b04af | 8 +
.../fd8314defc70a8778956f026c0ddfd19 | Bin 0 -> 121 bytes
.../build-request.json | 58 +
.../description.msgpack | Bin 0 -> 5781 bytes
.../manifest.json | 1 +
.../target-graph.txt | 2 +
.../task-store.msgpack | Bin 0 -> 237301 bytes
.../Contents/Info.plist | 20 +
.../Contents/Resources/DWARF/MetalLearning | Bin 0 -> 3521964 bytes
.../Relocations/aarch64/MetalLearning.yml | 5137 +++++++++++++++++
.../MetalLearning.app/Contents/Info.plist | 40 +
.../Contents/MacOS/MetalLearning | Bin 0 -> 1700400 bytes
.../MetalLearning.app/Contents/PkgInfo | 1 +
.../Contents/Resources/Shader.dat | 3 +
.../Contents/Resources/default.metallib | Bin 0 -> 6972 bytes
.../Contents/_CodeSignature/CodeResources | 139 +
premake5.lua | 81 +
107 files changed, 7424 insertions(+), 237 deletions(-)
create mode 100644 .gitignore
create mode 100644 .gitmodules
create mode 100644 MEL.xcworkspace/contents.xcworkspacedata
create mode 100644 MEL.xcworkspace/xcuserdata/xudianhuan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
delete mode 100644 MetalLearning/Assets.xcassets/AccentColor.colorset/Contents.json
delete mode 100644 MetalLearning/Assets.xcassets/AppIcon.appiconset/Contents.json
delete mode 100644 MetalLearning/Assets.xcassets/Contents.json
delete mode 100644 MetalLearning/ContentView.swift
create mode 100644 MetalLearning/Core.h
create mode 100644 MetalLearning/MEL.h
create mode 100644 MetalLearning/MetalLearning.xcodeproj/project.pbxproj
create mode 100644 MetalLearning/MetalLearning.xcodeproj/xcuserdata/xudianhuan.xcuserdatad/xcschemes/xcschememanagement.plist
delete mode 100644 MetalLearning/MetalLearningApp.swift
create mode 100644 MetalLearning/ShaderSrc/Shader.metal
create mode 100644 MetalLearning/src/MEL/Application.h
create mode 100644 MetalLearning/src/MEL/Application.mm
create mode 100644 MetalLearning/src/MEL/Entrypoint.mm
create mode 100644 MetalLearning/src/MEL/Events/ApplicationEvent.h
create mode 100644 MetalLearning/src/MEL/Events/Event.h
create mode 100644 MetalLearning/src/MEL/Events/KeyEvent.h
create mode 100644 MetalLearning/src/MEL/Events/MouseEvent.h
create mode 100644 MetalLearning/src/MEL/Log/Log.h
create mode 100644 MetalLearning/src/MEL/Log/Log.mm
create mode 100644 MetalLearning/src/MEL/Renderer/AppDelegate.h
create mode 100644 MetalLearning/src/MEL/Renderer/AppDelegate.mm
create mode 100644 MetalLearning/src/MEL/Renderer/MetalRenderer.h
create mode 100644 MetalLearning/src/MEL/Renderer/MetalRenderer.mm
create mode 100644 MetalLearning/src/MEL/Renderer/ViewController.h
create mode 100644 MetalLearning/src/MEL/Renderer/ViewController.mm
create mode 100644 MetalLearning/src/MEL/Window/Window.h
create mode 100644 MetalLearning/src/MEL/Window/Window.mm
create mode 100644 MetalLearning/src/MEL/Window/WindowManager.h
create mode 100644 MetalLearning/src/MEL/Window/WindowManager.mm
create mode 100644 MetalLearning/src/Sandbox/Sandbox.mm
create mode 100644 MetalLearning/src/melpch.h
create mode 100644 MetalLearning/src/melpch.mm
create mode 160000 MetalLearning/vendor/spdlog
delete mode 100644 MetalLearningTests/MetalLearningTests.swift
delete mode 100644 MetalLearningUITests/MetalLearningUITests.swift
delete mode 100644 MetalLearningUITests/MetalLearningUITestsLaunchTests.swift
create mode 100644 ShaderSrc/Shader.metal
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning-e033b179dceb315dcd5ecd602612986a-VFS/all-product-headers.yaml
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-non-framework-target-headers.hmap
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyMetadataFileList
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyStaticMetadataFileList
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.hmap
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/Objects-normal/arm64/af3fcb34312c57c0f52879cdce924b91-common-args.resp
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/d41d8cd98f00b204e9800998ecf8427e
rename MetalLearning/MetalLearning.entitlements => bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af (58%)
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/fd8314defc70a8778956f026c0ddfd19
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/build-request.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/description.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/manifest.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/target-graph.txt
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/task-store.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/build.db
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/0440f535d5a53410192dafeb23372191
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/8d4fcfbc3367a5b675a05a2b57ea39ad
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/9b89039b3e22784ed61e84b887da977f
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/d41d8cd98f00b204e9800998ecf8427e
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/attachments/fd8314defc70a8778956f026c0ddfd19
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/build-request.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/description.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/manifest.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/target-graph.txt
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d141e9892080c178f4f5fbaba7b758b1.xcbuilddata/task-store.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/016e42f995b25361bf26837212204563
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/0440f535d5a53410192dafeb23372191
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/8d4fcfbc3367a5b675a05a2b57ea39ad
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/d41d8cd98f00b204e9800998ecf8427e
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/attachments/fd8314defc70a8778956f026c0ddfd19
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/build-request.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/description.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/manifest.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/target-graph.txt
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/d85599197a3a4aca7ac6e87f545c7a9b.xcbuilddata/task-store.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/0440f535d5a53410192dafeb23372191
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/3bc73c31caa9a47b71370260bec2dc47
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/8d4fcfbc3367a5b675a05a2b57ea39ad
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/d41d8cd98f00b204e9800998ecf8427e
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/attachments/fd8314defc70a8778956f026c0ddfd19
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/build-request.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/description.msgpack
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/manifest.json
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/target-graph.txt
create mode 100644 bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/fb18ae1ea551295376d9abe4ea3d8d41.xcbuilddata/task-store.msgpack
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app.dSYM/Contents/Info.plist
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app.dSYM/Contents/Resources/DWARF/MetalLearning
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app.dSYM/Contents/Resources/Relocations/aarch64/MetalLearning.yml
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents/Info.plist
create mode 100755 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents/MacOS/MetalLearning
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents/PkgInfo
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents/Resources/Shader.dat
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents/Resources/default.metallib
create mode 100644 bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents/_CodeSignature/CodeResources
create mode 100644 premake5.lua
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a76e633
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+#dirs
+
+bin/
+bin-int/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..7e3680e
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "MetalLearning/src/vendor"]
+ path = MetalLearning/src/vendor
+ url = https://github.com/gabime/spdlog.git
diff --git a/MEL.xcworkspace/contents.xcworkspacedata b/MEL.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..4b9edc7
--- /dev/null
+++ b/MEL.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/MEL.xcworkspace/xcuserdata/xudianhuan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MEL.xcworkspace/xcuserdata/xudianhuan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
new file mode 100644
index 0000000..018b591
--- /dev/null
+++ b/MEL.xcworkspace/xcuserdata/xudianhuan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -0,0 +1,6 @@
+
+
+
diff --git a/MetalLearning/Assets.xcassets/AccentColor.colorset/Contents.json b/MetalLearning/Assets.xcassets/AccentColor.colorset/Contents.json
deleted file mode 100644
index eb87897..0000000
--- a/MetalLearning/Assets.xcassets/AccentColor.colorset/Contents.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "colors" : [
- {
- "idiom" : "universal"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/MetalLearning/Assets.xcassets/AppIcon.appiconset/Contents.json b/MetalLearning/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index ffdfe15..0000000
--- a/MetalLearning/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- },
- {
- "appearances" : [
- {
- "appearance" : "luminosity",
- "value" : "dark"
- }
- ],
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- },
- {
- "appearances" : [
- {
- "appearance" : "luminosity",
- "value" : "tinted"
- }
- ],
- "idiom" : "universal",
- "platform" : "ios",
- "size" : "1024x1024"
- },
- {
- "idiom" : "mac",
- "scale" : "1x",
- "size" : "16x16"
- },
- {
- "idiom" : "mac",
- "scale" : "2x",
- "size" : "16x16"
- },
- {
- "idiom" : "mac",
- "scale" : "1x",
- "size" : "32x32"
- },
- {
- "idiom" : "mac",
- "scale" : "2x",
- "size" : "32x32"
- },
- {
- "idiom" : "mac",
- "scale" : "1x",
- "size" : "128x128"
- },
- {
- "idiom" : "mac",
- "scale" : "2x",
- "size" : "128x128"
- },
- {
- "idiom" : "mac",
- "scale" : "1x",
- "size" : "256x256"
- },
- {
- "idiom" : "mac",
- "scale" : "2x",
- "size" : "256x256"
- },
- {
- "idiom" : "mac",
- "scale" : "1x",
- "size" : "512x512"
- },
- {
- "idiom" : "mac",
- "scale" : "2x",
- "size" : "512x512"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/MetalLearning/Assets.xcassets/Contents.json b/MetalLearning/Assets.xcassets/Contents.json
deleted file mode 100644
index 73c0059..0000000
--- a/MetalLearning/Assets.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/MetalLearning/ContentView.swift b/MetalLearning/ContentView.swift
deleted file mode 100644
index 57bd1a7..0000000
--- a/MetalLearning/ContentView.swift
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// ContentView.swift
-// MetalLearning
-//
-// Created by 徐殿欢 on 9/25/25.
-//
-
-import SwiftUI
-
-struct ContentView: View {
- var body: some View {
- VStack {
- Image(systemName: "globe")
- .imageScale(.large)
- .foregroundStyle(.tint)
- Text("Hello, world!")
- }
- .padding()
- }
-}
-
-#Preview {
- ContentView()
-}
diff --git a/MetalLearning/Core.h b/MetalLearning/Core.h
new file mode 100644
index 0000000..621758f
--- /dev/null
+++ b/MetalLearning/Core.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define BIT(x)(1<
+
+
+
+ SchemeUserState
+
+ MetalLearning.xcscheme_^#shared#^_
+
+ orderHint
+ 0
+
+
+
+
diff --git a/MetalLearning/MetalLearningApp.swift b/MetalLearning/MetalLearningApp.swift
deleted file mode 100644
index c9c72e5..0000000
--- a/MetalLearning/MetalLearningApp.swift
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// MetalLearningApp.swift
-// MetalLearning
-//
-// Created by 徐殿欢 on 9/25/25.
-//
-
-import SwiftUI
-
-@main
-struct MetalLearningApp: App {
- var body: some Scene {
- WindowGroup {
- ContentView()
- }
- }
-}
diff --git a/MetalLearning/ShaderSrc/Shader.metal b/MetalLearning/ShaderSrc/Shader.metal
new file mode 100644
index 0000000..90b0f53
--- /dev/null
+++ b/MetalLearning/ShaderSrc/Shader.metal
@@ -0,0 +1,31 @@
+#include
+using namespace metal;
+
+struct VertexOut{
+ float4 position [[position]];
+ float4 color;
+};
+
+vertex VertexOut vertexShader(uint vertexID [[vertex_id]]){
+ float2 positions[3]={
+ float2(0.0,0.5),
+ float2(-0.5,-0.5),
+ float2(0.5,-0.5)
+ };
+
+ float4 colors[3]={
+ float4(1.0,0.0,0.0,1.0),
+ float4(0.0,1.0,0.0,1.0),
+ float4(0.0,0.0,1.0,1.0)
+ };
+
+ VertexOut out;
+ out.position=float4(positions[vertexID],0.0,1.0);
+ out.color=colors[vertexID];
+ return out;
+}
+
+fragment float4 fragmentShader(VertexOut in [[stage_in]]){
+ return in.color;
+}
+
diff --git a/MetalLearning/src/MEL/Application.h b/MetalLearning/src/MEL/Application.h
new file mode 100644
index 0000000..425dfc2
--- /dev/null
+++ b/MetalLearning/src/MEL/Application.h
@@ -0,0 +1,19 @@
+#pragma once
+#include "Events/Event.h"
+#include "Events/KeyEvent.h"
+#include "Events/MouseEvent.h"
+#include "Events/ApplicationEvent.h"
+namespace MEL {
+ class Application{
+ public:
+ Application();
+ virtual ~Application();
+
+ void OnEvent(MEL::Event& e);
+ void Run();
+ private:
+ bool OnWindowClose(WindowCloseEvent& event);
+ bool m_Running;
+ };
+ Application* CreateApplication();
+}
diff --git a/MetalLearning/src/MEL/Application.mm b/MetalLearning/src/MEL/Application.mm
new file mode 100644
index 0000000..11b59fd
--- /dev/null
+++ b/MetalLearning/src/MEL/Application.mm
@@ -0,0 +1,38 @@
+#import "melpch.h"
+#import "Renderer/AppDelegate.h"
+#include "Log.h"
+#include "Application.h"
+#include "Events/ApplicationEvent.h"
+
+namespace MEL{
+ Application::Application(){
+
+ }
+
+ Application::~Application(){
+
+ }
+
+ void Application::OnEvent(MEL::Event& e){
+
+ }
+
+ void Application::Run() {
+ /*
+ NSApplication* application=[NSApplication sharedApplication];
+ AppDelegate* appDelegate=[[AppDelegate alloc] init];
+ [application setDelegate:appDelegate];
+
+ [application run];
+ */
+ while (m_Running){
+
+ }
+ }
+
+ bool Application::OnWindowClose(WindowCloseEvent& event){
+ m_Running=false;
+ return true;
+ }
+
+}
diff --git a/MetalLearning/src/MEL/Entrypoint.mm b/MetalLearning/src/MEL/Entrypoint.mm
new file mode 100644
index 0000000..1dbf844
--- /dev/null
+++ b/MetalLearning/src/MEL/Entrypoint.mm
@@ -0,0 +1,17 @@
+#import "melpch.h"
+#import "AppDelegate.h"
+#include "Application.h"
+#include "Log.h"
+
+MEL::Application* MEL::CreateApplication();
+
+int main(int argc,const char* argv[]){
+ MEL::Log::Init();
+ MEL_CORE_INFO("Testing");
+
+ auto app =MEL::CreateApplication();
+ app->Run();
+ delete app;
+
+ return 0;
+}
diff --git a/MetalLearning/src/MEL/Events/ApplicationEvent.h b/MetalLearning/src/MEL/Events/ApplicationEvent.h
new file mode 100644
index 0000000..e0d295f
--- /dev/null
+++ b/MetalLearning/src/MEL/Events/ApplicationEvent.h
@@ -0,0 +1,67 @@
+#pragma once
+
+#include "Event.h"
+
+namespace MEL {
+
+ class WindowResizeEvent : public Event
+ {
+ public:
+ WindowResizeEvent(unsigned int width, unsigned int height)
+ : m_Width(width), m_Height(height) {}
+
+ inline unsigned int GetWidth() const { return m_Width; }
+ inline unsigned int GetHeight() const { return m_Height; }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "WindowResizeEvent:" << m_Width << "," << m_Height;
+ return ss.str();
+ }
+ EVENT_CLASS_TYPE(WindowResize)
+ EVENT_CLASS_CATEGORY(EventCategoryApplication)
+ private:
+ unsigned int m_Width, m_Height;
+ };
+
+ class WindowCloseEvent : public Event
+ {
+ public:
+ WindowCloseEvent() {
+ }
+
+ EVENT_CLASS_TYPE(WindowClose)
+ EVENT_CLASS_CATEGORY(EventCategoryApplication)
+ };
+
+ class AppTickEvent : public Event
+ {
+ public:
+ AppTickEvent() {
+ }
+
+ EVENT_CLASS_TYPE(AppTick)
+ EVENT_CLASS_CATEGORY(EventCategoryApplication)
+ };
+
+ class AppUpdateEvent : public Event
+ {
+ public:
+ AppUpdateEvent() {
+ }
+
+ EVENT_CLASS_TYPE(AppUpdate)
+ EVENT_CLASS_CATEGORY(EventCategoryApplication)
+ };
+
+ class AppRenderEvent : public Event
+ {
+ public:
+ AppRenderEvent() {
+ }
+
+ EVENT_CLASS_TYPE(AppRender)
+ EVENT_CLASS_CATEGORY(EventCategoryApplication)
+ };
+}
diff --git a/MetalLearning/src/MEL/Events/Event.h b/MetalLearning/src/MEL/Events/Event.h
new file mode 100644
index 0000000..ed71dd3
--- /dev/null
+++ b/MetalLearning/src/MEL/Events/Event.h
@@ -0,0 +1,75 @@
+#pragma once
+#include"Core.h"
+#include"melpch.h"
+
+namespace MEL {
+ enum class EventType {
+ None = 0,
+ WindowClose, WindowResize, WindowFocus, WindowLostFocus, WindowMoved,
+ AppTick, AppUpdate, AppRender,
+ KeyPressed, KeyReleased, KeyTyped,
+ MouseButtonPressed, MouseButtonReleased, MouseMoved, MouseScrolled
+ };
+
+ enum EventCategory
+ {
+ None = 0,
+ EventCategoryApplication = BIT(0),
+ EventCategoryInput = BIT(1),
+ EventCategoryKeyboard = BIT(2),
+ EventCategoryMouse = BIT(3),
+ EventCategoryMouseButton = BIT(4)
+ };
+
+#define EVENT_CLASS_TYPE(type) static EventType GetStaticType() { return EventType::type; }\
+ virtual EventType GetEventType() const override { return GetStaticType(); }\
+ virtual const char* GetName() const override { return #type; }
+
+#define EVENT_CLASS_CATEGORY(category) virtual int GetCategoryFlags() const override { return category; }
+
+ class Event
+ {
+ friend class EventDispatcher;
+ public:
+ virtual EventType GetEventType() const = 0;
+ virtual const char* GetName() const = 0;
+ virtual int GetCategoryFlags() const = 0;
+ virtual std::string ToString() const { return GetName(); }
+ virtual ~Event() = default;
+ inline bool IsInCategory(EventCategory category) {
+ return GetCategoryFlags() & category;
+ }
+ //protected:
+ bool m_Handled = false;
+ };
+
+ class EventDispatcher
+ {
+ template
+ using EventFn = std::function;
+ public:
+ EventDispatcher(Event& event)
+ :m_Event(event)
+ {
+ }
+
+ template
+ bool Dispatch(EventFn func)
+ {
+ if (m_Event.GetEventType() == T::GetStaticType())
+ {
+ m_Event.m_Handled = func(*(T*)&m_Event);
+ return true;
+ }
+ return false;
+ }
+ private:
+ Event& m_Event;
+ };
+
+ inline std::ostream& operator<<(std::ostream& os, const Event& e)
+ {
+ os << e.ToString();
+ return os;
+ }
+}
diff --git a/MetalLearning/src/MEL/Events/KeyEvent.h b/MetalLearning/src/MEL/Events/KeyEvent.h
new file mode 100644
index 0000000..8682904
--- /dev/null
+++ b/MetalLearning/src/MEL/Events/KeyEvent.h
@@ -0,0 +1,68 @@
+#pragma once
+
+#include "Event.h"
+
+namespace MEL {
+
+ class KeyEvent :public Event
+ {
+ public:
+ inline int GetKeyCode() const { return m_KeyCode; }
+
+ EVENT_CLASS_CATEGORY(EventCategoryKeyboard | EventCategoryInput)
+ protected:
+ KeyEvent(int keycode)
+ :m_KeyCode(keycode) {}
+
+ int m_KeyCode;
+ };
+
+ class KeyPressedEvent : public KeyEvent
+ {
+ public:
+ KeyPressedEvent(int keycode,int RepeatCount)
+ :KeyEvent(keycode),m_RepeatCount(RepeatCount){ }
+
+ inline int GetRepeatCount() const { return m_RepeatCount; }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "KeyPressedEvent: " << m_KeyCode << "(" << m_RepeatCount << "repeats)";
+ return ss.str();
+ }
+
+ EVENT_CLASS_TYPE(KeyPressed)
+ private:
+ int m_RepeatCount;
+ };
+
+ class KeyReleasedEvent :public KeyEvent
+ {
+ public:
+ KeyReleasedEvent(int keycode)
+ :KeyEvent(keycode){ }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "KeyReleasedEvent: " << m_KeyCode;
+ return ss.str();
+ }
+
+ EVENT_CLASS_TYPE(KeyReleased)
+ };
+ class KeyTypedEvent :public KeyEvent
+ {
+ public:
+ KeyTypedEvent(int keycode)
+ :KeyEvent(keycode){ }
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "KeyTypedEvent: " << m_KeyCode;
+ return ss.str();
+ }
+ EVENT_CLASS_TYPE(KeyTyped)
+ };
+}
diff --git a/MetalLearning/src/MEL/Events/MouseEvent.h b/MetalLearning/src/MEL/Events/MouseEvent.h
new file mode 100644
index 0000000..e0903d2
--- /dev/null
+++ b/MetalLearning/src/MEL/Events/MouseEvent.h
@@ -0,0 +1,97 @@
+#pragma once
+
+#include "Event.h"
+
+namespace MEL {
+
+ class MouseMovedEvent : public Event
+ {
+ public:
+ MouseMovedEvent(float x,float y)
+ :m_MouseX(x),m_MouseY(y){ }
+ inline float GetX() const { return m_MouseX; }
+ inline float GetY() const { return m_MouseY; }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "MouseMovedEvent: " << m_MouseX << "," << m_MouseY;
+ return ss.str();
+ }
+
+ EVENT_CLASS_TYPE(MouseMoved)
+ EVENT_CLASS_CATEGORY(EventCategoryMouse | EventCategoryInput)
+ private:
+ float m_MouseX, m_MouseY;
+ };
+
+ class MouseScrolledEvent : public Event
+ {
+ public:
+ MouseScrolledEvent(float xOffset,float yOffset)
+ :m_XOffset(xOffset),m_YOffset(yOffset){ }
+
+ inline float GetXOffset() const { return m_XOffset; }
+ inline float GetYOffset() const { return m_YOffset; }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "MouseScrolledEvent: " << GetXOffset() << ", " << GetYOffset();
+ return ss.str();
+ }
+
+ EVENT_CLASS_TYPE(MouseScrolled)
+ EVENT_CLASS_CATEGORY(EventCategoryMouse | EventCategoryInput)
+ private:
+ float m_XOffset, m_YOffset;
+ };
+
+ class MouseButtonEvent : public Event
+ {
+ public:
+ inline int GetMouseButton() const { return m_Button; }
+
+
+ EVENT_CLASS_CATEGORY(EventCategoryMouse | EventCategoryInput)
+ protected:
+ MouseButtonEvent(int button)
+ :m_Button(button) {
+ }
+ int m_Button;
+ };
+
+ class MouseButtonPressedEvent : public MouseButtonEvent
+ {
+ public:
+ MouseButtonPressedEvent(int button)
+ :MouseButtonEvent(button) {
+ }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "MouseButtonPressedEvent: " << m_Button;
+ return ss.str();
+ }
+
+ EVENT_CLASS_TYPE(MouseButtonPressed)
+ };
+
+ class MouseButtonReleasedEvent :public MouseButtonEvent
+ {
+ public:
+ MouseButtonReleasedEvent(int button)
+ :MouseButtonEvent(button) {
+ }
+
+ std::string ToString() const override
+ {
+ std::stringstream ss;
+ ss << "MouseButtonReleasedEvent: " << m_Button;
+ return ss.str();
+ }
+
+ EVENT_CLASS_TYPE(MouseButtonReleased)
+ };
+}
diff --git a/MetalLearning/src/MEL/Log/Log.h b/MetalLearning/src/MEL/Log/Log.h
new file mode 100644
index 0000000..1359b17
--- /dev/null
+++ b/MetalLearning/src/MEL/Log/Log.h
@@ -0,0 +1,34 @@
+#pragma once
+//I'm using Hazel's log system
+
+#include
+#include "Core.h"
+#include "spdlog/spdlog.h"
+#include "spdlog/sinks/stdout_color_sinks.h"
+//if occurr "use quotes" error in spdlog source file,add "include" dir to "header search path" to solve it
+namespace MEL {
+ class Log{
+ public:
+ static void Init();
+ inline static std::shared_ptr& GetCoreLogger(){return s_CoreLogger;}
+ inline static std::shared_ptr& GetClientLogger(){return s_ClientLogger;}
+
+ private:
+ static std::shared_ptr s_CoreLogger;
+ static std::shared_ptr s_ClientLogger;
+ };
+}
+
+//Core log macros
+#define MEL_CORE_TRACE(...) ::MEL::Log::GetCoreLogger()->trace(__VA_ARGS__)
+#define MEL_CORE_INFO(...) ::MEL::Log::GetCoreLogger()->info(__VA_ARGS__)
+#define MEL_CORE_WARN(...) ::MEL::Log::GetCoreLogger()->warn(__VA_ARGS__)
+#define MEL_CORE_ERROR(...) ::MEL::Log::GetCoreLogger()->error(__VA_ARGS__)
+
+//Client log macros
+
+#define MEL_TRACE(...) ::MEL::Log::GetClientLogger()->trace(__VA_ARGS__)
+#define MEL_INFO(...) ::MEL::Log::GetClientLogger()->trace(__VA_ARGS__)
+#define MEL_WARN(...) ::MEL::Log::GetClientLogger()->trace(__VA_ARGS__)
+#define MEL_ERROR(...) ::MEL::Log::GetClientLogger()->trace(__VA_ARGS__)
+
diff --git a/MetalLearning/src/MEL/Log/Log.mm b/MetalLearning/src/MEL/Log/Log.mm
new file mode 100644
index 0000000..c2f84e6
--- /dev/null
+++ b/MetalLearning/src/MEL/Log/Log.mm
@@ -0,0 +1,15 @@
+#include "Log.h"
+
+
+namespace MEL {
+ std::shared_ptr Log::s_CoreLogger;
+ std::shared_ptr Log::s_ClientLogger;
+ void Log::Init(){
+ spdlog::set_pattern("%^[%T] %n: %v%$");
+ s_CoreLogger=spdlog::stdout_color_mt("MEL");
+ s_CoreLogger->set_level(spdlog::level::trace);
+
+ s_ClientLogger=spdlog::stdout_color_mt("APP");
+ s_ClientLogger->set_level(spdlog::level::trace);
+ }
+}
diff --git a/MetalLearning/src/MEL/Renderer/AppDelegate.h b/MetalLearning/src/MEL/Renderer/AppDelegate.h
new file mode 100644
index 0000000..bc832e2
--- /dev/null
+++ b/MetalLearning/src/MEL/Renderer/AppDelegate.h
@@ -0,0 +1,7 @@
+#import "melpch.h"
+
+@interface AppDelegate : NSObject
+
+@property(nonatomic,strong)NSWindow* window;
+
+@end
diff --git a/MetalLearning/src/MEL/Renderer/AppDelegate.mm b/MetalLearning/src/MEL/Renderer/AppDelegate.mm
new file mode 100644
index 0000000..7648ec7
--- /dev/null
+++ b/MetalLearning/src/MEL/Renderer/AppDelegate.mm
@@ -0,0 +1,18 @@
+#import "AppDelegate.h"
+#import "Window/WindowManager.h"
+
+@implementation AppDelegate
+
+-(void)applicationDidFinishLaunching:(NSNotification *)notification{
+ NSRect frame=NSMakeRect(0, 0, 1280, 720);
+
+ WindowManager* windowManager=[[WindowManager alloc] initWithFrame:frame title:@"Metal Learning - first triangle"];
+
+ [windowManager show];
+}
+
+-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender{
+ return YES;
+}
+
+@end
diff --git a/MetalLearning/src/MEL/Renderer/MetalRenderer.h b/MetalLearning/src/MEL/Renderer/MetalRenderer.h
new file mode 100644
index 0000000..e8f27c0
--- /dev/null
+++ b/MetalLearning/src/MEL/Renderer/MetalRenderer.h
@@ -0,0 +1,8 @@
+#import "melpch.h"
+
+@interface MetalRenderer:NSObject
+
+-(nonnull instancetype)initWithMetalKitView:
+(nonnull MTKView*)mtkView;
+
+@end
diff --git a/MetalLearning/src/MEL/Renderer/MetalRenderer.mm b/MetalLearning/src/MEL/Renderer/MetalRenderer.mm
new file mode 100644
index 0000000..b3123a6
--- /dev/null
+++ b/MetalLearning/src/MEL/Renderer/MetalRenderer.mm
@@ -0,0 +1,94 @@
+#import "MetalRenderer.h"
+
+@implementation MetalRenderer{
+ id _device;
+ id _pipelineState;
+ id _commandQueue;
+ vector_uint2 _viewportSize;
+}
+
+-(nonnull instancetype)initWithMetalKitView:(MTKView *)mtkView{
+ self=[super init];
+ if(self){
+ _device=mtkView.device;
+ [self _setupPipeline];
+ _commandQueue=[_device newCommandQueue];
+
+ _viewportSize=(vector_uint2)
+ {
+ (uint32_t)mtkView.drawableSize.width,
+ (uint32_t)mtkView.drawableSize.height
+ };
+ }
+ return self;
+}
+
+-(void)_setupPipeline{
+ id defaultLibrary=[_device newDefaultLibrary];
+
+ NSError* error=nil;
+
+ if(!defaultLibrary){
+ NSBundle* mainBundle=[NSBundle mainBundle];
+ NSURL* metalLibraryURL=[mainBundle URLForResource:@"default" withExtension:@"metallib"];
+ defaultLibrary=[_device newLibraryWithURL:metalLibraryURL error:&error];
+ }
+
+ if(!defaultLibrary){
+ NSLog(@"Failed to load Metal library: %@",error);
+ }
+ error=nil;
+
+ id vertexFunction=[defaultLibrary newFunctionWithName:@"vertexShader"];
+ id fragmentFunction=[defaultLibrary newFunctionWithName:@"fragmentShader"];
+
+ MTLRenderPipelineDescriptor* pipeLineDescriptor=[[MTLRenderPipelineDescriptor alloc] init];
+ pipeLineDescriptor.label=@"Simple Pipeline";
+
+ pipeLineDescriptor.vertexFunction=vertexFunction;
+ pipeLineDescriptor.fragmentFunction=fragmentFunction;
+
+ pipeLineDescriptor.colorAttachments[0].pixelFormat=MTLPixelFormatBGRA8Unorm;
+
+ _pipelineState=[_device newRenderPipelineStateWithDescriptor:pipeLineDescriptor
+ error:&error];
+
+ if(!_pipelineState){
+ NSLog(@"create pipeline state failed:%@",error);
+ }
+}
+
+#pragma mark - MTKViewDelegate
+
+-(void)drawInMTKView:(MTKView *)view{
+ id commandBuffer=[_commandQueue commandBuffer];
+ commandBuffer.label=@"MyCommandBuffer";
+
+ MTLRenderPassDescriptor* renderPassDescriptor=view.currentRenderPassDescriptor;
+ if(renderPassDescriptor==nil){
+ [commandBuffer commit];
+ return;
+ }
+
+ //renderPassDescriptor.colorAttachments[0].clearColor=MTLClearColorMake(0.1, 0.1, 0.1, 1.0);
+
+ id renderEncoder=[commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];
+ renderEncoder.label=@"MyRenderEncoder";
+
+ [renderEncoder setRenderPipelineState:_pipelineState];
+
+ [renderEncoder drawPrimitives:MTLPrimitiveTypeTriangle
+ vertexStart:0
+ vertexCount:3];
+
+ [renderEncoder endEncoding];
+ [commandBuffer presentDrawable:view.currentDrawable];
+ [commandBuffer commit];
+}
+
+-(void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size{
+ _viewportSize.x=(uint32_t)size.width;
+ _viewportSize.y=(uint32_t)size.height;
+}
+
+@end
diff --git a/MetalLearning/src/MEL/Renderer/ViewController.h b/MetalLearning/src/MEL/Renderer/ViewController.h
new file mode 100644
index 0000000..dde47c9
--- /dev/null
+++ b/MetalLearning/src/MEL/Renderer/ViewController.h
@@ -0,0 +1,6 @@
+#import "MetalRenderer.h"
+#import "melpch.h"
+
+@interface ViewController : NSViewController
+
+@end
diff --git a/MetalLearning/src/MEL/Renderer/ViewController.mm b/MetalLearning/src/MEL/Renderer/ViewController.mm
new file mode 100644
index 0000000..2b8a5ca
--- /dev/null
+++ b/MetalLearning/src/MEL/Renderer/ViewController.mm
@@ -0,0 +1,32 @@
+#import "ViewController.h"
+#import "MetalRenderer.h"
+
+@interface ViewController()
+
+@property (nonatomic,strong)MTKView* metalView;
+@property (nonatomic,strong)MetalRenderer* renderer;
+
+@end;
+
+@implementation ViewController
+
+-(void)viewDidLoad{
+ [super viewDidLoad];
+
+ self.metalView=[[MTKView alloc] initWithFrame:self.view.bounds];
+ self.metalView.device=MTLCreateSystemDefaultDevice();
+ self.metalView.clearColor=MTLClearColorMake(0.1, 0.1, 0.1, 1.0);
+ self.metalView.colorPixelFormat=MTLPixelFormatBGRA8Unorm;
+
+ [self.view addSubview:self.metalView];
+
+ self.renderer=[[MetalRenderer alloc] initWithMetalKitView:self.metalView];
+ self.metalView.delegate=self.renderer;
+}
+
+-(void)viewDidLayout{
+ [super viewDidLayout];
+ self.metalView.frame=self.view.bounds;
+}
+
+@end
diff --git a/MetalLearning/src/MEL/Window/Window.h b/MetalLearning/src/MEL/Window/Window.h
new file mode 100644
index 0000000..4a97226
--- /dev/null
+++ b/MetalLearning/src/MEL/Window/Window.h
@@ -0,0 +1,62 @@
+#pragma once
+
+#import
+namespace MEL {
+ class Event;
+}
+typedef void (*EventCallback)(MEL::Event& event);
+
+@interface Window :NSWindow
+
+@property (nonatomic,assign)EventCallback eventCallback;
+
+-(instancetype)initWithFrame:
+(NSRect)frame styleMask:(NSWindowStyleMask)styleMask title:(NSString*)title;
+
+-(void)dispatchEvent:
+(MEL::Event&)event;
+
+@end
+
+#include "melpch.h"
+#include "MEL.h"
+namespace MEL {
+ struct WindowProps{
+ std::string Title;
+ unsigned int Width;
+ unsigned int Height;
+ WindowProps(const std::string &title="MEL Engine",unsigned int width=1280,unsigned int height=720)
+ :Title(title),Width(width),Height(height){}
+ };
+ class Window{
+ public:
+ using EventCallbackFN=std::function;
+ Window(const WindowProps& props);
+ ~Window();
+
+ void OnUpdate();
+ unsigned int GetWidth();
+ unsigned int GetHeight();
+
+ void SetEventCallback(const EventCallback& callback);
+
+ void SetSync(bool enable);
+
+ bool IsVSync()const;
+
+ static Window* Create(const WindowProps& props=WindowProps());
+
+ private:
+ virtual void Init(const WindowProps& props);
+ virtual void ShutDown();
+ private:
+ NSWindow* m_Window;
+ struct WindowData{
+ std::string Title;
+ unsigned int Width,Height;
+ bool VSync;
+ EventCallbackFN EventCallback;
+ };
+ WindowData m_Data;
+ };
+}
diff --git a/MetalLearning/src/MEL/Window/Window.mm b/MetalLearning/src/MEL/Window/Window.mm
new file mode 100644
index 0000000..4bb27a1
--- /dev/null
+++ b/MetalLearning/src/MEL/Window/Window.mm
@@ -0,0 +1,123 @@
+#import "Window.h"
+
+#import "Events/KeyEvent.h"
+#import "Events/MouseEvent.h"
+#import "Events/ApplicationEvent.h"
+
+@implementation Window
+
+- (instancetype)initWithFrame:(NSRect)frame styleMask:(NSWindowStyleMask)styleMask title:(NSString *)title {
+ self=[super initWithContentRect:frame
+ styleMask:styleMask
+ backing:NSBackingStoreBuffered
+ defer:NO];
+ if(self){
+ [self center];
+ [self setTitle:title];
+ [self setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
+ [self setDelegate:self];
+ }
+ return self;
+}
+
+//Key Events
+-(void)keyDown:(NSEvent *)event{
+ int action;
+ action=[event isARepeat]?1:0;
+ MEL::KeyPressedEvent keyPressedEvent((int)[event keyCode],action);
+ [self dispatchEvent:keyPressedEvent];
+
+ MEL::KeyTypedEvent keyTyped((int)[event keyCode]);
+ [self dispatchEvent:keyTyped];
+}
+
+-(void)keyUp:(NSEvent *)event{
+ MEL::KeyReleasedEvent keyReleasedEvent((int)[event keyCode]);
+ [self dispatchEvent:keyReleasedEvent];
+}
+
+//Mouse Events
+-(void)mouseDown:(NSEvent *)event{
+ MEL::MouseButtonPressedEvent mousePressed(1);
+ [self dispatchEvent:mousePressed];
+}
+
+-(void)mouseUp:(NSEvent *)event{
+ MEL::MouseButtonReleasedEvent mouseReleased(0);
+ [self dispatchEvent:mouseReleased];
+}
+
+-(void)mouseMoved:(NSEvent *)event{
+ NSPoint location=[event locationInWindow];
+ MEL::MouseMovedEvent mouseMovedEvent(location.x,location.y);
+ [self dispatchEvent:mouseMovedEvent];
+}
+
+-(void)scrollWheel:(NSEvent *)event{
+ float deltaX=[event scrollingDeltaX];
+ float deltaY=[event scrollingDeltaY];
+
+ if([event hasPreciseScrollingDeltas]){
+ deltaX*=0.1f;
+ deltaY*=0.1f;
+ }
+
+ MEL::MouseScrolledEvent mouseScrolled(deltaX,deltaY);
+ [self dispatchEvent:mouseScrolled];
+}
+
+//Window Events
+-(void)windowDidResize:(NSNotification *)notification{
+ NSRect frame=[self contentRectForFrameRect:[self frame]];
+ MEL::WindowResizeEvent windowResize(frame.size.width,frame.size.height);
+ [self dispatchEvent:windowResize];
+}
+
+-(void)windowWillClose:(NSNotification *)notification{
+ MEL::WindowCloseEvent windowClosed;
+ [self dispatchEvent:windowClosed];
+}
+
+-(void)dispatchEvent:(MEL::Event &)event{
+ if(self.eventCallback){
+ self.eventCallback(event);
+ }
+}
+@end
+
+
+namespace MEL {
+ Window* Window::Create(const WindowProps& props){
+ return new Window(props);
+ }
+ Window::Window(const WindowProps& props){
+ Init(props);
+ }
+ Window::~Window(){
+ ShutDown();
+ }
+
+ void Window::Init(const WindowProps &props){
+ m_Data.Title=props.Title;
+ m_Data.Width=props.Width;
+ m_Data.Height=props.Height;
+ MEL_CORE_INFO("Create Window: {0},{1},{2}",m_Data.Title,m_Data.Width,m_Data.Height);
+
+ }
+
+ void Window::ShutDown(){
+
+ }
+
+ void Window::OnUpdate(){
+
+ }
+
+ void Window::SetSync(bool enable){
+ m_Data.VSync=enable;
+ }
+
+ bool Window::IsVSync()const{
+ return m_Data.VSync;
+ }
+}
diff --git a/MetalLearning/src/MEL/Window/WindowManager.h b/MetalLearning/src/MEL/Window/WindowManager.h
new file mode 100644
index 0000000..9c9525b
--- /dev/null
+++ b/MetalLearning/src/MEL/Window/WindowManager.h
@@ -0,0 +1,14 @@
+#import
+
+@class ViewController;
+
+@interface WindowManager:NSObject
+
+@property (nonatomic,strong,readonly)NSWindow* window;
+@property (nonatomic,strong,readonly)ViewController* viewController;
+
+-(instancetype)initWithFrame:
+(NSRect)frame title:(NSString*)title;
+-(void)show;
+
+@end
diff --git a/MetalLearning/src/MEL/Window/WindowManager.mm b/MetalLearning/src/MEL/Window/WindowManager.mm
new file mode 100644
index 0000000..337ae0a
--- /dev/null
+++ b/MetalLearning/src/MEL/Window/WindowManager.mm
@@ -0,0 +1,37 @@
+#import "WindowManager.h"
+#import "Window.h"
+#import "ViewController.h"
+
+@implementation WindowManager
+
+- (instancetype)initWithFrame:(NSRect)frame title:(NSString *)title {
+ self=[super init];
+ if(self){
+ NSWindowStyleMask style=
+ NSWindowStyleMaskTitled |
+ NSWindowStyleMaskClosable |
+ NSWindowStyleMaskResizable |
+ NSWindowStyleMaskMiniaturizable;
+
+ _window=[[Window alloc] initWithFrame:frame styleMask:style title:title];
+ _viewController=[[ViewController alloc] init];
+
+ NSView* contentView=[[NSView alloc] initWithFrame:frame];
+ [contentView addSubview:_viewController.view];
+ _viewController.view.frame=contentView.bounds;
+
+ _viewController.view.autoresizingMask=NSViewWidthSizable|NSViewHeightSizable;
+
+ _window.contentView=contentView;
+ _window.contentViewController=_viewController;
+ }
+ return self;
+}
+
+
+- (void)show {
+ [_window makeKeyAndOrderFront:nil];
+}
+
+
+@end
diff --git a/MetalLearning/src/Sandbox/Sandbox.mm b/MetalLearning/src/Sandbox/Sandbox.mm
new file mode 100644
index 0000000..0d80fa0
--- /dev/null
+++ b/MetalLearning/src/Sandbox/Sandbox.mm
@@ -0,0 +1,16 @@
+#include "MEL.h"
+class Sandbox:public MEL::Application{
+public:
+ Sandbox(){
+
+ }
+ ~Sandbox(){
+
+ }
+private:
+
+};
+
+MEL::Application* MEL::CreateApplication(){
+ return new Sandbox();
+}
diff --git a/MetalLearning/src/melpch.h b/MetalLearning/src/melpch.h
new file mode 100644
index 0000000..9167772
--- /dev/null
+++ b/MetalLearning/src/melpch.h
@@ -0,0 +1,12 @@
+//c things
+#import
+
+#import
+#import
+
+//c++ things
+#include
+#include
+
+#include
+
diff --git a/MetalLearning/src/melpch.mm b/MetalLearning/src/melpch.mm
new file mode 100644
index 0000000..f9f4597
--- /dev/null
+++ b/MetalLearning/src/melpch.mm
@@ -0,0 +1,2 @@
+#include "melpch.h"
+
diff --git a/MetalLearning/vendor/spdlog b/MetalLearning/vendor/spdlog
new file mode 160000
index 0000000..f1d748e
--- /dev/null
+++ b/MetalLearning/vendor/spdlog
@@ -0,0 +1 @@
+Subproject commit f1d748e5e3edfa4b1778edea003bac94781bc7b7
diff --git a/MetalLearningTests/MetalLearningTests.swift b/MetalLearningTests/MetalLearningTests.swift
deleted file mode 100644
index 757349b..0000000
--- a/MetalLearningTests/MetalLearningTests.swift
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// MetalLearningTests.swift
-// MetalLearningTests
-//
-// Created by 徐殿欢 on 9/25/25.
-//
-
-import Testing
-
-struct MetalLearningTests {
-
- @Test func example() async throws {
- // Write your test here and use APIs like `#expect(...)` to check expected conditions.
- }
-
-}
diff --git a/MetalLearningUITests/MetalLearningUITests.swift b/MetalLearningUITests/MetalLearningUITests.swift
deleted file mode 100644
index 56cf590..0000000
--- a/MetalLearningUITests/MetalLearningUITests.swift
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// MetalLearningUITests.swift
-// MetalLearningUITests
-//
-// Created by 徐殿欢 on 9/25/25.
-//
-
-import XCTest
-
-final class MetalLearningUITests: XCTestCase {
-
- override func setUpWithError() throws {
- // Put setup code here. This method is called before the invocation of each test method in the class.
-
- // In UI tests it is usually best to stop immediately when a failure occurs.
- continueAfterFailure = false
-
- // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
- }
-
- override func tearDownWithError() throws {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- }
-
- @MainActor
- func testExample() throws {
- // UI tests must launch the application that they test.
- let app = XCUIApplication()
- app.launch()
-
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- }
-
- @MainActor
- func testLaunchPerformance() throws {
- // This measures how long it takes to launch your application.
- measure(metrics: [XCTApplicationLaunchMetric()]) {
- XCUIApplication().launch()
- }
- }
-}
diff --git a/MetalLearningUITests/MetalLearningUITestsLaunchTests.swift b/MetalLearningUITests/MetalLearningUITestsLaunchTests.swift
deleted file mode 100644
index fdfa4ad..0000000
--- a/MetalLearningUITests/MetalLearningUITestsLaunchTests.swift
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// MetalLearningUITestsLaunchTests.swift
-// MetalLearningUITests
-//
-// Created by 徐殿欢 on 9/25/25.
-//
-
-import XCTest
-
-final class MetalLearningUITestsLaunchTests: XCTestCase {
-
- override class var runsForEachTargetApplicationUIConfiguration: Bool {
- true
- }
-
- override func setUpWithError() throws {
- continueAfterFailure = false
- }
-
- @MainActor
- func testLaunch() throws {
- let app = XCUIApplication()
- app.launch()
-
- // Insert steps here to perform after app launch but before taking a screenshot,
- // such as logging into a test account or navigating somewhere in the app
-
- let attachment = XCTAttachment(screenshot: app.screenshot())
- attachment.name = "Launch Screen"
- attachment.lifetime = .keepAlways
- add(attachment)
- }
-}
diff --git a/ShaderSrc/Shader.metal b/ShaderSrc/Shader.metal
new file mode 100644
index 0000000..6268f10
--- /dev/null
+++ b/ShaderSrc/Shader.metal
@@ -0,0 +1,31 @@
+#include
+using namespace metal;
+
+struct VertexOut{
+ float4 position [[position]];
+ float4 color;
+};
+
+vertex VertexOut vertexShader(uint vertexID [[vertex_id]]){
+ float2 positions[3]={
+ float2(0.0,0.5),
+ float2(-0.5,0.5),
+ float2(0.5,-0.5)
+ };
+
+ float4 colors[3]={
+ float4(1.0,0.0,0.0,1.0),
+ float4(0.0,1.0,0.0,1.0),
+ float4(0.0,0.0,1.0,1.0)
+ };
+
+ VertexOut out;
+ out.position=float4(positions[vertexID],0.0,1.0);
+ out.color=colors[vertexID];
+ return out;
+}
+
+fragment float4 fragmentShader(VertexOut in [[stage_in]]){
+ return in.color;
+}
+
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning-e033b179dceb315dcd5ecd602612986a-VFS/all-product-headers.yaml b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning-e033b179dceb315dcd5ecd602612986a-VFS/all-product-headers.yaml
new file mode 100644
index 0000000..ee59dbc
--- /dev/null
+++ b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning-e033b179dceb315dcd5ecd602612986a-VFS/all-product-headers.yaml
@@ -0,0 +1 @@
+{"case-sensitive":"false","roots":[],"version":0}
\ No newline at end of file
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-non-framework-target-headers.hmap b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-non-framework-target-headers.hmap
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5
GIT binary patch
literal 121
XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5
GIT binary patch
literal 121
XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5
GIT binary patch
literal 121
XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5
GIT binary patch
literal 121
XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap
new file mode 100644
index 0000000000000000000000000000000000000000..11e7c410e8338f9ef0c094b77dd80355c11c0e18
GIT binary patch
literal 233
zcmbu1!3x4K5JV$hy!j{YH;6qdh+xky&CmqWP1z*c&o?POd3E41yTdRuPi|+7St|R=
zq0)4(95;V$ck|Y5dGo(?p63n$BWIkPp=W|7T8i~7uCP!ShcZEOB8xZOkU3nzDqhB)
YFX=#LEj%C=3ax{^$LA6yYYbrxzDL9?-v9sr
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyMetadataFileList b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyMetadataFileList
new file mode 100644
index 0000000..e69de29
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyStaticMetadataFileList b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyStaticMetadataFileList
new file mode 100644
index 0000000..e69de29
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.hmap b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.hmap
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5
GIT binary patch
literal 121
XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/Objects-normal/arm64/af3fcb34312c57c0f52879cdce924b91-common-args.resp b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/Objects-normal/arm64/af3fcb34312c57c0f52879cdce924b91-common-args.resp
new file mode 100644
index 0000000..b3a0b97
--- /dev/null
+++ b/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/Objects-normal/arm64/af3fcb34312c57c0f52879cdce924b91-common-args.resp
@@ -0,0 +1 @@
+-target arm64-apple-macos15.5 '-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG' -fpascal-strings -O0 -DMEL_PLATFORM_MAC -DMEL_DEBUG '-DOBJC_OLD_DISPATCH_PROTOTYPES=1' -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk -g -fvisibility-inlines-hidden -iquote /Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap -I/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap -I/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap -iquote /Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap -iquote ../src -iquote ShaderSrc -iquote ../MEL/vendor/spdlog/include -I/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/include -I/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/DerivedSources-normal/arm64 -I/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/DerivedSources/arm64 -I/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/DerivedSources -F/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning
\ No newline at end of file
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9 b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9
new file mode 100644
index 0000000..ee59dbc
--- /dev/null
+++ b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/8bba4233626f64a7ea772bb94a08a1a9
@@ -0,0 +1 @@
+{"case-sensitive":"false","roots":[],"version":0}
\ No newline at end of file
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/d41d8cd98f00b204e9800998ecf8427e b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/d41d8cd98f00b204e9800998ecf8427e
new file mode 100644
index 0000000..e69de29
diff --git a/MetalLearning/MetalLearning.entitlements b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af
similarity index 58%
rename from MetalLearning/MetalLearning.entitlements
rename to bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af
index f2ef3ae..3842541 100644
--- a/MetalLearning/MetalLearning.entitlements
+++ b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/f86cbb10517a3bd51f252887359b04af
@@ -2,9 +2,7 @@
- com.apple.security.app-sandbox
-
- com.apple.security.files.user-selected.read-only
-
+ com.apple.security.get-task-allow
+
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/fd8314defc70a8778956f026c0ddfd19 b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/attachments/fd8314defc70a8778956f026c0ddfd19
new file mode 100644
index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5
GIT binary patch
literal 121
XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/build-request.json b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/build-request.json
new file mode 100644
index 0000000..3f2ae47
--- /dev/null
+++ b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/build-request.json
@@ -0,0 +1,58 @@
+{
+ "buildCommand" : {
+ "command" : "prepareForIndexing",
+ "enableIndexBuildArena" : false,
+ "targets" : null
+ },
+ "configuredTargets" : [
+ {
+ "guid" : "e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f"
+ }
+ ],
+ "containerPath" : "/Users/xudianhuan/Documents/dev/MetalLearning/MetalLearning/MetalLearning.xcodeproj",
+ "continueBuildingAfterErrors" : true,
+ "dependencyScope" : "workspace",
+ "enableIndexBuildArena" : false,
+ "hideShellScriptEnvironment" : false,
+ "parameters" : {
+ "action" : "build",
+ "activeArchitecture" : "arm64",
+ "activeRunDestination" : {
+ "disableOnlyActiveArch" : false,
+ "platform" : "macosx",
+ "sdk" : "macosx15.5",
+ "sdkVariant" : "macos",
+ "supportedArchitectures" : [
+ "arm64e",
+ "arm64",
+ "x86_64"
+ ],
+ "targetArchitecture" : "arm64"
+ },
+ "arenaInfo" : {
+ "buildIntermediatesPath" : "",
+ "buildProductsPath" : "",
+ "derivedDataPath" : "/Users/xudianhuan/Library/Developer/Xcode/DerivedData",
+ "indexDataStoreFolderPath" : "/Users/xudianhuan/Library/Developer/Xcode/DerivedData/MetalLearning-baphacvpjexerkbycoknmdfbyuet/Index.noindex/DataStore",
+ "indexEnableDataStore" : true,
+ "indexPCHPath" : "/Users/xudianhuan/Library/Developer/Xcode/DerivedData/MetalLearning-baphacvpjexerkbycoknmdfbyuet/Index.noindex/PrecompiledHeaders",
+ "pchPath" : ""
+ },
+ "configurationName" : "Debug",
+ "overrides" : {
+ "synthesized" : {
+ "table" : {
+ "ENABLE_PREVIEWS" : "NO",
+ "ENABLE_XOJIT_PREVIEWS" : "YES",
+ "ONLY_ACTIVE_ARCH" : "YES"
+ }
+ }
+ }
+ },
+ "schemeCommand" : "launch",
+ "showNonLoggedProgress" : true,
+ "useDryRun" : false,
+ "useImplicitDependencies" : true,
+ "useLegacyBuildLocations" : false,
+ "useParallelTargets" : true
+}
\ No newline at end of file
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/description.msgpack b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/description.msgpack
new file mode 100644
index 0000000000000000000000000000000000000000..33f9eccdfb07fabb17459e39831fb5e7c545475e
GIT binary patch
literal 3911
zcmd5<&yUka6b`qlm$vW^jMPgx_(y&@_N}nVR*}L|H4CMu)p+J5nPSga<8eqX2*iOC
zRo0+Z;sOGpo?PRZ_yEmcj3WGQ}re(#&_y_xs1tV=P-
z*qSAjVLnMPx4MEPA#fF26sFb%P&gO>mYnhNp*z#Ge8vsNmDL4585T5$}pn@zvo@hAbmS#MK9+d!yeH=KIIa~*74-X2;w
z2#iPynh<4708?FjbB@CxyYoRnntt8{nit8YK!+lc1Y)bl6;lBeU1vrCi&ggEL&90-
zF{g+NZj2-j;hKRvIv0Vma5foI)TXkk%CcFUt&zBEMOZHdM5R{a^0>b?WRE=3FS0cN&V>m?IwuPGUf6qOU?$WpuaQFN_rujC=upEQ!CiHiOxk)Fh4Gg5^rZs
z;yg+YqrbC#@!LUvxVyLAAM{YsbSMU;at9$-nFFxBsJGa~0duK?E
zf5eWklvgj)Plpl8irDU5IusNbJ}ltQLu3)CJiUM?1kSBSRi)Fsq&N4D)Z>=t;g
pZF`;zWaPFQ9a!AhPt&Jsl0LiqMlP>ePyApy=`=PLHx6DN{0(O$Z>InN
literal 0
HcmV?d00001
diff --git a/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/manifest.json b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/manifest.json
new file mode 100644
index 0000000..9c44748
--- /dev/null
+++ b/bin-int/Debug-macosx-x86_64/MetalLearning/XCBuildData/81650ab4220cca3995c175bed5cd3d62.xcbuilddata/manifest.json
@@ -0,0 +1 @@
+{"client":{"name":"basic","version":0,"file-system":"device-agnostic","perform-ownership-analysis":"no"},"targets":{"":[""]},"nodes":{"/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning":{"is-mutated":true},"/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/EagerLinkingTBDs/Debug":{"is-mutated":true},"/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning":{"is-mutated":true},"/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app":{"is-mutated":true},"":{"is-command-timestamp":true},"":{"is-command-timestamp":true}},"commands":{"":{"tool":"phony","inputs":["/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/EagerLinkingTBDs/Debug","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents","","","","","","",""],"outputs":[""]},"":{"tool":"stale-file-removal","expectedOutputs":["/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app/Contents","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.app.xcent","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.app.xcent.der","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning/MetalLearning.app","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/DerivedSources/Entitlements.plist","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-non-framework-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyMetadataFileList","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyStaticMetadataFileList","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.hmap"],"roots":["/tmp/MetalLearning.dst","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning"],"outputs":[""]},"":{"tool":"stale-file-removal","expectedOutputs":["/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning-e033b179dceb315dcd5ecd602612986a-VFS/all-product-headers.yaml"],"outputs":[""]},"P0:::CreateBuildDirectory /Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning":{"tool":"create-build-directory","description":"CreateBuildDirectory /Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning","inputs":[],"outputs":["","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning"]},"P0:::CreateBuildDirectory /Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/EagerLinkingTBDs/Debug":{"tool":"create-build-directory","description":"CreateBuildDirectory /Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/EagerLinkingTBDs/Debug","inputs":["/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning"],"outputs":["","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/EagerLinkingTBDs/Debug"]},"P0:::CreateBuildDirectory /Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning":{"tool":"create-build-directory","description":"CreateBuildDirectory /Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning","inputs":[],"outputs":["","/Users/xudianhuan/Documents/dev/MetalLearning/bin/Debug-macosx-x86_64/MetalLearning"]},"P0:::Gate WorkspaceHeaderMapVFSFilesWritten":{"tool":"phony","inputs":["/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning-e033b179dceb315dcd5ecd602612986a-VFS/all-product-headers.yaml"],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--AppIntentsMetadataTaskProducer":{"tool":"phony","inputs":["","","","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyMetadataFileList","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyStaticMetadataFileList"],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-ChangeAlternatePermissions":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-ChangePermissions":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-CodeSign":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-CopyAside":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-GenerateStubAPI":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-RegisterExecutionPolicyException":{"tool":"phony","inputs":["","","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-RegisterProduct":{"tool":"phony","inputs":["","","","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-StripSymbols":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--Barrier-Validate":{"tool":"phony","inputs":["","","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--CopySwiftPackageResourcesTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--CustomTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--DocumentationTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--GenerateAppPlaygroundAssetCatalogTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--GeneratedFilesTaskProducer":{"tool":"phony","inputs":["","","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.app.xcent","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.app.xcent.der","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/DerivedSources/Entitlements.plist"],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--HeadermapTaskProducer":{"tool":"phony","inputs":["","","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-non-framework-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.hmap"],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--InfoPlistTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--ModuleMapTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--ModuleVerifierTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--ProductPostprocessingTaskProducer":{"tool":"phony","inputs":["","","","","","","","","","","","","","","","","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--ProductStructureTaskProducer":{"tool":"phony","inputs":["","","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--RealityAssetsTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--SanitizerTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--StubBinaryTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--SwiftABIBaselineGenerationTaskProducer":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--SwiftFrameworkABICheckerTaskProducer":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--SwiftPackageCopyFilesTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--SwiftStandardLibrariesTaskProducer":{"tool":"phony","inputs":["","",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--TAPISymbolExtractorTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--TestHostTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--TestTargetPostprocessingTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--TestTargetTaskProducer":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--copy-headers-completion":{"tool":"phony","inputs":[""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--fused-phase0-copy-bundle-resources&compile-sources&link-binary":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--fused-phase1-copy-files":{"tool":"phony","inputs":["",""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--generated-headers":{"tool":"phony","inputs":[""],"outputs":[""]},"P0:::Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--swift-generated-headers":{"tool":"phony","inputs":[""],"outputs":[""]},"P0:target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f-:Debug:Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--begin-compiling":{"tool":"phony","inputs":["","","","","",""],"outputs":[""]},"P0:target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f-:Debug:Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--begin-linking":{"tool":"phony","inputs":["","","","","",""],"outputs":[""]},"P0:target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f-:Debug:Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--begin-scanning":{"tool":"phony","inputs":["","","","","","",""],"outputs":[""]},"P0:target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f-:Debug:Gate target-MetalLearning-e033b179dceb315dcd5ecd602612986a70d00e290cc9c947a0a6ad4a3666580f--end":{"tool":"phony","inputs":["","","","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.app.xcent","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.app.xcent.der","","","","","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/DerivedSources/Entitlements.plist","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-non-framework-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-all-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-generated-files.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-own-target-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning-project-headers.hmap","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyMetadataFileList","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.DependencyStaticMetadataFileList","/Users/xudianhuan/Documents/dev/MetalLearning/bin-int/Debug-macosx-x86_64/MetalLearning/MetalLearning.build/MetalLearning.hmap","","","","","","","","","","","","","","","","","","","","","","","