Search code examples
glslshaderjoglopengl-3jvm-crash

Jogl crashing in the shader initialization, at the glLinkProgram


We got a new notebook with an Nvidia 880m

it came with win8.1, we installed the 7 x64

Trying to execute jogl, java is crashing

http://pastebin.com/gv6117NK

it crashes when glLinkProgram is called

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j jogamp.opengl.gl4.GL4bcImpl.dispatch_glLinkProgram1(IJ)V+0
j jogamp.opengl.gl4.GL4bcImpl.glLinkProgram(I)V+46
j javax.media.opengl.DebugGL4bc.glLinkProgram(I)V+9
j glsl.GLSLProgramObject.initializeProgram(Ljavax/media/opengl/GL3;Z)V+113

I am creating the shader using some code that I wrote in past, it always worked and I never got problems, so I am afraid it has something to do with the nvidia opengl driver..

I am initializing the program in this way

public final void initializeProgram(GL3 gl3, boolean cleanUp) {
    _progId = gl3.glCreateProgram();

    for (int i = 0; i < _vertexShaders.size(); i++) {
        gl3.glAttachShader(_progId, _vertexShaders.get(i));
    }

    for (int i = 0; i < _fragmentShaders.size(); i++) {
        gl3.glAttachShader(_progId, _fragmentShaders.get(i));
    }

    gl3.glLinkProgram(_progId);

    int[] params = new int[]{0};
    gl3.glGetProgramiv(_progId, GL3.GL_LINK_STATUS, params, 0);

    if (params[0] != 1) {

        System.err.println("link status: " + params[0]);
        gl3.glGetProgramiv(_progId, GL3.GL_INFO_LOG_LENGTH, params, 0);
        System.err.println("log length: " + params[0]);

        byte[] abInfoLog = new byte[params[0]];
        gl3.glGetProgramInfoLog(_progId, params[0], params, 0, abInfoLog, 0);
        System.err.println(new String(abInfoLog));
    }

    gl3.glValidateProgram(_progId);

    if (cleanUp) {
        for (int i = 0; i < _vertexShaders.size(); i++) {
            gl3.glDetachShader(_progId, _vertexShaders.get(i));
            gl3.glDeleteShader(_vertexShaders.get(i));
        }

        for (int i = 0; i < _fragmentShaders.size(); i++) {
            gl3.glDetachShader(_progId, _fragmentShaders.get(i));
            gl3.glDeleteShader(_fragmentShaders.get(i));
        }
    }
}

Any tips?

Both 337 and 340 drivers fail


Solution

  • As jmaasing suggested, I had to force the use of the dedicated graphic card

    I also had to add "C:\Program Files\Internet Explorer" to the path for the IEShims.dll and update the retail win7 to the sp1 and various updates