Posted by khe
on June 2, 2008 at 4:44 AM PDT
I'm working on a java2D-based game environment for windows. The application is installed on a number of identical, dedicated laptop computers. No other applications are running on these machines and the user can only interact with them through a joystick and a power switch. After a couple of weeks, a few of these machines have started to behave strangely. The double-buffering has stopped to work in games using the drawLine() method. Note that it has been working fine for two weeks (>10 hours of playing) and then suddenly the behaviour changes. The machine has only been used for playing during this period and the games have not been updated.
By comparing the ghost image of the original installation we have found that the following registry value has changed from 2 to 0:
HKEY_CURRENT_USER\Software\JavaSoft\Java2D\1.6.0_04\Drivers\.DISPLAY1 ATI MOBILITY RADEON HD 2600\32\d3dCapsValidity
If we change it back, the problem disappears.
What is this d3dCapsValidity used for? Why does it change suddenly? Is there any way (except from manually editing the registry) to force java to use the original setting? One way around would be to stop using drawLine(), but it is possible that there are problems with other drawing primitives as well. I'm grateful for input on this problem.