Compatibility issues... Which systems will work with LWJGL?

Started by blue_tomato, February 14, 2005, 06:59:45

Previous topic - Next topic

blue_tomato

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...

elias

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

Chman

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

napier

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.
penGL/Java/LWJGL demos and code: http://potatoland.org/code/gl

Matzon

 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...

napier

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.
penGL/Java/LWJGL demos and code: http://potatoland.org/code/gl

Matzon

whatever the cause for the error, it shouldn't crash the vm - so either we f*cked up, or the ogl driver devs did

elias

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

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

napier

Okay, I'll track down a machine that has the problem and get more specifics.  I'll let you know what I find.
penGL/Java/LWJGL demos and code: http://potatoland.org/code/gl