JDK-6638747 : D3D: Flickering during resize on some Vista systems
Type:Bug
Component:client-libs
Sub-Component:2d
Affected Version:6u10
Priority:P3
Status:Closed
Resolution:Fixed
OS:windows_vista
CPU:x86
Submitted:2007-12-07
Updated:2011-03-30
Resolved:2008-01-08
The Version table provides details related to the release that this issue/RFE will be addressed.
Unresolved : Release in which this issue/RFE will be addressed. Resolved: Release in which this issue/RFE has been resolved. Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.
EVALUATION
This problem had been partially addressed before in this bug:
6600226: D3D: Repainting Issues while resizing a Swing application
The work around used in that bug was to check if the size of
the component changed and don't do the flip if it was.
However it is not enough since the size of the window
may change after our check and before we do the flip.
So instead I propose to check this right before the Present
in the native code. Since Present is executed on the toolkit
thread the window's size couldn't be changed between our check
and call to Present.
So if we detect that the window size changed we
just don't do Present. This is OK since there is another paint
even coming which will repaint the newly exposed area.
In order to limit performance impact we will only enable
the work around on Windows Vista.
This may also need to be revisited later if we decide to
change the way we create backbuffers for swap chains.
Currenlty we create them the size of the window instead of
the client area.