Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Issues With Windows 7 Aero and DirectX

12 views
Skip to first unread message

Marner, Io Interactive@discussions.microsoft.com Jacob Marner, Io Interactive

unread,
Mar 23, 2010, 9:16:01 AM3/23/10
to
Issues With Windows 7 Aero and Cross-Server Parent-Child Windows using DirectX

First a description of our setup. We have 2 processes, one is a native win32
application (an engine for a game), the other is a .NET application (which is
a content editing tool for game production). The win32 application creates a
window which is the target of our DirectX renderer. The .NET application has
a control which is set-up as parent of this window in order to embed the
rendered window inside our application. We have some forwarding of mouse and
keyboard messages in place so as to make this a seamless integration from the
point-of-view of the user. So far, it has worked fine.

However, as we have started upgrading workstations to Windows 7, we have
found an issue with the Windows 7 Aero Theme and our setup. At times, usually
when the DirectX pipeline is very busy, we will experience that our .NET
application becomes unresponsive. This will persist until the win32
application is killed or the theme is changed to a non-Aero theme.

If we modify our applications so that our win32 DirectX-target window is no
longer a child of the .NET application control, this issue goes away. However
this causes us to lose the integration between the windows, which is a
feature our users would like to keep.

We found a solution where we move the win32 window off-screen, remove the
parent-child relationship, and use PrintWindow/WM_PRINT to copy the contents
to a window in the other application. This works on Windows 7 Aero, and only
Windows 7 Aero. On any other OS or Windows 7 with Aero not enabled, we are
not able to use PrintWindow to copy the contents of our DirectX window.
However, this is fine as we can determine the OS / Theme and then use the
appropriate method.

Unfortunately, using PrintWindow has rather a heavy impact on the framerate
of our renderer. So we have two questions:

a) Is it known issue that having cross-process window hierarchies involving
DirectX (in the child window) can cause unresponsiveness in other (in this
case parent) windows? Are there any known work-arounds to this?
b) Is there any way to use PrintWindow in a non-performance degrading way?
Is there a less performance impacting alternative way to copy the contents of
an offscreen window to a device context?

0 new messages