Fix compiler errors after update to Swift 4.2

This commit is contained in:
Eryn Wells 2018-10-05 13:45:37 -07:00
parent 9f5b7c7cb5
commit 5caa763a99
3 changed files with 25 additions and 20 deletions

View file

@ -11,7 +11,7 @@ import Foundation
extension UnsafeMutableRawPointer { extension UnsafeMutableRawPointer {
func writeAndAdvance<T>(value: inout T) -> UnsafeMutableRawPointer { func writeAndAdvance<T>(value: inout T) -> UnsafeMutableRawPointer {
let stride = MemoryLayout.stride(ofValue: value) let stride = MemoryLayout.stride(ofValue: value)
copyBytes(from: &value, count: stride) copyMemory(from: &value, byteCount: stride)
return advanced(by: stride) return advanced(by: stride)
} }
} }

View file

@ -63,7 +63,7 @@ public struct Parameters {
public mutating func write(to buffer: MTLBuffer, offset: Int = 0) { public mutating func write(to buffer: MTLBuffer, offset: Int = 0) {
let start = buffer.contents().advanced(by: offset) let start = buffer.contents().advanced(by: offset)
let stride = MemoryLayout.stride(ofValue: self) let stride = MemoryLayout.stride(ofValue: self)
start.copyBytes(from: &self, count: stride) start.copyMemory(from: &self, byteCount: stride)
} }
} }
@ -226,7 +226,9 @@ public class Field {
var ptr = ballBuffer.contents() var ptr = ballBuffer.contents()
var idx = 0 var idx = 0
for var ball in self.balls { for var ball in self.balls {
ballBuffer.addDebugMarker("Ball \(idx)", range: NSRange(location: ballBuffer.contents().distance(to: ptr), length: 16)) if let range = Range(NSRange(location: ballBuffer.contents().distance(to: ptr), length: 16)) {
ballBuffer.addDebugMarker("Ball \(idx)", range: range)
}
ptr = write(value: &ball.position.x, to: ptr) ptr = write(value: &ball.position.x, to: ptr)
ptr = write(value: &ball.position.y, to: ptr) ptr = write(value: &ball.position.y, to: ptr)
var r = ball.radius var r = ball.radius
@ -242,7 +244,7 @@ public class Field {
private func write<T>(value: inout T, to ptr: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer { private func write<T>(value: inout T, to ptr: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer {
let sizeOfType = MemoryLayout<T>.stride let sizeOfType = MemoryLayout<T>.stride
ptr.copyBytes(from: &value, count: sizeOfType) ptr.copyMemory(from: &value, byteCount: sizeOfType)
return ptr.advanced(by: sizeOfType) return ptr.advanced(by: sizeOfType)
} }

View file

@ -73,9 +73,12 @@ public class Renderer: NSObject, MTKViewDelegate {
guard let device = MTLCreateSystemDefaultDevice() else { guard let device = MTLCreateSystemDefaultDevice() else {
fatalError("Unable to create Metal system device") fatalError("Unable to create Metal system device")
} }
guard let queue = device.makeCommandQueue() else {
fatalError("Unable to create Metal command queue")
}
self.device = device self.device = device
commandQueue = device.makeCommandQueue() commandQueue = queue
super.init() super.init()
} }
@ -109,24 +112,24 @@ public class Renderer: NSObject, MTKViewDelegate {
field.update() field.update()
let buffer = commandQueue.makeCommandBuffer() if let buffer = commandQueue.makeCommandBuffer() {
buffer.label = "Render" buffer.label = "Render"
if let renderPass = view.currentRenderPassDescriptor, let renderPipelineState = renderPipelineState { if let renderPass = view.currentRenderPassDescriptor, let renderPipelineState = renderPipelineState, let encoder = buffer.makeRenderCommandEncoder(descriptor: renderPass) {
let encoder = buffer.makeRenderCommandEncoder(descriptor: renderPass) encoder.label = "Render Pass"
encoder.label = "Render Pass" encoder.setViewport(MTLViewport(originX: 0.0, originY: 0.0, width: Double(view.drawableSize.width), height: Double(view.drawableSize.height), znear: -1.0, zfar: 1.0))
encoder.setViewport(MTLViewport(originX: 0.0, originY: 0.0, width: Double(view.drawableSize.width), height: Double(view.drawableSize.height), znear: -1.0, zfar: 1.0)) encoder.setRenderPipelineState(renderPipelineState)
encoder.setRenderPipelineState(renderPipelineState) encoder.setVertexBytes(points, length: points.count * MemoryLayout<Vertex>.stride, index: 0)
encoder.setVertexBytes(points, length: points.count * MemoryLayout<Vertex>.stride, index: 0) encoder.setFragmentBuffer(field.parametersBuffer, offset: 0, index: 0)
encoder.setFragmentBuffer(field.parametersBuffer, offset: 0, index: 0) encoder.setFragmentBuffer(field.ballBuffer, offset: 0, index: 1)
encoder.setFragmentBuffer(field.ballBuffer, offset: 0, index: 1) encoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 6)
encoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: 6) encoder.endEncoding()
encoder.endEncoding()
if let drawable = view.currentDrawable { if let drawable = view.currentDrawable {
buffer.present(drawable) buffer.present(drawable)
}
} }
buffer.commit()
} }
buffer.commit()
} }
} }