Jump to content
  • Advertisement
Sign in to follow this  
Muhammad Haggag

[C++] Overlay sample

This topic is 2713 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

A lot of people seem interested in knowing how to render content over full-screen applications, like XFire and Co, judging by the number of posts about it. Here’s an unmanaged overlaying sample. Visual Studio 2003 and 2005 solutions are included. The sample uses DirectDraw overlays to render a black 256x64 box to the top-left of the screen, with some text in it. I would’ve shown you a screenshot, but I can’t, due to the way overlays work. Overlays are displayed as the device is painting the monitor from the primary surface. If it’s painting a location where an overlay exists, it paints the monitor with its color instead of the primary surface. Consequently, you can’t capture that in an image. Back to the sample. The files of interest are: Overlay.cpp: Window creation (auto-generated, nothing interesting) and the main loop (important). overlay_renderer.h, overlay_renderer.cpp: The core of the sample. The code is fairly self-explanatory, though. One important thing to keep in mind is that overlay support comes with a set of limitations. The following limitations are not checked or accounted for in the sample: dwAlignBoundarySrc dwAlignSizeSrc dwAlignBoundaryDest dwAlignSizeDest dwAlignStrideAlign dwMinOverlayStretch dwMaxOverlayStretch The limitations are hardware-dependent. For example, my X300 doesn’t impose any alignment restrictions for the source or destination overlay rectangles. In a product, however, you’d want to make sure you check for these and abide by them. Use CapsViewer to find out the limitations of your hardware quickly. I don’t know if the October SDK caps database includes DirectDraw caps or not, but consider checking it out. The limitations (and overlays in general) are documented under “DirectDraw->DirectDraw Essentials->Surfaces->Overlay Surfaces” in the DX7 documentation. It’s available at icarusIndie. I might write a managed port, if someone’s interested. All feedback’s welcome.

Share this post


Link to post
Share on other sites
Advertisement
You could always inject your own drawing code into the program (at runtime). However it would be a lot of work and you'd have to redo it for every game and probably whenever the binary changes.

Share this post


Link to post
Share on other sites
Wasn't there a sample in one of the older DXSDK's that showed how to do this (mosquito)?


Too bad D3D won't allow you to use the hardware overlay surface as a render target or as the front buffer in a swap chain.

What would be the best way to render 3D over the desktop? I'm guessing you'd have to render to a surface that you could lock, then copy the bits from surface to a locked DDraw overlay surface using the CPU? Ick!

I think you could actually do this all in hdwe on DX7 since the render target was a DDraw surface?

Share this post


Link to post
Share on other sites
Quote:
Original post by don
Wasn't there a sample in one of the older DXSDK's that showed how to do this (mosquito)?

Yes, I've used that sample's documentation as a reference long ago - I couldn't find the sample itself anymore (and I didn't want to download the whole SDK).

Quote:
What would be the best way to render 3D over the desktop? I'm guessing you'd have to render to a surface that you could lock, then copy the bits from surface to a locked DDraw overlay surface using the CPU? Ick!

That's how I've done it a while ago - I rendered using D3D8, locked the target surface, copied the bits to a ddraw surface and presented to only the bits that had the desktop background color.

Quote:
I think you could actually do this all in hdwe on DX7 since the render target was a DDraw surface?

I seem to recall I looked into this a bit, and it seemed possible, but I didn't bother. I went down the ActiveDesktop + ActiveX control route.

Share this post


Link to post
Share on other sites
Hi,

I am trying to find a solution for a similar overlay problem. But, I am unable to open the link you have given in your post. Can you please send this zip to me ? [email="prachi_bhadekar@persistent.co.in%20?I"]I[/email] would appreciate it.Thanks a ton!



A lot of people seem interested in knowing how to render content over full-screen applications, like XFire and Co, judging by the number of posts about it. Here’s an unmanaged overlaying sample. Visual Studio 2003 and 2005 solutions are included.The sample uses DirectDraw overlays to render a black 256x64 box to the top-left of the screen, with some text in it. I would’ve shown you a screenshot, but I can’t, due to the way overlays work. Overlays are displayed as the device is painting the monitor from the primary surface. If it’s painting a location where an overlay exists, it paints the monitor with its color instead of the primary surface. Consequently, you can’t capture that in an image.Back to the sample. The files of interest are:Overlay.cpp: Window creation (auto-generated, nothing interesting) and the main loop (important).overlay_renderer.h, overlay_renderer.cpp: The core of the sample. The code is fairly self-explanatory, though.One important thing to keep in mind is that overlay support comes with a set of limitations. The following limitations are not checked or accounted for in the sample:dwAlignBoundarySrcdwAlignSizeSrcdwAlignBoundaryDestdwAlignSizeDestdwAlignStrideAlign dwMinOverlayStretch dwMaxOverlayStretchThe limitations are hardware-dependent. For example, my X300 doesn’t impose any alignment restrictions for the source or destination overlay rectangles. In a product, however, you’d want to make sure you check for these and abide by them. Use CapsViewer to find out the limitations of your hardware quickly. I don’t know if the October SDK caps database includes DirectDraw caps or not, but consider checking it out.The limitations (and overlays in general) are documented under “DirectDraw->DirectDraw Essentials->Surfaces->Overlay Surfaces” in the DX7 documentation. It’s available at icarusIndie.I might write a managed port, if someone’s interested. All feedback’s welcome.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!