Login  Register

Re: JOGL Shader VM Crash

Posted by Itun on Mar 20, 2011; 11:15pm
URL: https://forum.jogamp.org/JOGL-Shader-VM-Crash-tp2638696p2707654.html

Are you sure that your shader is running right?
Try to catch shader link and compile errors.
        IntBuffer params = Buffers.newDirectIntBuffer(1);
        gl.glGetObjectParameterivARB(vertexShaderObject, GL2.GL_COMPILE_STATUS, params);
        IntBuffer fragmentShaderObjectParams = Buffers.newDirectIntBuffer(1);
        gl.glGetObjectParameterivARB(fragmentShaderObject, GL2.GL_COMPILE_STATUS, fragmentShaderObjectParams);
        if (params.get(0) == 0 || fragmentShaderObjectParams.get(0) == 0) {
            ByteBuffer LogBuffer = ByteBuffer.allocate(10000);
            if (params.get(0) == 0 && fragmentShaderObjectParams.get(0) == 0) {
                gl.glGetShaderInfoLog(vertexShaderObject, 10000, shaderLength, LogBuffer);
            } else if (params.get(0) == 0) {
                gl.glGetShaderInfoLog(vertexShaderObject, 10000, shaderLength, LogBuffer);
            } else if (fragmentShaderObjectParams.get(0) == 0) {
                gl.glGetShaderInfoLog(vertexShaderObject, 10000, shaderLength, LogBuffer);
            }
            gl.glGetShaderInfoLog(vertexShaderObject, 10000, shaderLength, LogBuffer);
            String Log;
            try {
                Log = new String(LogBuffer.array(), "UTF-8");
            } catch (UnsupportedEncodingException ex) {
                Log = new String(LogBuffer.array());
                Logger.getLogger(Shader.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println(Log);
        } else {
            ProgramObject = gl.glCreateProgram();
            gl.glAttachShader(ProgramObject, vertexShaderObject);
            gl.glAttachShader(ProgramObject, fragmentShaderObject);
            gl.glLinkProgram(ProgramObject);
            IntBuffer linked = Buffers.newDirectIntBuffer(1);
            gl.glGetProgramiv(ProgramObject, GL2.GL_LINK_STATUS, linked);
            if (linked.get(0) == 0) {
                ByteBuffer LogBuffer = ByteBuffer.allocate(10000);
                gl.glGetShaderInfoLog(ProgramObject, 10000, shaderLength, LogBuffer);
                String Log;
                try {
                    Log = new String(LogBuffer.array(), "UTF-8");
                } catch (UnsupportedEncodingException ex) {
                    Log = new String(LogBuffer.array());
                    Logger.getLogger(Shader.class.getName()).log(Level.SEVERE, null, ex);
                }
                ProgramObject = 0;
                System.out.println(Log);
          }
And Are you sure that it is shader?
Try to debug code to the string where VM crushes.