Clipped Children Causing Flashing
An application that is under development uses Qt for its GUI and OpenGL for the rendering engine.
The basic setup of the application is that there is a GUI thread and a rendering thread. Window layout is below:
Main Wnd -|
Container Wnd -|
| Panel Wnd 1
| Panel Wnd 2
Container Wnd -|
GL Render Wnd
On GUI thread, there is a main container window that has two child siblings. The idea here is that the siblings are panels that move in and out based on user input into the system (i.e. the user selects the next page and that page slides in while sliding the other one out).
There is not anything special on the render thread. It basically setups the basics for OpenGL in a window and does the rendering there.
Issue we are seeing is that as the panel slides from left to right, moving the current panel into the area of the rendering frame, the DC seems to be getting corrupted and flashes the OpenGL area. We eventually thought this was a Qt issue, so I created a simple test to validate that this was not. I even moved the rendering from being a separate thread to the GUI thread, but the issue is still there.
I am surprised that with clip children and clip siblings is on the issue is present. I would have thought that with those flags on that the area outside of the container window would clip the children and not affect the rendering area. We see this issue with Aero on and sometimes when Aero is off. Below is a screen grab of what the issue looks like with the simple application I have created. The black area is corrupted area of the current panel that is being shifted. Another surprising thing about this is that I also created the sample to test DirectX. The issue is not present there. I am including the source to the sample and also including the executables.
Has anyone seen this and been able to work around this issue or know what the issue may be? I do not think that Microsoft is going to be very helpful, but it worth a shot there too.