Rewrite Engine



an Application Framework

Languages /  Libraries Used: C++, OpenGL, GLSL
Team Size: Individual
Personal Role: Everything
Development Time:  June, 2011 - November, 2011 (put on hold)

Description: Around the time I moved to Buffalo to start my first internship I realized that while I'd written a lot of code over the years for my own personal projects, I didn't have a lot of actual projects to show for all of my work. I did some reflecting and realized that it all boiled down to a running joke that a friend and I had been making about the way I write programs since middle-school: I rewrite everything. With the exception of a few flukes (VolTex, mRay, Orbital and a couple others) I am (was) incapable of finishing a project of nearly any scope due to my own need to obsessively edit and redo functionality until I got it perfect in my eyes. Having come to grips with that, I decided that with no one I knew nearby in Buffalo and hours to myself every night, what better way to spend my nights alone than to take all the code I had rewritten over the years and work it into it's own application framework I could use to productively develop projects from that point forward.

So that's what I did. To keep things relevant and in the scope of what I'd like to accomplish I'm also planning to develop some reference applications with the framework as I go. Sort of like a running meta-checklist of all the things I'd need to complete an application. As I develop one of these things, I look at what I need to do and look to see if I've written it anywhere before, and if that code was any good. If I did and it is, I add it to the project almost verbatim (adding / changing namespaces and conventions where appropriate). Otherwise I implement it in scratch...once. 


Rewrite is in it's infantile stages at the moment, and as such is not feature complete in any scope at all. That being said it has certainly grown above and beyond the realm of simply joining chunks of pre-written code together as it was initially envisioned. Right now I'm focusing on fundamentals of 3D graphics, which as a new domain to me doesn't really fall too heavily under the "things I've written before" category. Things like camera abstractions, texture loading/saving/manipulation, vertex formats etc. are all being written for the first or second time depending on whether or not I got to work with that subject on one of my previous projects. The first reference app I am currently working on is a simple 3D first-person demo aimed at showcasing the camera, VAO/VBO/Index Buffers, texturing and basic shading. It currently looks like this:
I'd like to clean up this implementation a bit more, but all in all this reference application does most of what I wanted it to do. It proves that the rendering engine works, and that I can properly create a window on Windows (theoretically any platform, but testing that is for a rainy day).

I see this page evolving a lot over the coming months. Right now the above reference application is all I have to showcase Rewrite. I have a few other projects planned, with distinct goals and features, some should look familiar to anyone who has viewed my projects page:

  1. 2D accelerated platform demo: Prove that 2D rendering is efficient and can be used to create a small space simulator restricted to the XY Axis.
  2. Advanced Volume Renderer: Prove that arbitrary projects can be created and can successfully utilize the general framework provided by Rewrite for things such as Ray marching, volumetric textures, 3D noise algorithms and advanced lighting.
  3. Procedural Tree Generator: Implement a generalized L-System framework for creating pseudo-randomly generated flora based on recursively defined and rewritten (!!!) grammars.