I have been working independently on “Tracer” a 3D/game engine in Direct3D11, used by a user interface project “Cyborg” which is geared towards advanced and efficient 3D user interaction with potential real world applications in various interaction contexts. More particularly, I have always felt that GUIs have been lacking, and that the next step of UIs should be more graph based and able exploit more dimensions of both interactivity and visualisation in a way that power users can get much more leverage and productivity from.
My project is still in early days from a usability perspective, however, much of the time has been spent on developing Tracer, the 3D/UI engine, where I have worked on various subsystems:
- Geometry tracking and submission
- Shader and Texture management systems
- A scenegraph with a dynamic component system
- A messaging system
- Widget/UI system (with signals/slots, hierarchy, relative coordinate spaces etc)
- Low-level memory management and optimisations:
- Smart pointer types and resource tracking/reloading systems
- Custom allocators and memory pools
- Memory representation e.g. alignment
- Validity/interop/checking/separation of vertex/formats/shaders
- Font reading, and efficient text rendering
- User input, picking, widget translation
- Integration of physics (bullet physics) for rigid body dynamics
- Performance profiling
- Logging and assertion systems
As a result, my C++ skills, particularly in the area of templates, and the new C++11 features have improved. A negative result of this is that whenever you get to the next “level” of understanding, a lot of your existing code (which you were proud of not too long ago) suddenly looks less impressive. This happened to me a few times during the course of this project, to the point where large segments of the existing codebase of a few months ago were basically rewritten again in a matter of days or weeks (I got faster, and started using some of the more modern C++ features and idioms).
But since most of my work has been in engine development, and not in the app that uses the engine, I don’t have much to visually show at the moment (Screenshots, Video). This choice of writing an engine might seem like a mistake in the software world where you don’t reinvent the wheel, but I approached this froma learning perspective, and I’m glad I did it. I didn’t want to simply use a high level engine while being clueless to what is running under the hood, and I was afraid thats where I would end up in terms of understanding if I went directly for the off-the-shelf/managed/wrapper route. I don’t assert this view for everyone, as different people have different goals.
I have also been contributing on StackOverflow to keep my skills broad and sharp, for a bit of variety, and to maintain a rough idea of what is trending in the tech world.