I've built a 2D graphics engine. While I'm currently fixing the tileset editor, the engine itself has been functional since last summer. The engine was coded from the ground up in C++, and has been optimized to such a degree that I've been able to batchrender 10000 50x50 images on the screen at once at 640x480 resolution with 64 FPS - that was with LDR postprocessing and a motionblur shader applied. You do not get more efficient that this.
I've set up an animation engine and a GUI (admittedly most of the code should probably be overhauled, but it works
), so you can quickly and easiely have the engine roll through multiple images as an animation, or have it use UV coords and stick the animation in a single texture, oldschool style; its also got position, color, scaling, rotation, and flash animations. The engine is designed to accomadate an image based game (like sidescrolling), and also includes a stupidly fast tileset rendering object. The tileset has a built in format letting you instantly save or load a tileset to a file. The tileset can use UV coordinates on an arbitrary number of textures, allowing you to combine multiple tilesets. Every single image in the game also has a custom stateblock option, which lets you do practically anything to the rendering states before a given image is rendered. Not only that but I let you do HDR (or LDR) postprocessing using your own shader code which basically lets you do anything.
In other words, this thing is powerful
, even if it might not be the easiest thing on the planet to use.
</shameless self promotion>
This wasn't easy, by the way