Tuesday 7 February 2012

Another project takes flight

Goodness, a whole year has passed without a word. Until recently this was also the case with any form of code. I am now however spending most evenings working on something not entirely unrelated to the project. The progress I am making with it is very rewarding and I am programming with passion again. Let me talk about it for a moment...
For a long time I've been thinking about the virtual circuits project, as I hope this blog illustrates, but I have come to find it too hard to work on due to its size. I'm sure I would progress gradually, but it seems to have petered (yet) out again. Along-side this, a second great interest has occupied me with almost equal power, a secondary project idea I have invested a massive amount of thought cycles to over the years; that of procedurally generated worlds. Now without going into it too much at this stage I decided to start prototyping it up and found myself making some significant progress, even re-using some of the virtual circuits codebase I had already laid down. I wouldn't describe this second project as a new direction; it is more a parallel track as there are overlaps and similarities. In fact, I have come to realise that working of this new technology is going to stand me in good stead for tackling the bigger project that now lies underneath on the pile. The following strikes me:
  • As I am re-using some of the tech, any work on developing that will benefit both projects.
  • The dataflow paradigm is something they both share, all-be-it with some subtle differences, such that development of the model, views and tools is largely transferrable.
  • The procedural worlds would be a great test case for the virtual circuits as I envision them being the most powerful way to 'run' the world functionally.
Based on this assumption, I am going to roll the new project into the remit of this blog. It seems like a good idea to keep focussed on a single blog for both rather than start a separate one. In fact, the overlaps between them would just be a pain across two blogs.
So, what have I been busy on? So far I have set up a very basic native DirectX based render system supporting multiple viewports, cameras, scenes, layers, and bodies, with proper resize, device reset, and threading support. This serves as the raw engine into which procedural graphics synthesizers feed meshes, and eventually textures, materials, and more. I have an initial implementation of the synthesis system with multiple synthesizers running on separate threads, the start of an operator library, and data driven procedure definitions. All this is hosted within a managed WPF test app to provide simple viewport/camera/catalogue and textual (XML) procedure editing. Using a system called a Network Bonded Hierarchy I was developing for the VICE project to communicate between the engine and editor the managed-native interop has be reduced to three pinvoke functions. All that’s probably a lot to take in at once; and I hope to expand on this in future posts. For now, though I’ll leave you with a screen shot using just a cube operator and few other basic logic and maths operators to create an interesting recursive shape.