A techy weekend

So I’ve spent much of the weekend working on adding to VectorStorm’s shader support.  Enough that I’ve managed to implement dynamic shadow maps in MMORPG Tycoon 2.

This is all very early stuff, and I’m sure that I’m going to want to completely rework the mechanisms by which this works.  But I’m pretty pleased at having things which are recognisably shadows in the game!  (And interacting nicely with the grass effect, etc!)

This isn’t ready for prime time yet.  It’s still very, very glitchy, and is far too computationally expensive for what it is right now (because I’m rendering into a 2048×2048 shadow texture).  And I’m not even certain that I really want shadows for the visual style of the game.  But it’s nice to finally have VectorStorm supporting them!

Also, MMORPG Tycoon 2 is now using my de-facto VectorStorm library development trunk, which is over at Github.  Which means that if you want to see the changes under the hood, they’re all publicly visible right now;  no need to wait for me to port them back from the MT2 codebase to the VectorStorm trunk.  (Note that there are no testbeds or samples demonstrating anything using this;  it’s just source code for the rendering architecture, and therefore probably not of much interest to anyone)

Notable new stuff includes:

  • VectorStorm games can now implement custom frame drawing logic (defaults to old behaviour, if they don’t).
  • VectorStorm now supports offscreen render targets, for television screens, shadow buffers, and other purposes.  Render targets support multisampling buffers and depth-only targets, in addition to normal texture targets.
  • Games can now request individual scenes or groups of scenes be drawn into a special render target.
  • Games can now override the normal lit/unlit/textured/untextured shaders with their own custom shaders.
  • Game-provided vsShaders are now able to set uniform variables and otherwise set up their state, when they’re used.
  • vsImage can now read back texture data from a vsTexture object (even one inside a render target).