module Physics.ODE.Rotation
    ( createMatrix3
    , setIdentity
    , fromAxisAndAngle
    , fromEulerAngles
--    , rToQ
    , peekMatrix3
    ) where

import Foreign

import Physics.ODE.Types
import Physics.ODE.Hsc

createMatrix3 :: IO Matrix3
createMatrix3 = do matrix <- mallocBytes sizeOfMatrix3
                   setIdentity matrix
                   return matrix

foreign import ccall unsafe "dRSetIdentity" setIdentity :: Matrix3 -> IO ()
foreign import ccall unsafe "dRFromAxisAndAngle" fromAxisAndAngle
    :: Matrix3 -> ODEreal -> ODEreal -> ODEreal -> ODEreal -> IO ()
foreign import ccall unsafe "dRFromEulerAngles" fromEulerAngles
    :: Matrix3 -> ODEreal -> ODEreal -> ODEreal -> IO ()

{-foreign import ccall unsafe "dRtoQ" dRtoQ
    :: Matrix3 -> Ptr ODEreal -> IO ()

rToQ :: Matrix3 -> IO Quaternion
rToQ matrix
    = allocaArray 4 $ \ptr ->
      do dRtoQ matrix ptr
         [a,b,c,d] <- peekArray 4 ptr
         return (a,b,c,d) -}


peekMatrix3 :: Matrix3 -> IO [ODEreal]
peekMatrix3 = peekArray (3*4)