gouraudShader :: (PrimMonad m) => World (Vector3 Double) -> Transform (ModelSpace (Vector3 Double)) (World (Vector3 Double)) -> m (GouraudShader (PrimState m))
gouraudShader dir modelToWorld = do
    state <- MV.new 3
    return $ GouraudShader state dir modelToWorld
gouraudShader :: (PrimMonad m) => World (Vector3 Double) -> Transform (ModelSpace (Vector3 Double)) (World (Vector3 Double)) -> m (GouraudShader (PrimState m))
gouraudShader dir modelToWorld = do
    state <- MV.new 3
    return $ GouraudShader state dir modelToWorld
gouraudShader dir modelToWorld = do
    state <- MV.new 3
    return $ GouraudShader state dir modelToWorld