I'm going to start writing a 3D game in unmanaged C++ using the DirectX SDK. It's going to involve a lot of physics and math, though I can't predictably say how complex it's going to be (I don't know if I'll be parallelizing it, for example). I was thinking, due to F#'s incredibly awesome units of measure feature, and the fact that it's functional and therefore parallelizes nicely, that I could write an F# library for doing the math-intensive computations of the game. But:
pure
keyword in C++ maybe that disallows side effects or something?) -- and I suppose I could do without units of measure if I'm really careful (I know I'll only be using metric units).So is it worth it? Is mixing managed and unmanaged code a common-ish practice? What about for games? Would it be a bottleneck? Would it make my draw code horrifying and convoluted? If you opened a VC++ project and saw this happening--what would your face look like (:)
:(
D:
, etc)
Jumping from managed to unmanaged code, or from unmanaged to managed code for individual operations is costly and not worth it for single instance costly operations. That is, the managed to unmanaged, or unmanaged to managed cost in calling a matrix multiplication will be higher than the cost of the multiplication in the implementation native to your code, although batching operations helps.
For what you're discussing, using F# in this manner would not produce any noticable benefit. It should also be noted that you have several math libraries already available to you, such as XNAMath (which comes with the DXSDK) for basic graphical transforms.
On the physics end of things you should prefer to use a physics middleware solution (PhysX, Bullet, etc) as they are much more mature, well tested, and generally will simplify development in the long run. Writing your own physics implementation is not recommended except in the case of learning HOW to do it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With