Skip to content

Instantly share code, notes, and snippets.

@nicklockwood
Last active April 1, 2017 06:16
Show Gist options
  • Save nicklockwood/7dbc0d4834ef6ad5e30f to your computer and use it in GitHub Desktop.
Save nicklockwood/7dbc0d4834ef6ad5e30f to your computer and use it in GitHub Desktop.
Matrix math in Swift using Accelerate framework
import Accelerate
struct Matrix4 {
var m11: Float
var m12: Float
var m13: Float
var m14: Float
var m21: Float
var m22: Float
var m23: Float
var m24: Float
var m31: Float
var m32: Float
var m33: Float
var m34: Float
var m41: Float
var m42: Float
var m43: Float
var m44: Float
}
func *(var lhs: Matrix4, var rhs: Matrix4) -> Matrix4 {
var result = Matrix4.Identity
withUnsafePointer(&lhs) { ptr -> Void in
let a = unsafeBitCast(ptr, UnsafePointer<Float>.self)
withUnsafePointer(&rhs) { ptr -> Void in
let b = unsafeBitCast(ptr, UnsafePointer<Float>.self)
withUnsafePointer(&result) { ptr -> Void in
let c = unsafeBitCast(ptr, UnsafeMutablePointer<Float>.self)
vDSP_mmul(a, 1, b, 1, c, 1, 4, 4, 4)
}
}
}
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment