func (m Matrix) GPU() GPUMatrix {
	return GPUMatrix{
		{m[0][0], m[1][0], m[2][0], 0},
		{m[0][1], m[1][1], m[2][1], 0},
		{m[0][2], m[1][2], m[2][2], 0},
	}
}
GPU returns a GPUMatrix version of the matrix.
package plane
import "github.com/cozely/cozely/coord"
type Matrix [3][3]float32
func (m Matrix) Transpose() Matrix {
	return Matrix{
		{m[0][0], m[1][0], m[2][0]},
		{m[0][1], m[1][1], m[2][1]},
		{m[0][2], m[1][2], m[2][2]},
	}
}
func (m Matrix) Times(o Matrix) Matrix {
	return Matrix{
		{
			m[0][0]*o[0][0] + m[1][0]*o[0][1] + m[2][0]*o[0][2],
			m[0][1]*o[0][0] + m[1][1]*o[0][1] + m[2][1]*o[0][2],
			m[0][2]*o[0][0] + m[1][2]*o[0][1] + m[2][2]*o[0][2],
		},
		{
			m[0][0]*o[1][0] + m[1][0]*o[1][1] + m[2][0]*o[1][2],
			m[0][1]*o[1][0] + m[1][1]*o[1][1] + m[2][1]*o[1][2],
			m[0][2]*o[1][0] + m[1][2]*o[1][1] + m[2][2]*o[1][2],
		},
		{
			m[0][0]*o[2][0] + m[1][0]*o[2][1] + m[2][0]*o[2][2],
			m[0][1]*o[2][0] + m[1][1]*o[2][1] + m[2][1]*o[2][2],
			m[0][2]*o[2][0] + m[1][2]*o[2][1] + m[2][2]*o[2][2],
		},
	}
}
func (m Matrix) Translation() coord.XY {
	return coord.XY{m[2][0], m[2][1]}
}
func (m Matrix) WithoutTranslation() Matrix {
	m[2][0] = 0
	m[2][1] = 0
	return m
}
type GPUMatrix [3][4]float32