OpenGL requires the transformation matrix to be the transpose of what it would normally be.
I made two bugs when implementing this that canceled each other out.
I am slowly pushing the transpose issue further down into the code until there will be only one transpose when handing the value over to OpenGL.
Doing it in one go lead to lots of issues that were virtually impossible to solve
I believe the actual matrix functions are now working as they should be however all this code depends on them being the transpose of the true value.
I don't understand why any of this works but somehow it does.