You gave me an idea. There could be a function to set the render target, then all calls to draw_ functions after that will be rendered to the render target.

Something like this:
You can pass a BMAP* to it as the render target, or NULL for no render target.
 Code:
draw_target(BMAP*);


How about it?