I think the first option is the best, the game should adapt the images to the user resolution, I'll try that!
d3dxsprite can handle this for drawing your sprites.
but you'll want to implement a device independant screen coordinate system for your calls to draw sprites and text.
you define a virtual 10000 x 10000 screen coordinate system.
you store the current resolution the user is running at: screen_w, screen_h.
then you have a set of routines to convert from virtual to screen coords and back:
screen_x = virt_x * screen_w / 10000.
screen_y = virt_y * screen_h / 10000.
virt_x = screen_x * 10000 / screen_w.
virt_y = screen_y * 10000 / screen_h.
so to put text at the middle of the screen you say text(5000,5000,"hello world!");
and your text routine converts 5000,5000 to screen coords, and your text appears in the middle of the screen at all resolutions.
you do likewise for the x,y and scale for sprites, and your entire 2d graphics system will be device independent and will work with any resolution up to 10000 x 10000 that the user's hardware can run.
note that d3dxfont creates fonts at one size and can't scale them on the fly. if you use it, you'll want to recreate fonts at new sizes when the resolution changes, so the text stays the same size all the time.
also note that d3dxfonts are SLOW!
an alternative to d3dxfonts it to make your own set of font textures in a paint program, then simply display them like any other sprite. MUCH faster. and since they're a sprite, they will be automatically device independent along with the rest of the engine.
"DirectX is like a belt fed machine gun, where every texture change is like hand loading in a new belt of ammo. worse, every mesh (vb) is a new belt of ammo, and a texture is like breaking the gun down, and setting it up again elsewhere, then loading it, then spraying triangles again. so you want to setup the gun once, string all your belts together, load it once, then just spray."
Rockland Software Productions
"Building PC games since 1988"