Ok, I just had to be sure you weren't one of
those people (though in a place like this it seems hard). I don't want to be involved in no flame war.
But for the sake of the argument,
I want to draw images directly for these reasons:
Every API I've seen so far seems to have a texture/image/surface class that can be used to blit to the screen, however not every API uses a sprite class.
This engine is setup in two distinct parts the "BackStage" modules and the "ForStage" module, the backstage part may refer to "ForStage" objects in a vague manner (e.g. void *). They are intensionally vague so preprocessors for any backstage object becomes unnecessary. Since the API objects are unmixed and no API-specific objects are used in the backstage, it makes for cleaner code.
The ForStage module uses every object, though this makes "messy" code easy, it limits all the preprocessors and pointer casts to module.
Arguably using vague types can make way to easy segfaults, but I believe this can be prevented with a little bit of labeling.
The ForStage module is used in a way so that no API information needs to be used with the backstage objects. The backstage objects may call any forstage function as necessary.
The ForStage functions takes whatever information is necessary to draw a sprite, string or other. By using references, the weight of these calls can be limited.
Also in the future I may make it so the engine is more plugin based, in hopes that'll be more universal.