diff --git a/Source/Utilities.swift b/Source/Utilities.swift index 1ea4760..94dee86 100644 --- a/Source/Utilities.swift +++ b/Source/Utilities.swift @@ -8,18 +8,21 @@ import Metal import Upsurge +/// Convert a Metal buffer to an `UnsafeMutableBufferPointer` public func unsafeBufferPointerFromBuffer(buffer: MTLBuffer) -> UnsafeMutableBufferPointer { let pointer = UnsafeMutablePointer(buffer.contents()) let count = buffer.length / sizeof(Float) return UnsafeMutableBufferPointer(start: pointer, count: count) } -public func arrayFromBuffer(buffer: MTLBuffer, start: Int = 0) -> Array { +/// Copy the contents of a Metal buffer to an array +public func arrayFromBuffer(buffer: MTLBuffer, start: Int = 0, count: Int? = nil) -> Array { let pointer = UnsafePointer(buffer.contents()) + start - let count = buffer.length / sizeof(Float) - start + let count = count ?? buffer.length / sizeof(Float) - start return Array(UnsafeBufferPointer(start: pointer, count: count)) } +/// Copy the contents of a Metal buffer to a ValueArray public func valueArrayFromBuffer(buffer: MTLBuffer, start: Int = 0, count: Int? = nil) -> ValueArray { let pointer = UnsafeMutablePointer(buffer.contents()) + start let count = count ?? buffer.length / sizeof(Float) - start @@ -28,6 +31,7 @@ public func valueArrayFromBuffer(buffer: MTLBuffer, start: Int = 0, count: Int? return array } +/// Copy a collection of values to a Metal buffer public func fillBuffer(buffer: MTLBuffer, start: Int, withElements elements: Collection) { let pointer = UnsafeMutablePointer(buffer.contents()) + start for (i, v) in elements.enumerate() {