I've created a simple software rendering engine for my own purposes, and it seems like a good time to release a beta version of it. This is basically a single unit that provides a double buffered panel, sprite management, and easy drawing functions.

I've only tested this on Lazarus/FPC, but it should work just fine with Delphi (Should. I don't have Delphi, sorry). By default, I only included PNG/BMP images allowed to be loaded by the engine itself, so if you're on delphi without PNG support, make sure you change the Soft unit.

I have included a simple Lazarus project to show the basics of how the engine works. Basically, you load sprites, the Soft engine creates an object, and it returns an integer. You can access the object array of sprites directly, of course (just like with the canvas, etc.)

I designed this engine for extreme ease of use, in my opinion. You tell the engine to create sprites, all you have to keep track of is integers. The engine handles collisions (currently bounding box only) and provides a few methods you can override to your liking (The drawing and "step" functions). The step functions of all objects are called before the object is drawn, so you can perform movement calculations and have the latest update drawn.

As I'm still a novice, I've got a little list here:
Todo (what I can do):
  • Particle system (would be quite basic)
  • Depth
  • Make 'File format not supported' more specific
  • Change gravity and x/yspeed to use deltatime
  • Mouse handling


Need help on:
  • Dirty rectangles (where only the part of the screen that has changed is redrawn)
  • Transparent BMPs
  • Terminating application from Soft unit
  • Opacity
  • Full Screen
  • Text drawing (On Windows Vista, this was a rectangle. Linux, this seemed fine.)
  • Freeing resources


If you'd be so kind as to help, I'd be quite grateful
** As noted in the todo, deltatime is not yet used, so if a machine is running at a different FPS, the game will play slower/faster. I added a way to set the FPS, but this, of course, does not guarantee the FPS will stay constant.

The Soft engine should take care of everything in terms of creating an environment to draw on. If you look at the uses clause of the unit, you'll see a description of why certain units are needed. Currently, the engine creates a TPanel on whatever parent is passed to it, and it creates a timer as well and bitmap for double buffering. I could have probably made it so that it would access the parent's canvas directly (assuming there was one), but this method seems to be rather failsafe.

License: BSD
(Sorry, no screenshots. It's a 10kb download, so I hope you'll still try it )
Tested on Ubuntu 9.04 and Windows Vista. (Should work on all other versions of Windows, distros of Linux, and Mac OS)
Download:
Mirror 1
Mirror 2

PS: I've yet to create a game with my own framework. I'd like to improve the collisions, get transparent BMPs, opacity, and text to work properly before I attempt to create anything with it.