Since a new TV3D 6.5 Beta version has been released a couple of days ago, most of my samples are rendered obsolete by the changes. Also, I found a number of “good practices” for TV3D apps recently, which I want to reflect in all my samples.
Entire list of the improvements I want to make after the jump.
- Landscape Instantiation Breaking Change : Some of them used “new TVLandscape”, which is not possible anymore with the new betas; you have to use Scene.CreateLandscape().
- New Built-In Functions : Most of them (like the Water Shader) would need a refresh because there are a lot of new facilities like built-in oblique depth projection culling and new HLSL semantics.
- Minimize COM Calls In Mainloop : I recently discovered that COM calls are very expensive to make if done every loop. Sometimes rewriting TV methods in the application code can save dozens of FPS, at least when not building in C++ with static libraries.
- Modular, Independant TV3D Objects Usage : EagleEye in the beta forums pointed out a very clean way to manage TV3D objects in a modular and independant fashion. Since most of them are singletons, they should be newed where they need to be used, and no need to pass them between types, or have a common static/shared type to hold them.
- Implementation of Tom Miller’s .NET MDX Mainloop : Bye-bye DoEvents!
- “Last-Frame Buffer” Fullscreen Shaders : I used to think that rendering the scene to a TVRenderSurface is mandatory and “the right thing” when wanting to use fullscreen shaders, but when working with bloom, I found out a much better way. It involves working with the last-frame’s buffer, but uses the mainbuffer for rendering. The result is a much more natural rendering loop and FSAA support.