After releasing my new game (Illuminati from www.ninjasoftware.com) it turns out quite a few PCs are not able to initialize the display.
I asked the users complaining about this to try other games written with LWJGL too, to make sure it is not just a problem in my game, and it turns out they do not work either.
But their computers have 3D cards, and should be openGL compatible. They have the latest display drivers, directX and Windows XP. I have bundled a JVM with the game that I know will work.
So, why is it still not working? Are there any known compatibility issues with the LWJGL? Any systems known not to work, so I can omit them from the compatibility list?
Thanks...
It would be helpful with the exception thrown from Display.create and the system specs (esp. the gfx card). We don't have a list of incompatible gfx cards, but anything that can run Q3 should be able to run LWJGL.
- elias
LWJGL runs great on every computers I've tested when the drivers are correctly installed.
The only problem you could see is the Java version... On some computers, it seems that running LWJGL with Java 1.4.2_5 and 1.4.2_6 is impossible (makes the VM crash).
Chman
Does anybody have reliable, tested code to initialize the Display? I'm using code that I hacked from the lwjgl demos but I also find that initialization fails on many machines that are 3D capable.
In two cases (win2000 PCs) I resolved the problem just by changing the color depth from 24 to 32 in Control Panel (see post on Jan 11 2005: http://lwjgl.org/forum/viewtopic.php?t=882&highlight= ).
I assume I'm doing something wrong, and would love to see robust code for Display init.
protected boolean setDisplayMode() {
// get modes
DisplayMode[] dm = org.lwjgl.util.Display.getAvailableDisplayModes(640, 480, -1, -1, -1, -1, 60, 60);
try {
org.lwjgl.util.Display.setDisplayMode(dm, new String[] {
"width=" + 640,
"height=" + 480,
"freq=" + 60,
"bpp=" + org.lwjgl.opengl.Display.getDisplayMode().getBitsPerPixel()
});
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
} seems to work fine...
Thanks for that.
I'm calling Display.create() directly because I need a 24 bit depth buffer and it looks like setDisplayMode() uses a default PixelFormat. That may be part of the problem. I do this:
// Set display mode:
// first try values from config file, if no luck then try a few others
try {
if ( (DM = getDisplayMode(displayWidth, displayHeight, displayColorBits, displayFrequency)) == null) {
if ( (DM = getDisplayMode(1024, 768, 32, 60)) == null) {
if ( (DM = getDisplayMode(1024, 768, 16, 60)) == null) {
if ( (DM = getDisplayMode(800, 600, 16, 60)) == null) {
System.out.println("GLApp.initDisplay(): Can't find a compatible Display Mode!!!");
}
}
}
}
System.out.println("GLApp.initDisplay(): Setting display mode to " + DM);
Display.setDisplayMode(DM);
}
catch (Exception exception) {
System.err.println("GLApp.initDisplay(): Failed to create display: " + exception);
}
// Initialize the Window
try {
Display.create(new PixelFormat(0, 24, 0)); // !!CRASH!! (set bits per buffer: alpha, depth, stencil)
Display.setTitle(windowTitle);
Display.setFullscreen(fullScreen);
Display.setVSyncEnabled(true);
System.out.println("GLApp.initDisplay(): Created OpenGL window.");
}
catch (Exception exception1) {
System.err.println("GLApp.initDisplay(): Failed to create OpenGL window: " + exception1);
System.exit(1);
}
The crash happens in Display.create(new PixelFormat...). On some machines I get an exception that I can recover from (org.lwjgl.LWJGLException: This application requires a greater depth buffer depth). But on three others (win2000) I get "Unexpected Signal:EXCEPTION_ACCESS_VIOLATION" inside Display.create().
These machines can definitely handle opengl (at least one card was a GeForce 4 64 MB). Could it be that the graphics card can't handle a 24 bit depth buffer?
I appreciate any clues. Sorry I don't have more specifics but this problem has always arised in demo situations where I couldn't comfortably debug.
whatever the cause for the error, it shouldn't crash the vm - so either we f*cked up, or the ogl driver devs did
You generally can't get a 24 bit depth buffer if the current color depth is lower than that (16 bit). I'd be interesting to know more about the systems that native crash (as Matzon said, it could very well be a LWJGL bug). What are the exact specs of those? Do they have the latest drivers? What LWJGL version are you using?
- elias
If possible, try any other OpenGL application (Another Game, JOGL demos or whatever) to give us further hints as to where the problem is.
- elias
Okay, I'll track down a machine that has the problem and get more specifics. I'll let you know what I find.