Low Level Windows Graphics Question- Desktop HUD

Post your questions, suggestions and experiences regarding to Image manipulation, 3d modeling and level editing for the Irrlicht engine here.
Post Reply
Rob3
Posts: 1
Joined: Tue Sep 28, 2010 7:18 pm
Location: Dallas, TX

Low Level Windows Graphics Question- Desktop HUD

Post by Rob3 »

Hi Guys,

This is Not specifically an Irrlicht question, but it is the kind of question an Irrlicht developer might be able to answer.

The problem is this (and no, it's not a homework problem, or anything like it): On a frame-by-frame basis, overlay the Windows (xp through 7) desktop with an image coming from another application, but combine them using a custom composting algorithm. This should be able to display over any standard window (web browser, word processor, anything non-video for now).

Notes: First- yes, I am aware of windows Layered Windows- their alpha blending does not do what I need. I have written the blending function I need.

Second- I have already tried various screen-shot and screen-cast techniques- grabbing a bmp of the screen, editing it, and redisplaying will (quite predictably) create unacceptable degrees of flicker. Hiding the real desktop has a similar issue, as does hiding and re-displaying the overlay image.

Third- making use of DirectX, OGL, Direct3d, Direct2d, DirectShow or other OS standards is 100% ok. Talking to NVIDIA and ATI/AMD drivers directly is allowed only if potentially reproducible on any modern card (allowing for using different versions for different cards).

Anybody have any thoughts?

Best,
Rob
slavik262
Posts: 753
Joined: Sun Nov 22, 2009 9:25 pm
Location: Wisconsin, USA

Re: Low Level Windows Graphics Question- Desktop HUD

Post by slavik262 »

Windows doesn't work on a frame-by-frame basis. It only updates portions of the screen at any one time. Basically, when a Window changes (be it an actual window or a GUI element; if you're not familiar with Windows programming, every element is technically also a window in and of itself), its space on the screen is invalidated and a WM_DRAW message is sent to it.

Put simply, Windows doesn't re-draw the entire screen every frame. It only redraws bits at a time, which would make taking a screenshot and editing it the best option.

On that note,
Rob3 wrote:Second- I have already tried various screen-shot and screen-cast techniques- grabbing a bmp of the screen, editing it, and redisplaying will (quite predictably) create unacceptable degrees of flicker. Hiding the real desktop has a similar issue, as does hiding and re-displaying the overlay image.
It wouldn't flicker if you do your edit on a back buffer before posting it to the screen, as opposed to editing the screen image directly.
Post Reply