Quote:
Originally posted by sberlin It's actually because the setting of openGL got inserted into the gui's Main class. It'll be removed in a few hours. |
I just noted that a few minutes ago and I was about to write about it. It's a bad idea to force a system property hardcoded in the code. I did not notice this addition in Main.java until one hour ago, when I commented it out in Main.java, and recompiled.
Now LimeWire works again perfectly without it (of course I have removed the forced property set on the command line in "run.bat", which was also added).
I think that these system properties, if they are needed, should be set manually by users, in their VM settings. However, given that LimeWire on Windows ships with its own VM instanciation program (limewire.exe) and that I doubt it will read and inherit from system properties that have been parametered in the Java Control Panel, may be we could (on Windows at least where the LimeWire.exe runner is used) enhance the LimeWire.exe launcher to get system properties from global Java settings on that machine (this would allow using the standard Java Control Panel to set such properties if needed).
This is too much an advanced setting, which may be useful only on platform that have problems with DirectX drivers, and that can be solved by setting Java2D to use OpenGL instead.
My display board is a Radeon Mobile 9600, a quite recent one, with the most up-to-date drivers certified compatible with Windows XP SP2 and DirectX 9c, and with much hardware support for OpenGL operations. However, OpenGL support in display drivers is often much less tested today. I think there may be a problem within my display driver for its support of OpenGL, or bad assumptions about OpenGL capabilities within the OpenGL support libraries of Java.
I have just tested a few OpenGL apps on my system, and found no such problems, so the problem seems specific to Java2D's use of OpenGL on Windows. So I think that the bug is within the so-called "OpenGL pipeline" managed internally by Java2D. Visibly, not all OpenGL operations made by Java2D are not properly pipelined, and Java2D suffers various synchronization issues with asynchronous OpenGL operations performed by hardware, even if the pipeline is used to serialize these operations in a single internal Java2D thread.