From 4a466f831e0f9986ea3cb5a4062046e99a795fc6 Mon Sep 17 00:00:00 2001 From: chenyungui Date: Mon, 31 Oct 2016 17:48:06 +0800 Subject: [PATCH] update to swift 3, Xcode 8.1 --- .../UserInterfaceState.xcuserstate | Bin 0 -> 7569 bytes .../xcschemes/chapter01.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 11034 bytes .../xcschemes/chapter02.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ ch02/chapter02/MetalView.swift | 4 +- ch03/chapter03.xcodeproj/project.pbxproj | 6 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 12009 bytes .../xcschemes/chapter03.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ ch03/chapter03/MetalView.swift | 18 ++-- .../UserInterfaceState.xcuserstate | Bin 0 -> 9785 bytes .../xcschemes/chapter04.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ ch05/chapter05.xcodeproj/project.pbxproj | 6 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 11715 bytes .../xcschemes/chapter05.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ ch05/chapter05/MetalView.swift | 22 ++--- ch06/chapter06.xcodeproj/project.pbxproj | 15 ++- .../UserInterfaceState.xcuserstate | Bin 0 -> 15335 bytes .../xcschemes/chapter06.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ ch06/chapter06/MetalView.swift | 12 ++- ch07/chapter07.xcodeproj/project.pbxproj | 8 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 11847 bytes .../xcschemes/chapter07.xcscheme | 91 ++++++++++++++++++ .../xcschemes/xcschememanagement.plist | 22 +++++ ch07/chapter07/MetalView.swift | 22 ++--- .../Sources/MetalView.swift | 24 ++--- .../UserInterfaceState.xcuserstate | Bin 0 -> 11110 bytes ch08/chapter08.playground/timeline.xctimeline | 6 -- .../UserInterfaceState.xcuserstate | Bin 0 -> 8635 bytes .../Sources/MetalView.swift | 14 +-- .../UserInterfaceState.xcuserstate | Bin 0 -> 10508 bytes .../Sources/MetalView.swift | 14 +-- .../UserInterfaceState.xcuserstate | Bin 0 -> 9693 bytes .../Sources/MetalView.swift | 24 ++--- .../UserInterfaceState.xcuserstate | Bin 0 -> 10643 bytes .../Sources/MetalView.swift | 24 ++--- .../UserInterfaceState.xcuserstate | Bin 0 -> 11542 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 6823 bytes 43 files changed, 908 insertions(+), 102 deletions(-) create mode 100644 ch01/chapter01.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch01/chapter01.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter01.xcscheme create mode 100644 ch01/chapter01.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch02/chapter02.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter02.xcscheme create mode 100644 ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch03/chapter03.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter03.xcscheme create mode 100644 ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch04/chapter04.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter04.xcscheme create mode 100644 ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch05/chapter05.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch05/chapter05.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter05.xcscheme create mode 100644 ch05/chapter05.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch06/chapter06.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch06/chapter06.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter06.xcscheme create mode 100644 ch06/chapter06.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch07/chapter07.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter07.xcscheme create mode 100644 ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ch08/chapter08.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 ch08/chapter08.playground/timeline.xctimeline create mode 100644 ch09/chapter09.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch10/chapter10.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch11/chapter11.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch12/chapter12.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch13/chapter13.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ch14/chapter14.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/ch01/chapter01.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch01/chapter01.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e8bc402623c4ce1c1cb2abb8d614462efa116515 GIT binary patch literal 7569 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch01/chapter01.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch01/chapter01.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..f5ae71c --- /dev/null +++ b/ch01/chapter01.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter01.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 29400C781C3AEE1300345568 + + primary + + + + + diff --git a/ch02/chapter02.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch02/chapter02.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..19dcdfe516a0737f8127c91e5ebb9a8182a826a7 GIT binary patch literal 11034 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 Aod5s; literal 0 HcmV?d00001 diff --git a/ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter02.xcscheme b/ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter02.xcscheme new file mode 100644 index 0000000..9033806 --- /dev/null +++ b/ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter02.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..107843d --- /dev/null +++ b/ch02/chapter02.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter02.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 29E74ACC1C4159D60023A39A + + primary + + + + + diff --git a/ch02/chapter02/MetalView.swift b/ch02/chapter02/MetalView.swift index c251709..48617b0 100644 --- a/ch02/chapter02/MetalView.swift +++ b/ch02/chapter02/MetalView.swift @@ -20,8 +20,8 @@ class MetalView: MTKView { rpd.colorAttachments[0].texture = currentDrawable!.texture rpd.colorAttachments[0].clearColor = MTLClearColor(red: 0, green: 0.5, blue: 0.5, alpha: 1) rpd.colorAttachments[0].loadAction = .clear - let commandBuffer = device!.newCommandQueue().commandBuffer() - let commandEncoder = commandBuffer.renderCommandEncoder(with: rpd) + let commandBuffer = device!.makeCommandQueue().makeCommandBuffer() + let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: rpd) commandEncoder.endEncoding() commandBuffer.present(drawable) commandBuffer.commit() diff --git a/ch03/chapter03.xcodeproj/project.pbxproj b/ch03/chapter03.xcodeproj/project.pbxproj index fa3436a..c5ec438 100644 --- a/ch03/chapter03.xcodeproj/project.pbxproj +++ b/ch03/chapter03.xcodeproj/project.pbxproj @@ -88,7 +88,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = "Marius Horga"; TargetAttributes = { 29CB598B1C4461E90004DB55 = { @@ -164,8 +164,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -208,8 +210,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; diff --git a/ch03/chapter03.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch03/chapter03.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..b3ee8cc341eeed764dc218168afa115b060484ed GIT binary patch literal 12009 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 U!)O%2g+cgFBo)4+pJ~tiKj?tgg#Z8m literal 0 HcmV?d00001 diff --git a/ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter03.xcscheme b/ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter03.xcscheme new file mode 100644 index 0000000..3c0d619 --- /dev/null +++ b/ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter03.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d621961 --- /dev/null +++ b/ch03/chapter03.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter03.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 29CB598B1C4461E90004DB55 + + primary + + + + + diff --git a/ch03/chapter03/MetalView.swift b/ch03/chapter03/MetalView.swift index 1090eb0..e7512d2 100644 --- a/ch03/chapter03/MetalView.swift +++ b/ch03/chapter03/MetalView.swift @@ -22,21 +22,21 @@ class MetalView: MTKView { func render() { device = MTLCreateSystemDefaultDevice()! - commandQueue = device!.newCommandQueue() + commandQueue = device!.makeCommandQueue() vertexData = [-1.0, -1.0, 0.0, 1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0] - let dataSize = vertexData!.count * sizeof(Float.self) - vertexBuffer = device!.newBuffer(withBytes: vertexData!, length: dataSize, options: []) + let dataSize = vertexData!.count * MemoryLayout.size + vertexBuffer = device!.makeBuffer(bytes: vertexData!, length: dataSize, options: []) let library = device!.newDefaultLibrary()! - let vertex_func = library.newFunction(withName: "vertex_func") - let frag_func = library.newFunction(withName: "fragment_func") + let vertex_func = library.makeFunction(name: "vertex_func") + let frag_func = library.makeFunction(name: "fragment_func") let rpld = MTLRenderPipelineDescriptor() rpld.vertexFunction = vertex_func rpld.fragmentFunction = frag_func rpld.colorAttachments[0].pixelFormat = .bgra8Unorm do { - try rps = device!.newRenderPipelineState(with: rpld) + try rps = device!.makeRenderPipelineState(descriptor: rpld) } catch let error { self.print("\(error)") } @@ -45,11 +45,11 @@ class MetalView: MTKView { override func draw(_ dirtyRect: NSRect) { if let drawable = currentDrawable, let rpd = currentRenderPassDescriptor { rpd.colorAttachments[0].clearColor = MTLClearColorMake(0, 0.5, 0.5, 1.0) - let commandBuffer = commandQueue!.commandBuffer() - let commandEncoder = commandBuffer.renderCommandEncoder(with: rpd) + let commandBuffer = commandQueue!.makeCommandBuffer() + let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: rpd) commandEncoder.setRenderPipelineState(rps!) commandEncoder.setVertexBuffer(vertexBuffer, offset: 0, at: 0) - commandEncoder.drawPrimitives(.triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) + commandEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) commandEncoder.endEncoding() commandBuffer.present(drawable) commandBuffer.commit() diff --git a/ch04/chapter04.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch04/chapter04.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e170f36fd22a2bd502161415693838c4a531f051 GIT binary patch literal 9785 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 literal 0 HcmV?d00001 diff --git a/ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter04.xcscheme b/ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter04.xcscheme new file mode 100644 index 0000000..36f111c --- /dev/null +++ b/ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter04.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..65aa13b --- /dev/null +++ b/ch04/chapter04.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter04.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 29C87D3C1C56E93A005F4615 + + primary + + + + + diff --git a/ch05/chapter05.xcodeproj/project.pbxproj b/ch05/chapter05.xcodeproj/project.pbxproj index c2db75a..f296239 100644 --- a/ch05/chapter05.xcodeproj/project.pbxproj +++ b/ch05/chapter05.xcodeproj/project.pbxproj @@ -88,7 +88,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = "Marius Horga"; TargetAttributes = { 2980371E1C62437900FBBC6A = { @@ -164,8 +164,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -208,8 +210,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; diff --git a/ch05/chapter05.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch05/chapter05.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..2d13d8544e7250dbe5fb01f9377992cc3ce821e6 GIT binary patch literal 11715 zcmcI~d3;kv_x>zt_NF&!v$aW@(4RNo>U??Z&IKqe^iX(E)T2y@-yWqv&1q9y*KOM<1XM(dXz3^fmec{ephQ7{}pwticIb zk5h0OcH&H&g$wX7d@&x4i*PlbhNt5hcqXpFv+!&@2iIaA&%-|4gcsq(xD7ACSK^!S z&G;64D_)0h!?)u*@Or!%Z^2vfHoP70zz^a_@oxMK-h&U|gZL$U3?Ij@<1_ee{0@E> zzlT4}v;)sGMiH7J%B1t02#7Z1w0LdmpNDj#*dE{a;niP>@QbNX% zab!H1K-^?HnM*vxOD-eLBt+Usm|R7!CacLBas#=IY$9984st(vfILVZAy1OsWG{Jv zoFH$IljIb6lbj}Rku&5&@)7xhd`-R~zmq@6If^Kzgi zN~A(+lz?>8D&5%&__p9o`0TO5YG=LA6AX5uc%)&3(N4r6Et9Y#%vH-d3rCE|D=r?E zpOurJJ2WeQOkrVG;m{EUS%vxK!*X)-iwg^KN@}^Jin1}&{DB3*7Ee82=C5yU;+sR! zjt$6$(zhWaG9fccMk&aGtSpX6nT*Mqf+?A58%jlXkUhu#qfd zjv(FJ+~8kS9`H2rwVVT9Obj&e0luNP*D0R5Qh#$O;P?4po7Hj`_a9PBVQo%XPU-Mr zrNgs^jwvk2$}b*Ko>e#^FF$KcZb3o8(6XH3obrNNF0;P?vHQLbrZ#&oZ{;f*V4B`} zUOrIEr9$=M`Vj2q^AD+(GYbME)0pD-`|3P_ieR-j=&kd?j7)uHp1P8lBJs&S<}U@d=OT? zI1uo(bwY*0>6Pw@5e$m1(MU7~rSC+e(1qwCbTJx@icm2sL8YjSaZJl}ERiKKJu@&P zGcof{R1WKO393MsqH$gQCO*%g^dwh#s|HP%`tLk3Bvo@ zM#n4;!OI6{!zjgh3C%d9fL`n8ds;$#Ag3UEalOBRZwdG>i|V-+c~E)>n#*h*sE(xy z`q7qEPwAaTMTl<-it9QLc{@=fn$PSkoehi%Sb&<5t`qrC6LYWuoyd<`SQ>LO*K82e z-yS)57RElo)7b0{wKnioX+Zs|#H%SeV$yN^~vgqqjm|XI*Gz|L(3wH=y(` zv(QO)E_64#2W>zb(I(W6I@l1F!*W?38_M!o z0UO4KvqCoFUgScX!R)u9ZD>2%fp)^P3*8TJH3|&>LUu75&5BqtJdb20!uW+9J|+lw7Con0i_$X>J$ z?6Aj#+X9M%wwL;Sej zaXz9VqK@vb3K1Zt*A8Q3l<@QX0lv3|C^E9*r4wM8L#@HyvL5@We^ly~j-p(?jFTO$F^|t*Fo4{Prf*;XO zV$Jg`V1DkhWzl-Sp+9;BoMTnJ0x-cerYkJP3Y6Z7WmwK8Gk2%3Q6k#{RIHC!*~DgF z+j!oyfNv=A`Rf;e0j5r$+*=|zUBT)C{-$1c&@%|kVOA~ci<9Sip%gAT#m=$OK=6gl+9%xR>$gD1LN5|*2w1XKu#<;@N!g+ zC*jH1jiAQZ4E zV(a$6`k&vA<^4^3D9|Qa{8Au+_zD(an&_aG<7?US&)TTD_h7G zvBj)y8@>)-k5}Q<@OuMZ%a*XE>{hlBem5~didg_ee3>WY5u8GeIHt&G!Iu?B;#R?Z z#V!b}hX{L6B2byi2wgWvf$}_MDbcbqi(!3*@VJk})I`gsP99&&8SDK`*`AgbA1~6X zY=KvS!;DV&PP`H6HsibS-S{57fnC9tu`Ai~&3F@T#~rwnF&1Xmv0H@I$cpfSp;e*) zacWfoexcXj8jN{aDnv%L+`#kH&kp)q1NHoPu*>YAz(N;BSZL;Xsz$LpI-T+U`l$I1 zK2P=9n0FP;^ZeonK?Q$P5>>%Yd|xjd-p{Uz!r?=}B=N)eU+ikOvJVO$!%xP*)-L=M zTfwdo^yBE8Tkp0Kma}hZ(ux}9#(?0n___YlkRQJQgz;JdE?0^*MMFI#80ukmJ<}Y= zFXJQl6{Nzi;-mOA+&v>0F?BG383N@9hCEFzH4Qz%B$xnO!&b9Z?B-f-+B`7Lkwbz`wtc z^dV`*&m1gIT^3v!Rp<$PN`UD%@JV(9Tic1>#HZPf>?W2mt;bBN#ig0iEA8(WDZ+N} zS^R#K%SP=lI_9WZbm0&1hp6y>RRdxT6#vhSqa*(qew7J5Kp>rqC(etu?JHwacL1iY?^Ae0tppPy z66Zc-0{MWikv3HxZ=jPh7ClEJSw_tsw3n*YDGGEjL_T*%%aZx3;wS1EFkjBSbAD zJEqPtqDLxXAaY_NQXvIZ=LzyP@EPEJfP@QqhFAx?Tbxb`u>kjn{oYAZgg6rTJ+Xmt zkW|*iG%>8Sun+=_;RX4eJS8N1_(c)+HrcaCcOtQy6Iu znua7reZboyWKtlx5>q82U2xZ;)=E)cdoLj%<>V4@4rDBQr~{S5_<#gyfm;XtzMgPI zm^g={Q>-LaQC~tPu}6A*37G=EgiIyX>{0f3uP-4p$gKY85Bi@2x_?YS|D~+IpCEOF zkE!V*jj%>fL~6Fg)LcM(F>wU(lgoQY6ktz9N7O2eXdzj|o@RUcMzn;)BrwR8WI5Z- zo?)&Tuu()?O)I)?aZHaZ$h9$JyN+DXo@ILlk0``dQKl(y)3l;ldn0X+leOeVaue9- z&0yZQl64Rb2mJn!XiEYKtrVCsXKdt~y{$p9=SWDiI3$*sS_0lC$iMuhh#iJ)@f>^k z1i78u0UfL-capoHlbgu~$X{jFNR8Duy1eZah-pM1U3GE zH_D`;r^Dsb zfmus)^G4)m+K1*94qY~5>CoJQLLo!fqf;73WuQ|kW$$-TIr}h1r!+pI(+~ddcu;f{ z9Myw5{}RYi18%1#2;@G3K<;A*(AIzWgu*k|lhA(rT2 z`~%$4&M%;Y`ZInym}aui*%vIMKM(r5ZlgkS=}^dx(LDC=4w}!tg5*2^iVzEnoU~6= zw802kf^^&INIHsMNH3xn)6uku7PD{Ix9mIiAND=_f&IvS+D=O$PvfHHbS%AuRshfV z84zM5`-T0=eq+DGch`)NC(y`;+-2itdV^zp-bV3w$soRlXvka7R|Kbdfp|e?8Ni@_ zK{NmX7bd=rc#aUn*pMpkeJKhl_cVEZZIG1cFF;@rK4FsrG3o!lA_yL@J^;W{)8wi5 z2N&n&WasA9aswI`h8iMc%7Vn7$Cm{meoHIZ`pC%Re19-hy|{2#?Xdi+ITJkfC4T<` zh`VxgGlxbMHm(c~(7sfPP> zbQ5h4gQq1J)92jQq&&FBnwYkfV>!?DgW ztxlO}FrVkJzB5VBBrLAeXoB-|1yfa5y32v|K}|T<@du7uZK+DTV?Y|bcYBxc(CfT% zpQkYh&jS9W6{U-l*T!?g@jL9(>|!CM=5B-ZYSYvTL0F03*U+7Q!N8339V7R2*g0@e z-x+ddmNI)t4vb;id~b+{nMKCp7VZL+E$R0S7VmL5#(Ap?z;yL`r1(!+5#teJK$=}lV~40goJaW_u%3SoUy=l7b(`_ zWbA;8E?GDqUkHix@wgIK;i+)BWiDK83E)<^(sCnQXW52#!L^lrqLv93KjAz*<_A9? z#)b&rq&w)&*}bPMrK9>;C7bK=V-V&bTipVwvvb8w$L-=S+Wnf{vqJ` zFO%=!HjokS01c#rXeQhQ%At8QpO(@w;L0oLIJgZo5pDvxX&qe&H+X)Km?Zgif)y&Csc+*fhG$DNZRsX>}1O_vUo4why~ zhe%7MD_tOMk_Mz9=|bsZ=}PIH(z~Qx()*;lq#{dwr(~yPXJqfl-jlsA`%w0=><>AT6S+h#mCNNyxmvD~b8?+LNp6tm%8TT+@}PXR z{4V(e^5^6yJ>gklfti9tY}j#Rjg24 zqqtVFPSK(0QfyIdQ|wUOtGHkBlw!AHk7BRlImHW#1Bye6ca&6_r<|m$SGFjF%2wrK zw&C^sqZQ$DDCSox^(apjZB{mKK%gUZ9oca>i%zgB*${9gH^@@JJ) zB~!^&N|jM%QQ1^>l}mMjDnm6`RjT4u0adGNk!p$R3e}aWYgKDiH>qw>tyA5u>QZf2 z?Nr^TdRX;{>M_+5s=cZss&3VB)d|&U)fv@0s`pf%seV-brusvT)NyK=TA@~{ZR)}5 z9Ce;LUp+!SN_~-fw0gFBxq6Lyle$CQrQV|6rrx2xSAD^(-O_650rbW}Hxk7WLhG}ll+@sm3Y1edWHfy$O zwrh53c4?m0JfnG5vrqH9X20g3=CJ03=B(!T1Z_fA!nlNK3702anQ(2w^$DvJZb-N> zVSU0~3HKyyOlVK&Oz2Mdoy+8Aav?6vt>9L2*K@168@SuKySWYACa!~ffO~{{jC+FH z&F$g#a?f!eabI!2X|a}S$JPI z`?cNLH?*g;r?u~D&uTx=ex&`k_IvF)omn?PSE8%Xd3DQmYjij0*6ME3ZP7icJE(h8 z_k->y-7mV|bblnG#Jt2&i5DjpC6**kOq`iGH?c0UA#q+}OJZB%`os;1yA$^(b|)TB zJdt=ZDKBYM(xjy7Bwtc%QhU;tq@zi1>XY;ieTKe3KU_aTKT2Pwzf?a_KV4s=pRKRe zFVtVHU!z~Eze#_Kew}`Uev`gK-=*K8-==>^|CD~e{*3-J{dfBB^*`!=*8ggd7^DWd zL1|DMG=@w=g~4aI#<13Kqv2-5Mni|8%dpk3-LTWJ$FSFM#BkKmZFt@AhT)Xqtl?wB zr-siBUmAWfoHJr0HOh@jquQu38jVh4hH^2@Z zeq{X0giLzV5Ywfm@uo^sm1(kRfhlBKYP#06)AYFMNz+rN-KIUJW2Vl4-& ztcR^HS&vw|t;ek=tS7B!t-sk6HnmM-)7lbkdRv+;%Qn(B&Njg|(KgBEwoSE7v(2#8 z*nGBTTZ=7V3)vRh7TcECuCQHcyUup2?LOP{wv)CmQ{z%?se@7{rdFp;OP!Y*OkI+C zMe6d@t5UB|U6Xoa>Mg13QV*t{P5sp_u_xGdcD>zXPqEwVc6*jR-#*+v(teS>%s$qB zseOWdqJ6P_tG(NP+J4slh5cs-a!`lVp>S}HM2Ep)cBD9*j&w(+V}zr~QR*mnR5+>} zZb!9ahNH&O;AnJQ?zqx%jpI7UYR6i~ZI1PhyB!-H?T#Ieha9^c`<&^{3}>FR$T`+o z>8x?icP?-?J1=*JoQs@GoYy*6IoCLEbl&1z=e*sy-uaC4tV``0<{Ir9>#B0OU9(*E zuKBL(U29yoyEeHxU7KB7T@Sh*bv@zQ<$Bt6$n~P@W!EdNcU>R4KJOuCMEs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch05/chapter05.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch05/chapter05.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..9b6e229 --- /dev/null +++ b/ch05/chapter05.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter05.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2980371E1C62437900FBBC6A + + primary + + + + + diff --git a/ch05/chapter05/MetalView.swift b/ch05/chapter05/MetalView.swift index eea4d47..73ad3bf 100644 --- a/ch05/chapter05/MetalView.swift +++ b/ch05/chapter05/MetalView.swift @@ -75,41 +75,41 @@ class MetalView: MTKView { func createBuffers() { device = MTLCreateSystemDefaultDevice()! - commandQueue = device!.newCommandQueue() + commandQueue = device!.makeCommandQueue() let vertex_data = [Vertex(position: [-1.0, -1.0, 0.0, 1.0], color: [1, 0, 0, 1]), Vertex(position: [ 1.0, -1.0, 0.0, 1.0], color: [0, 1, 0, 1]), Vertex(position: [ 0.0, 1.0, 0.0, 1.0], color: [0, 0, 1, 1]) ] - vertexBuffer = device!.newBuffer(withBytes: vertex_data, length: sizeof(Vertex.self) * 3, options:[]) - uniformBuffer = device!.newBuffer(withLength: sizeof(Float.self) * 16, options: []) + vertexBuffer = device!.makeBuffer(bytes: vertex_data, length: MemoryLayout.size * 3, options:[]) + uniformBuffer = device!.makeBuffer(length: MemoryLayout.size * 16, options: []) let bufferPointer = uniformBuffer.contents() - memcpy(bufferPointer, Matrix().modelMatrix(Matrix()).m, sizeof(Float.self) * 16) + memcpy(bufferPointer, Matrix().modelMatrix(Matrix()).m, MemoryLayout.size * 16) } func registerShaders() { let library = device!.newDefaultLibrary()! - let vertex_func = library.newFunction(withName: "vertex_func") - let frag_func = library.newFunction(withName: "fragment_func") + let vertex_func = library.makeFunction(name: "vertex_func") + let frag_func = library.makeFunction(name: "fragment_func") let rpld = MTLRenderPipelineDescriptor() rpld.vertexFunction = vertex_func rpld.fragmentFunction = frag_func rpld.colorAttachments[0].pixelFormat = .bgra8Unorm do { - try rps = device!.newRenderPipelineState(with: rpld) + try rps = device!.makeRenderPipelineState(descriptor: rpld) } catch let error { self.print("\(error)") } } override func draw(_ dirtyRect: NSRect) { - if let rpd = currentRenderPassDescriptor, drawable = currentDrawable { + if let rpd = currentRenderPassDescriptor, let drawable = currentDrawable { rpd.colorAttachments[0].clearColor = MTLClearColorMake(0.5, 0.5, 0.5, 1.0) - let commandBuffer = device!.newCommandQueue().commandBuffer() - let commandEncoder = commandBuffer.renderCommandEncoder(with: rpd) + let commandBuffer = device!.makeCommandQueue().makeCommandBuffer() + let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: rpd) commandEncoder.setRenderPipelineState(rps!) commandEncoder.setVertexBuffer(vertexBuffer, offset: 0, at: 0) commandEncoder.setVertexBuffer(uniformBuffer, offset: 0, at: 1) - commandEncoder.drawPrimitives(.triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) + commandEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) commandEncoder.endEncoding() commandBuffer.present(drawable) commandBuffer.commit() diff --git a/ch06/chapter06.xcodeproj/project.pbxproj b/ch06/chapter06.xcodeproj/project.pbxproj index 04ca30b..9e591b4 100644 --- a/ch06/chapter06.xcodeproj/project.pbxproj +++ b/ch06/chapter06.xcodeproj/project.pbxproj @@ -85,13 +85,14 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = Marius; TargetAttributes = { 2984512B1D47EF08008D81B9 = { CreatedOnToolsVersion = 8.0; - DevelopmentTeam = C2X9Q6VFVJ; + DevelopmentTeam = 8JG22Q59U3; DevelopmentTeamName = "Marius Horga"; + LastSwiftMigration = 0810; ProvisioningStyle = Automatic; }; }; @@ -164,8 +165,10 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -187,7 +190,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -212,8 +215,10 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -229,7 +234,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -242,6 +247,7 @@ isa = XCBuildConfiguration; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = 8JG22Q59U3; INFOPLIST_FILE = chapter06/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.metalkit.chapter06; @@ -256,6 +262,7 @@ isa = XCBuildConfiguration; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = 8JG22Q59U3; INFOPLIST_FILE = chapter06/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.metalkit.chapter06; diff --git a/ch06/chapter06.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch06/chapter06.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c1ba807222cebcace3a364d91138a27195db20d1 GIT binary patch literal 15335 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
*N2 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch06/chapter06.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch06/chapter06.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..9b1a329 --- /dev/null +++ b/ch06/chapter06.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter06.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2984512B1D47EF08008D81B9 + + primary + + + + + diff --git a/ch06/chapter06/MetalView.swift b/ch06/chapter06/MetalView.swift index 58fccb5..7481562 100755 --- a/ch06/chapter06/MetalView.swift +++ b/ch06/chapter06/MetalView.swift @@ -6,7 +6,9 @@ // Copyright © 2016 Marius Horga. All rights reserved. // +import Foundation import UIKit +import MetalKit class MetalView: UIView { @@ -16,24 +18,24 @@ class MetalView: UIView { return self.layer as! CAMetalLayer } - override class func layerClass() -> AnyClass { + override class var layerClass : AnyClass { return CAMetalLayer.self } override func didMoveToWindow() { super.didMoveToWindow() let device = MTLCreateSystemDefaultDevice()! - commandQueue = device.newCommandQueue() + commandQueue = device.makeCommandQueue() redraw() } - private func redraw() { + fileprivate func redraw() { let drawable = metalLayer.nextDrawable()! let descriptor = MTLRenderPassDescriptor() descriptor.colorAttachments[0].clearColor = MTLClearColorMake(0, 1, 1, 1) descriptor.colorAttachments[0].texture = drawable.texture - let commandBuffer = commandQueue.commandBuffer() - let commandEncoder = commandBuffer.renderCommandEncoder(with: descriptor) + let commandBuffer = commandQueue.makeCommandBuffer() + let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) commandEncoder.endEncoding() commandBuffer.present(drawable) commandBuffer.commit() diff --git a/ch07/chapter07.xcodeproj/project.pbxproj b/ch07/chapter07.xcodeproj/project.pbxproj index 2bb7acb..f6c1591 100644 --- a/ch07/chapter07.xcodeproj/project.pbxproj +++ b/ch07/chapter07.xcodeproj/project.pbxproj @@ -91,12 +91,12 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0810; ORGANIZATIONNAME = "Marius Horga"; TargetAttributes = { 29D878251C84D2B0007B5F17 = { CreatedOnToolsVersion = 7.2.1; - LastSwiftMigration = 0800; + LastSwiftMigration = 0810; }; }; }; @@ -168,8 +168,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; @@ -212,8 +214,10 @@ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "-"; diff --git a/ch07/chapter07.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch07/chapter07.xcodeproj/project.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..6f71a9eb29776e77dea894162cf5543db1a12a26 GIT binary patch literal 11847 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 literal 0 HcmV?d00001 diff --git a/ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter07.xcscheme b/ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter07.xcscheme new file mode 100644 index 0000000..1f22050 --- /dev/null +++ b/ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/chapter07.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist b/ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..f85199c --- /dev/null +++ b/ch07/chapter07.xcodeproj/xcuserdata/chenyungui.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + chapter07.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 29D878251C84D2B0007B5F17 + + primary + + + + + diff --git a/ch07/chapter07/MetalView.swift b/ch07/chapter07/MetalView.swift index 975c572..fd1add0 100644 --- a/ch07/chapter07/MetalView.swift +++ b/ch07/chapter07/MetalView.swift @@ -23,27 +23,27 @@ class MetalView: MTKView { func createBuffers() { device = MTLCreateSystemDefaultDevice()! - commandQueue = device!.newCommandQueue() + commandQueue = device!.makeCommandQueue() let vertex_data = [Vertex(position: [-1.0, -1.0, 0.0, 1.0], color: [1, 0, 0, 1]), Vertex(position: [ 1.0, -1.0, 0.0, 1.0], color: [0, 1, 0, 1]), Vertex(position: [ 0.0, 1.0, 0.0, 1.0], color: [0, 0, 1, 1]) ] - vertexBuffer = device!.newBuffer(withBytes: vertex_data, length: sizeof(Vertex.self) * 3, options:[]) - uniformBuffer = device!.newBuffer(withLength: sizeof(Float.self) * 16, options: []) + vertexBuffer = device!.makeBuffer(bytes: vertex_data, length: MemoryLayout.size * 3, options:[]) + uniformBuffer = device!.makeBuffer(length: MemoryLayout.size * 16, options: []) let bufferPointer = uniformBuffer.contents() - memcpy(bufferPointer, Matrix().modelMatrix(Matrix()).m, sizeof(Float.self) * 16) + memcpy(bufferPointer, Matrix().modelMatrix(Matrix()).m, MemoryLayout.size * 16) } func registerShaders() { let library = device!.newDefaultLibrary()! - let vertex_func = library.newFunction(withName: "vertex_func") - let frag_func = library.newFunction(withName: "fragment_func") + let vertex_func = library.makeFunction(name: "vertex_func") + let frag_func = library.makeFunction(name: "fragment_func") let rpld = MTLRenderPipelineDescriptor() rpld.vertexFunction = vertex_func rpld.fragmentFunction = frag_func rpld.colorAttachments[0].pixelFormat = .bgra8Unorm do { - try rps = device!.newRenderPipelineState(with: rpld) + try rps = device!.makeRenderPipelineState(descriptor: rpld) } catch let error { self.print("\(error)") } @@ -51,14 +51,14 @@ class MetalView: MTKView { override func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) - if let rpd = currentRenderPassDescriptor, drawable = currentDrawable { + if let rpd = currentRenderPassDescriptor, let drawable = currentDrawable { rpd.colorAttachments[0].clearColor = MTLClearColorMake(0.5, 0.5, 0.5, 1.0) - let commandBuffer = device!.newCommandQueue().commandBuffer() - let commandEncoder = commandBuffer.renderCommandEncoder(with: rpd) + let commandBuffer = device!.makeCommandQueue().makeCommandBuffer() + let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: rpd) commandEncoder.setRenderPipelineState(rps!) commandEncoder.setVertexBuffer(vertexBuffer, offset: 0, at: 0) commandEncoder.setVertexBuffer(uniformBuffer, offset: 0, at: 1) - commandEncoder.drawPrimitives(.triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) + commandEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) commandEncoder.endEncoding() commandBuffer.present(drawable) commandBuffer.commit() diff --git a/ch08/chapter08.playground/Sources/MetalView.swift b/ch08/chapter08.playground/Sources/MetalView.swift index 61a864c..a425315 100644 --- a/ch08/chapter08.playground/Sources/MetalView.swift +++ b/ch08/chapter08.playground/Sources/MetalView.swift @@ -17,33 +17,33 @@ public class MetalView: NSObject, MTKViewDelegate { func createBuffers() { device = MTLCreateSystemDefaultDevice() - queue = device.newCommandQueue() + queue = device.makeCommandQueue() let vertexData = [Vertex(pos: [-1.0, -1.0, 0.0, 1.0], col: [1, 0, 0, 1]), Vertex(pos: [ 1.0, -1.0, 0.0, 1.0], col: [0, 1, 0, 1]), Vertex(pos: [ 0.0, 1.0, 0.0, 1.0], col: [0, 0, 1, 1]) ] - vertexBuffer = device!.newBuffer(withBytes: vertexData, length: sizeof(Vertex.self) * 3, options:[]) - uniformBuffer = device!.newBuffer(withLength: sizeof(Float.self) * 16, options: []) + vertexBuffer = device!.makeBuffer(bytes: vertexData, length: MemoryLayout.size * 3, options:[]) + uniformBuffer = device!.makeBuffer(length: MemoryLayout.size * 16, options: []) let bufferPointer = uniformBuffer.contents() - memcpy(bufferPointer, Matrix().modelMatrix(matrix: Matrix()).m, sizeof(Float.self) * 16) + memcpy(bufferPointer, Matrix().modelMatrix(matrix: Matrix()).m, MemoryLayout.size * 16) } func registerShaders() { - let path = Bundle.main.pathForResource("Shaders", ofType: "metal") + let path = Bundle.main.path(forResource: "Shaders", ofType: "metal") let input: String? let library: MTLLibrary let vert_func: MTLFunction let frag_func: MTLFunction do { input = try String(contentsOfFile: path!, encoding: String.Encoding.utf8) - library = try device!.newLibrary(withSource: input!, options: nil) - vert_func = library.newFunction(withName: "vertex_func")! - frag_func = library.newFunction(withName: "fragment_func")! + library = try device!.makeLibrary(source: input!, options: nil) + vert_func = library.makeFunction(name: "vertex_func")! + frag_func = library.makeFunction(name: "fragment_func")! let rpld = MTLRenderPipelineDescriptor() rpld.vertexFunction = vert_func rpld.fragmentFunction = frag_func rpld.colorAttachments[0].pixelFormat = .bgra8Unorm - rps = try device!.newRenderPipelineState(with: rpld) + rps = try device!.makeRenderPipelineState(descriptor: rpld) } catch let e { Swift.print("\(e)") } @@ -54,12 +54,12 @@ public class MetalView: NSObject, MTKViewDelegate { public func draw(in view: MTKView) { if let rpd = view.currentRenderPassDescriptor, let drawable = view.currentDrawable { rpd.colorAttachments[0].clearColor = MTLClearColorMake(0.5, 0.5, 0.5, 1.0) - let commandBuffer = queue.commandBuffer() - let commandEncoder = commandBuffer.renderCommandEncoder(with: rpd) + let commandBuffer = queue.makeCommandBuffer() + let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: rpd) commandEncoder.setRenderPipelineState(rps) commandEncoder.setVertexBuffer(vertexBuffer, offset: 0, at: 0) commandEncoder.setVertexBuffer(uniformBuffer, offset: 0, at: 1) - commandEncoder.drawPrimitives(.triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) + commandEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 3, instanceCount: 1) commandEncoder.endEncoding() commandBuffer.present(drawable) commandBuffer.commit() diff --git a/ch08/chapter08.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch08/chapter08.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e2baa9c911067596fb321a8e5fad8569341d4757 GIT binary patch literal 11110 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 - - - - diff --git a/ch09/chapter09.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch09/chapter09.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..613bd595a4087d9fdaf91f8f469b7cb79a59b314 GIT binary patch literal 8635 zcmb_hd3;k<_CNQ&EH6vjm%J=50kzQ5BGOWztS+?Bmc5j2lr^U9Yl*Z;Nm5F!l_Mg< zuA<O46Z@&)`Ase#HHiV?{FIa31iIqsiMXn&pqz}1@^d%XjKN&^xNIoeb zqsbUDmW(6g$y73pOeZtQOfrjj$o0faDoGuwCv!;?nNMyat>jj+h%6y1$V#$`+)eHw z50D4RI`RLv!g!T0qCq@pKBUpi}8II-Shp-7j| zrSwj^ny#e}(l+`CeUxsayXcd2H+`PIPT!(O={xi!Jw@NAr|IYPOZsnmf&NH;<+PlM zGjjrG~(QQwmEm=g7^WY3#iN z0OhGwb>2{@9TFfBDRS)~fCV*p5>q@v>Y)AwLk11Z>Yp*Re|AQIk78qkQQEpP=SLl0(w3sRvMnlS;Bm@Rs|30;^zOOfvLR|lF3g5G-BBlKVoCIzeI zpj;i(TI#JF74V0Hfx0?|aF1|ZSCirfJy}`(^Rx2u^E2{?KyY{j*J^}x3pyRAC%p{Z}Pyb*1pLt%nw<8lZOo)+}e69 z;@B)0&;~AcSc%6V8wSB(7&1-ush^!zh5AtrG1un?gWl$LHeqN*VacRO{70QM97aLf zR=66jfotJ97y&tu3nNiL3tCY`8`{x<&aIFKy`TU_!x$LLK8;6-ImnIOus058pGIQ3 zM{wkZLX3U9{&0S^FB}MlCU~0zjbV=AY-Bonz+5xITPfFhgbd{j zq9BU%SXtOt=L5bQ+993D=&>1IW{cU zhg2_J4^{2pg-W~}Q!y7WUr^YZxT&VZZmm{WyTZaS;0*f<9k8X7XYyxW=Y{Y?Wuo<%zE>@Cv^1 z!xOQ!J8>|kL?7a=BbI9w6gK2UP#87hU3fok=1BMuoj5|7 z*|a`x=Ev|^+|19J%v?pL$`7%~R^mA-{Y$tAY1`l|{0q*(zu_zR4}1;ZzS{rlRF+2DN;jW76HX_Lr@N}4_<{r z*g{Km12I0E#_VTQ-UWRmi3oA9AR@6dSP&Z)wGjtSR!*arYGp?r_#=%S?jdf{T@la? zi`&R$Sc2)L6TLovbhHQQ1=bCuCrKfxSc+v>zJa7c9_fu!m>X_X9Dik;IwcV05|(oO zwULi8)?$3`5$y4EJ0kJY=cDC7y&MiUM-WajS;8g#umTgKMhzgtS&2gil58@F3?@U! zP%;ds;xwF&GjJx(LeCa*HMxddORi(D9FmLIqZjAkJoakB`ItU~5rv%R4SP$Q8|3M# zO%ZEZX^Xi;m^bXAW1|fX);%JvvraJi#M4 zs{-|z-iC%cIkP(a+r&pEkYccIA`?j=nM8`nWURz0tVS7YHjxri3cW})NF6i%W_4q*z2#AXO8hz%ei%RV?!ZE zfy%j5Rmq`HAlRJi_XkwaPVrTTXEVHAA}>m?@d8tFpMQN!O|9X*3WW*>WDjjk$*GKx z3zVzm_ztNe)nFnrsUfvwHt~@g$Q%~j(Jf2}R7GNCR_8Gmc@+cLjCzLI&c{mi$5PMy zNj1^6onsipdThixoa+(##ZqCM`&4n6vFa$68C5{~6+i~i&j3k+B*ZKZvxt~Cty4!? zL^}pph%`*CidHm{tWKKAjUGYCTAe^+@>#e<))aYt!FJLDL;uGdalx~C)L*Eah4MNcWzZ*0Tt zfM3p&=gD<}hJN|}TAyF;$AZyY$L41ZV}E{Ip7m2Vb{kpD*pC%XQE5?swUfUn`}w^g zb>&jB%p>$>M-u0S&hv>6#CEb=5%;I(cRIi$q{SSr)IMt9N6pRbOc%$=?d(wRAPdQA zf=Uxt=?%%#*?Ul~V-TDtBVaSKQj;|RWDQwcR#?JLyq&C3N;lU1k$V-0+=nfg$hfUD z_p8ms(80r6TMYt<(%HkLoz-t-JtOf2Skz87kd26V3#QMEWP+kV$fu-;o+E?}r=n{f zA&)6*9%a0}5R2Q%cJeshiuYpr)Lf;Y@-q^SPW>x+>Nga=hXM8(T*UCX7E@G{_d-=0 zc^+?z6%gbla^Qc`>>K1Dd6OJsufyaBF2=v$5?sMvcjFo*6^U`g77jF52IfcYI!;c2 zl@(GcUE}@~d6&igLh?S|iA!0S0^XsT_aO{uCm)f&<1$>?nF&52pDD@fQ(WFg4l%V% zrPUwlcREO=r(I^r#7c z6g%l!#)_GxkL{1#WU2)xT9c;;u!SBmcp^(2P>e@9}3V?Duh^F2bmt(PEO zwY4kC&qolwT0QGu6e#?P_h1^UgF4YWIBRI%j*D_se<`#m4|&vx_c3T~?0^63hPuFy4y4&i+Mz>m13nzd677*Ap~I9d49E2`&ZpNZ zoR4ks6#pCdM`&3kU{%m)MbH@B^vBE)-P!~?8PYb=iL{VTqD8m`x8fuC=tf#hOW-G3 zhTCu_tAlr8dc_2}Ceox&E%w#Uj(nP?7Jre#RIn?hZM2b()ud51GpJWlGn3Au9(p}K zhTHLR+_90B;CZwfQrW3V_yjAuS!i`D_Xd4RWyEe$6y2QzFup@=QIpIvAjwy?VJu19UD6Q`&%kZG${! zAG6KEZi_;Jx{mfx*?4sFJUX9Ej@%m1W_+@vaiTY|8v@!&Z^qrYC&qd77P_cwgTqdL zF+2IElve1r(_LF3x{R)jn^{P2XC8VwGV|TInRijvM|bHM={@wmm__&Fb5V=dDHc6M zAI81-Vy8vzl(nXvcNTOr-Ga~K3z#yMxmAtplpNpnaT*_^JL1+nL3iRy_;R$ZjW!xe zLzI#;9q43*{h`MPwbm z6|uf!(OJd3f8pUv7BC&p(*5)sdY)+kChvqm@ko~qlT-Afl11qcEQ`J!$)d+qGybcX z@e}pJbR4e?bf&`?zeP$PE`ek9O*+G2tW=J>1&oJIJC~%? zZGU#Us=>lpJwnQ#(9q6_iu6A-HM%=H=Vr{uIXEXLaV|WC@8Wy-w~bskt~+-bW4`zC z1N=~BK1sc`ich1gB zC2UVtOfDTo^XX{zCCqK? zibiH)xx+`@9bXV)f=_c!@=^AuR zx<$IBy5+i+y4AY7b!&C^>K@Y_(S4vhqdTiRr~69xweGy`TRqil^g2DSH|ov$M7^L- z*N@lVsJ~CYRsXF1b^Ss8A^j2kQT=iK=lXB-=k*u#7kQ4?@jP$h6Zj;)JAWB}IiJiA zHJLo2ELvT@IgMz&*K;Hi}@w|GJXZWihqD#&$sg%`A7I| z{C0i^|1`g!Kgb{A5A(|pJ9%n-ViX%HG~X}h9*O^p~cW@SYTLf*k*XuaLjPVaKUIY z_AurdD~wgf2IE{~&=@w}Vq9cgY+PzwZd_^HZQN(vZ+zW&(0Isr*m&G{+V~IS8RJ>w zIpYQ6MdSCzAB{hmdYf`g6(+B#+EinjZE7?vGA%YOF)cH#Fs(A(VOni!Gi@+!GHo$E zV%lcfZrWkmX?nqQ(Db?K2eaKg&^*FC)m&qqYYv$k%}wTJbBlSgd5L+Md4+kE`401H z^LFzI^C#w?6M7|NCJaf)Nf@0lBO#D*bHbeo+Y@#q>`d5|usdN-!kL6`6249NF5!nn zU7{t?ndnOFmUvlWdSX`Mq{Pz1P~uIAOB2^5KAhN=xFK;<5+oUtu1HEv8lE&N$)6NT zdMIgY($S=klD798Ep!*Mg+am)Ax{`9j29*f#X_l2E>s9L z!W?0~&?+ntZV?s>ON3>@3Sq6VL3mVnOn6*)Lf9ibBRnTOFT5xm5Z)Bt5{?KT2xoN-m=ef#B$7X!g9*;p5=YZ7gm$iX6<23vG%g2TbEi_ zTlZLBwZ3LOU_EF(Zaryz*ZMc>*VbP|t*93bqDi!hHqjwUqFYQ6)5P9lA909SAdV5o zi4(*^u}CZyOT{Wt7HdVHI7h4(1L9mUB%-)nTq)iz-YMQCt`XOZ?czppv$$1!RD4X_ zExsTg7vB+2iSLQ;iyw+#h-bvJ;yLk0@h9;Y8`z9C(UxrMX-l=G+4|WA*s^VdZH2b! zwrX3AZMN+OTb-@Z)?{n8wb)v13v5elt8MFSyKVbyZ`$6n9kCs?9k+d8`^a|M_KEE? z+ZT3?y@x%|KGR-fueJN^^X$#`7W>V1v@f);wQsO*wr{m>vv0TWus>~o-u|NfW&11k zx9#uPPubtIe`G&x|HS^8{ha+r`>zh-;2gZe=rB7H9ZpB8qn9Ji(c3Y|G1M{Kajj#7 zBiAv`G08F6QQ|0bR61%MKF1tKgCpn&JLWmivDC5F@qlBU<6*}}$7aV?$D@wDj{T04 zj_Zs#M;ZO-k^9nPK3UCzDE7o9IV zUva+eJmx&%Jn1~`Jmb9R{NDMa^C!tJIVG3WO}b1e}Jj>)P*n-Svj+P1jqlldgANe{+4{`p9+K z^|X9(<-WsxmwS!-9`{D~ z4);#?F86Nt9``fuSKY6<54aDy54jJ!-*&&}{=|L3{e%10NNEd{s_)!H^*#Ex8~Hy4 Cos)Y2 literal 0 HcmV?d00001 diff --git a/ch10/chapter10.playground/Sources/MetalView.swift b/ch10/chapter10.playground/Sources/MetalView.swift index 393222e..879e690 100755 --- a/ch10/chapter10.playground/Sources/MetalView.swift +++ b/ch10/chapter10.playground/Sources/MetalView.swift @@ -14,13 +14,13 @@ public class MetalView: NSObject, MTKViewDelegate { func registerShaders() { device = MTLCreateSystemDefaultDevice()! - queue = device.newCommandQueue() - let path = Bundle.main.pathForResource("Shaders", ofType: "metal") + queue = device.makeCommandQueue() + let path = Bundle.main.path(forResource: "Shaders", ofType: "metal") do { let input = try String(contentsOfFile: path!, encoding: String.Encoding.utf8) - let library = try device.newLibrary(withSource: input, options: nil) - let kernel = library.newFunction(withName: "compute")! - cps = try device.newComputePipelineState(with: kernel) + let library = try device.makeLibrary(source: input, options: nil) + let kernel = library.makeFunction(name: "compute")! + cps = try device.makeComputePipelineState(function: kernel) } catch let e { Swift.print("\(e)") } @@ -30,8 +30,8 @@ public class MetalView: NSObject, MTKViewDelegate { public func draw(in view: MTKView) { if let drawable = view.currentDrawable { - let commandBuffer = queue.commandBuffer() - let commandEncoder = commandBuffer.computeCommandEncoder() + let commandBuffer = queue.makeCommandBuffer() + let commandEncoder = commandBuffer.makeComputeCommandEncoder() commandEncoder.setComputePipelineState(cps) commandEncoder.setTexture(drawable.texture, at: 0) let threadGroupCount = MTLSizeMake(8, 8, 1) diff --git a/ch10/chapter10.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch10/chapter10.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..b9c4bd9d42e3041e54655767ebe1743c5fafb79e GIT binary patch literal 10508 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 W_+X8R2tCpgewdA+|KZPs+W!Lyd-=Ek literal 0 HcmV?d00001 diff --git a/ch12/chapter12.playground/Sources/MetalView.swift b/ch12/chapter12.playground/Sources/MetalView.swift index 9cc48fd..e84b3f7 100755 --- a/ch12/chapter12.playground/Sources/MetalView.swift +++ b/ch12/chapter12.playground/Sources/MetalView.swift @@ -10,7 +10,7 @@ public class MetalView: MTKView, NSWindowDelegate { var mouseBuffer: MTLBuffer! var pos: NSPoint! - override public func mouseDown(_ event: NSEvent) { + override public func mouseDown(with event: NSEvent) { pos = convertToLayer(convert(event.locationInWindow, from: nil)) let scale = layer!.contentsScale pos.x *= scale @@ -29,8 +29,8 @@ public class MetalView: MTKView, NSWindowDelegate { override public func draw(_ dirtyRect: NSRect) { super.draw(dirtyRect) if let drawable = currentDrawable { - let commandBuffer = queue.commandBuffer() - let commandEncoder = commandBuffer.computeCommandEncoder() + let commandBuffer = queue.makeCommandBuffer() + let commandEncoder = commandBuffer.makeComputeCommandEncoder() commandEncoder.setComputePipelineState(cps) commandEncoder.setTexture(drawable.texture, at: 0) commandEncoder.setBuffer(mouseBuffer, offset: 0, at: 2) @@ -49,23 +49,23 @@ public class MetalView: MTKView, NSWindowDelegate { func update() { timer += 0.01 var bufferPointer = timerBuffer.contents() - memcpy(bufferPointer, &timer, sizeof(Float.self)) + memcpy(bufferPointer, &timer, MemoryLayout.size) bufferPointer = mouseBuffer.contents() - memcpy(bufferPointer, &pos, sizeof(NSPoint.self)) + memcpy(bufferPointer, &pos, MemoryLayout.size) } func registerShaders() { - queue = device!.newCommandQueue() - let path = Bundle.main.pathForResource("Shaders", ofType: "metal") + queue = device!.makeCommandQueue() + let path = Bundle.main.path(forResource: "Shaders", ofType: "metal") do { let input = try String(contentsOfFile: path!, encoding: String.Encoding.utf8) - let library = try device!.newLibrary(withSource: input, options: nil) - let kernel = library.newFunction(withName: "compute")! - cps = try device!.newComputePipelineState(with: kernel) + let library = try device!.makeLibrary(source: input, options: nil) + let kernel = library.makeFunction(name: "compute")! + cps = try device!.makeComputePipelineState(function: kernel) } catch let e { Swift.print("\(e)") } - timerBuffer = device!.newBuffer(withLength: sizeof(Float.self), options: []) - mouseBuffer = device!.newBuffer(withLength: sizeof(NSPoint.self), options: []) + timerBuffer = device!.makeBuffer(length: MemoryLayout.size, options: []) + mouseBuffer = device!.makeBuffer(length: MemoryLayout.size, options: []) } } diff --git a/ch12/chapter12.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch12/chapter12.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..42f166a38a0c7b37b37736c5b5b2fd6c7f228585 GIT binary patch literal 10643 zcmd5?2Xs``);=YfnN07!+(|%M5|R*-fCbVh0wEFzB|w-Ymt-KB2{RKQBD$jpR%|F( zkQADtq9QiLt|+1p5etfnsHj*_z^?G0J2x}QC{O*@`rliBX06P<_nfoOKD&N<->GSC z^oJu^S^E)21W}ZPl97bIL|>lPXCWU7`-6dLeS$Uf_}WN#dLLh?w!zOHPwo>5HtP{y z-o90b9Y~5~$bgK@Au2+n(D`T*sz8&`4Ag-9Xdar6 z8c`Dppde~S3s49xL>D1IZRlFG5?zO`M>n7w(M@O-x*2Uko6%k9ZnOp6gYHH5p=Z%^ z=y~)4dJ*kHFQJ#wZuANI6dggIq0iA5=qUOUeTBY8-=JgYNAwf=8U2C@rZ@?!u?B0g z4x4a4+#e6X1Mwi7jx%s39*l?Jp?Cx?!RO;~cs!njEAV7oiKpUOcs8!Vb8$Uxz>T;G zFTzXkwRk1I1Fyw*;`Mj~z6)=~_v44~cKjHA9PhwS;ivJ7cn^LHzm4C)2k`s&82%Q2 zhmYeE_$2-w|A2oa$wWe=L`Kv^Pt3$Zti(xN#7p{;vq%mZLUPGal1GY2F)1OXWE2@o zCX#Y;0hvmsky(T%b4fjEAbzrdgh-gQk_*WtWCgi`TuE*qH6|$G?C-0I&`_QEh(KE49yQW`)c`;U~NkiABa?I`xFn& zDjGJVbVx=?X;E%QZf;RgM#0eR?2No&#W}+Ya)#y)%^DTk*o+*ATaPTrifqUZ$shqK z$krn#av?YJKnm!=0GW_lt+h_#YuN^+b^b^&6x(jfr19ZuttNIm)gPz}E@DsYCH!1p zOJn!!iij`5heriN;&fwCi1*EJ4*CO;aA9r4zmSdA?TZTHEHtnS^+Wy90FZ+UG@yF} zr85C#piDFvWeFmx@rC&+_8sCIeQYfc2$Z0x)>bdhSX>*d<1-?`)|%kr;e)4ynFkN9 zZQui~ErI$L|KJ#x;lX2@8-fA8gkQ)v2Ac<$2I~C*esB{X@insf**WZ=uQ|epvU4(< z8-1DCBGHLdB>Qm znu%ti*{B-L0V~+R4i0c`KsBfq)gd0u1sAx%0~~mx9#S6iH~B)XF*}>=Z{oudUsE%4 zp2Autu5d8aS{MifnLDt|GSy!fX<+{PhgFsSu%F4TxWO0l)iNWTcjVwp;b&0Fe3U}@rJM2}@k7*-oQ1oxwlB{$tXGrc+S*385wN%tt z7_q=%i0iDx&%81iU`OdfVbp^1XO>m;Jc~(a5o#4gw;1|#pbOzFL3BN?dP&p-`~LS$ zFvi`bXoV2jEOQ$c%&d<#j6q6D=$Svqj#BD;W(He9sx((fq?m%lH3$h^xhCnV1g}hB@9co9+ zm)Il^;vv5c+uE?5c~%w+-JEd5^Lpos$-bK6U?36-Ha7C1>inFX(!%2WAsGe5C3zXS zMTMmqMJ3sJ8AFRk4aqOb$|=e!$(}7NkH+>r+EdJX*x?M1JnedrCeAH9j*fQVkm)97zLwY z42*^IVcZt<4myC|jY{i%CaDk6A@mVC4CCPn*cg@BHfDNH!AtNm>=sN=fGeWZCb0Nh zJ(>^rTbPxY6CX3E5UBHo>R32p1KlX1gs*9-7mg)JUO0Z6zOxX&!7T5C$2+nsg(_izDwqkgU^Y~5!XC_FFHU8jKByne0Uy*tJ^L(Rz%X^@ zD2Ad+d=cN|)@Hs+#l!}&;o z3-B;J9G{KPL7DhG=I=4O*-Y6pv<^9FKyz9XOTAn0c!{5DjMCvZ@xqE(_6T!o^&F z0p~O_1U(=|Zvvhu&?^If2QG(skUGQPE6}GVKshlE6f?W6XXq$%aumFaqAJBxItAEh zxa73>_XeKEBsLvo;VL|{s;;}_VH%hoi9sz;Ko9~^;8XD1(_^B9a5bL8bW~C~IVPZ( za67RN<)3*-Tv>}*B%h;$mGN2#@4_z&1HZ$h4!j$#>KS+yzb=^CYxrMy zFI)}Rz_nd?9~0YtSjnWc{=bo3-W87b9$eRB#vkA#f*F5^58;pSVf-=v1b+(G!wqmF z+ytxOX1HY&{tSPPzraWFQ8XTZ4Xa@d+yU#@#|T~j|FX;9In_`2l;BjC;a}p#&aGm( zvjLw*wFF0<>Ne(7w~J2o7xie=-#lIES!eP$l0xKyzY!I5z}l$4wMUJNXqXm=7Vhlv zo}+^IFo`BO%O4G#*rEpBDH!;Fr#C`u(ZaM-WII)0I}JAct#6QiB%PI$q(2!z29iOr z2{yxBaQAwWK{C<%Bn!5{1F#Jqg4Ai_`MFW-K7EqEz9D)wLj-tH*sC=O5H^PI<0!H_ zK9YQLj<8Ju8AgVav*8}N7w&_t>zM*~kP)mO$1!={&(JjswT?<($S=SgRs`{j1ehD1 zvJK`iVS(sh{+dIejgCO)L^B-LaNJPMC>k{VJAkHZeAnZ?NTglhpQRZbQT zH^EmQ@JCwe__%J;MqYj>+7F2_HIFnU& zqTvd)O_@-$X)X29s!ilgDCYUa5pl%YEcU+sGz9x#KfD6(zeU!Q4QzvrWE0tpGTBC3 zSWo{RTtAJyRB5aW@qx-_ANwDvsuk!4B7(UwQ;ng#p2V66>#Kqxf2>MluDuTq!k%6b zf!s&7Mnl$v@H)I24Ox3d<9bN&{q68tJYGkSe9o-67xs_2#8>1S zVW0=Z$Afni@{kkcWVN;*v$;5;O6Wx-nocMAUO+$pbh^01kL0InZQ4KBp_BY9Q2!@W zW2gI-{2q@&r{F_Kjmn5(=BSiV3Wwn1xT8`DWkqyP#G!JkfRErX)Rd=P!7I;-{F)HPF!&$D>S`DG|R$s zW~>XWi?w~@L(F0R&6+se?Un#Ni{`MF5A8?$(*blK9YoV<2F;{{X%@|fqwpns1z*EA za16eM@8CF`fRkGgPjiun=FxmwK!?%cEG_Z$T$Yr+XDR6i_z8Z7U*K1E&%tj3|3Xu) zG!zPk#5};@aA`ouSam`_vAcE0-YT)Sm;j4~BvTx0651|dzK)giwezFhMwX3q0-?pt ztTn{f#SR}$q}_Qf4)ntUL=u7&RNP@?5y0P_(hkfd;mN&d^=>o)#ZY?WQ5no6+lfR`mLRp?e=~K-@-JLu+Xr z<(UQ4!|67R+Awaz1ioy;bR+fCc~Si~(LftcYQs`NuWdM`4YLMJcRMep5+P*^Swd|3 z#;q}~GGV-kpBoHyBLZd#;`FHAizf)Zo0jmOg)Fq0MFqr);y=$3(q7CDdUfIGLb@2~ zJLsY|oZLZM+pr{-BSnZ*7-cx-3`^<738|5`QI?xytCzL0=2=Z_?h1N^IQIimq+Lnplu(XD>-< z2koR?ZCKle4Q<%m6RS4TyAlG>-E>PE*0o{1aD1Ut9oLSC5t>IPM5X)bwuI#m(d}*6 z*oI9EUa`eudKXvTus31l<8)`j$|r@5Exk65H=u>(Om^`Sy4Ooq=5tGyWMt>$<)m{% zm$LQ-t5TUC4I7dd^P?A7UPPvT7LWlFRW2$=mU!^VD( zF^IjB9gaq@UkO}7t|6;fy4}d~=e=Yrd5Anr9wm>H*U3-pHvnoDy7kmZ%`60a*{=Zl zvdB1qz5TCb@Aj{vH&LbxdM9mXQWxIjKSy7nyXebFgOYNSMkI|%Dod(JnwjKJnxE8^ z6inKk^mfvLr1z5EPo9`OExA59ki0PYlH^O1mnAPxzA1T4@@>g?BzGitC2vUHl)N|j zXNg3TB2h@x60Jlp@kj6rj+Ks+PLR%!&XmrU&XMkueklE1dQ|$A^c(57(x0Wj zN`IH0mSGu{xn-rY3fU6bGTHUA+hn)PHp?E7Jto^B+bMfW_KfT~*$cA$vbSUhWCvv* z$PUR4%RZ4EN$Ho8mog*e%9JfByHXCP9FrqCktfL|a+zE%SIX6Lt=ub5llPVPlMj#& zl4r`Z+cl{0dOqs@SU7so1ahP;p!-Q4UZRDJLjrD65q|Wv#M7 zIZxTB3@9&Bu2MC`E+OM9cZdA9ZFH~Qr?o>aZeqMb@eOUd8`iS~-^-=W+^-tZ;Y|z}N*`e8`d0q2{=1tAp znnRi|G^e#mTDvw)Tc)khUaalXZqVMReL%ZSyIs3Sdq8_gdszF4_K5at?J@0l+7sIE zwWoAgM|H_Mz0Rvk)AiN$(+$uK(q-rd>(0}S)D`JUbfa`*bm!~F>&kQux)vSiF4Zm5 zE!SP4yGnPnZnf@K-R-)yx^=n^-QBuvx|ejjb$fKL>GtaO>67#-y;iT+8}(j&x;{sr ztIyLH=!^8@^z-yV{Yw36{d)aI{bv2$`iJ!I>yPNa(0{4_+K_C}8%zd^!ESIG+=fAh zOhcAoh+(K9-%w&0XP97^Xt=;I%`n3-(=gjG$8e2dz2OPN3x<~ryA68`2MnJZjvBr) zd}H|5aNKax@PjegC^e=S6-Jd&W7HW9Mw2nsm}wkqoMmh^t~PcVcN%va-!#5$JYam! z_`dN&<5A;R#&3+@8jl-K8hcZCE1c~ zQk&J5VH<6$vDMk;+8S*0Y?s-tvE5`_XM5K6nr*LbpKZVGE!&s2uWiR{-`P&szPFvS zV>`7c+x2#%-E6noQ|*K71@__gbL{8Yr`o66tL(Gv)%FH^lRao(U=Q1`v9GjWZ@=>@=XbNTPPx)Cb=fN zDqYiDGh8!Wi(JcH8(fdMUUwaGopj6GPIrNOg1gS$G<6RGgaAa5~P-dAUAZKW-q$QYbf^JDWR~o6PyR zIB+uT9! z1MU#_Dfc<|CHJ)#c~iV*ufyx|dc1wS{k#Lc>E7YqVsE*3ig&7ax_7qM=dJV3^|pGi k_uk{(?tRqzxc3R~Yu-1!2cn<>5h8xmJ>qxlzxTcW0S^x?BLDyZ literal 0 HcmV?d00001 diff --git a/ch13/chapter13.playground/Sources/MetalView.swift b/ch13/chapter13.playground/Sources/MetalView.swift index 2a6bdcb..e41a720 100755 --- a/ch13/chapter13.playground/Sources/MetalView.swift +++ b/ch13/chapter13.playground/Sources/MetalView.swift @@ -10,7 +10,7 @@ public class MetalView: MTKView, NSWindowDelegate { var mouseBuffer: MTLBuffer! var pos: NSPoint! - override public func mouseDown(_ event: NSEvent) { + override public func mouseDown(with event: NSEvent) { pos = convertToLayer(convert(event.locationInWindow, from: nil)) let scale = layer!.contentsScale pos.x *= scale @@ -28,8 +28,8 @@ public class MetalView: MTKView, NSWindowDelegate { override public func draw(_ dirtyRect: NSRect) { if let drawable = currentDrawable { - let commandBuffer = queue.commandBuffer() - let commandEncoder = commandBuffer.computeCommandEncoder() + let commandBuffer = queue.makeCommandBuffer() + let commandEncoder = commandBuffer.makeComputeCommandEncoder() commandEncoder.setComputePipelineState(cps) commandEncoder.setTexture(drawable.texture, at: 0) commandEncoder.setBuffer(mouseBuffer, offset: 0, at: 2) @@ -48,23 +48,23 @@ public class MetalView: MTKView, NSWindowDelegate { func update() { timer += 0.01 var bufferPointer = timerBuffer.contents() - memcpy(bufferPointer, &timer, sizeof(Float.self)) + memcpy(bufferPointer, &timer, MemoryLayout.size) bufferPointer = mouseBuffer.contents() - memcpy(bufferPointer, &pos, sizeof(NSPoint.self)) + memcpy(bufferPointer, &pos, MemoryLayout.size) } func registerShaders() { - queue = device!.newCommandQueue() - let path = Bundle.main.pathForResource("Shaders", ofType: "metal") + queue = device!.makeCommandQueue() + let path = Bundle.main.path(forResource: "Shaders", ofType: "metal") do { let input = try String(contentsOfFile: path!, encoding: String.Encoding.utf8) - let library = try device!.newLibrary(withSource: input, options: nil) - let kernel = library.newFunction(withName: "compute")! - cps = try device!.newComputePipelineState(with: kernel) + let library = try device!.makeLibrary(source: input, options: nil) + let kernel = library.makeFunction(name: "compute")! + cps = try device!.makeComputePipelineState(function: kernel) } catch let e { Swift.print("\(e)") } - timerBuffer = device!.newBuffer(withLength: sizeof(Float.self), options: []) - mouseBuffer = device!.newBuffer(withLength: sizeof(NSPoint.self), options: []) + timerBuffer = device!.makeBuffer(length: MemoryLayout.size, options: []) + mouseBuffer = device!.makeBuffer(length: MemoryLayout.size, options: []) } } diff --git a/ch13/chapter13.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch13/chapter13.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e199c5af8b9c489184776a3ae1008eeda2d6adad GIT binary patch literal 11542 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 literal 0 HcmV?d00001 diff --git a/ch14/chapter14.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate b/ch14/chapter14.playground/playground.xcworkspace/xcuserdata/chenyungui.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..ca9289d2a2ae12ec9a3d1a16c71c3ff7e1f4ca8f GIT binary patch literal 6823 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 h3vF(j$JS17Y#y*ZV%rd&MSx*?K7-0<K;!@b literal 0 HcmV?d00001