Actually..... I remembered something form my reject pile. (Boy if people only knew the crazy stuff I experiment on in-between releases.)
The only way to inject images into a direct3d/ddraw application is to of course write a proxy (wrapper) dll. That is a lot of work though. Thankfully this one guy did it for us:
http://www.mikoweb.eu/index.php?node=28I can confirm that his dll does work with the 32 bit versions of mame quite well and yes, transparent pngs are supported!
I initially looked into this as a universal way to overlay data on a video game but eventually abandoned it because the dll doesn't work on 64 bit mame (which is unacceptable for my setup) and it doesn't work well in other emulators.
It works ok for mame though and you wouldn't have to give up hardware acceleration.
It has some quirks though.... in mame the drawing area is always square and always to the power of 2. So to display an image properly you have to create it with enough "white space" to make it fit right. You put the actual image in the top left corner and add white space to the nearest power....
Example:
Lets say your screen resolution is 1024x768.... 1024 is the big side and 1024 just happens to be a valid multiple, so we make a 1024, 1024 image and print our actual image in the top left corner.... we then load and display this modified image.
Lets say your screen resolution is 1600x900.... 1600 is the big side but 1600 isn't a good multiple for most video cards... we up it to 2048x2048 and again pu the actual image in the upper-left corner. It'll show up great.
So you might want to look into that... there are only three calls and it's easy to implement, but as you can imagine it isn't exactly practical for a full-fledged app due to all the funky image manipulation.