Last active
April 1, 2017 06:16
-
-
Save nicklockwood/7dbc0d4834ef6ad5e30f to your computer and use it in GitHub Desktop.
Matrix math in Swift using Accelerate framework
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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