Example usage for org.lwjgl.opengl ARBShaderObjects glLinkProgramARB

List of usage examples for org.lwjgl.opengl ARBShaderObjects glLinkProgramARB

Introduction

In this page you can find the example usage for org.lwjgl.opengl ARBShaderObjects glLinkProgramARB.

Prototype

public static native void glLinkProgramARB(@NativeType("GLhandleARB") int programObj);

Source Link

Document

Links a program object.

Usage

From source file:com.a2client.corex.Shader.java

License:Open Source License

public Shader(String name, List<String> defines) {
    String defstr = "";
    for (String s : defines)
        defstr += s;//from  w  w w. j  av a 2  s. c om
    this.name = name + Const.EXT_SHADER + "*" + defstr;
    MyInputStream in = FileSys.getStream(name + Const.EXT_SHADER);
    Log.debug("load shader: " + name);
    Log.debug("defines: " + defines.toString());
    String DEFINE = "#define";

    String define_str = DEFINE;
    for (String s : defines) {
        define_str += " " + s + CRLF + DEFINE;
    }

    try {
        shaders.clear();
        String source = readStreamAsString(in);
        // vertex
        String csource = define_str + " VERTEX" + CRLF + source;
        attach(ARBVertexShader.GL_VERTEX_SHADER_ARB, csource);
        // fragment
        csource = define_str + " FRAGMENT" + CRLF + source;
        attach(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB, csource);
        // geometry
        if (source.contains("#ifdef GEOMETRY")) {
            csource = define_str + " GEOMETRY" + CRLF + source;
            attach(ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB, csource);
            // may be need fix
            ARBGetProgramBinary.glProgramParameteri(ID, ARBGeometryShader4.GL_GEOMETRY_VERTICES_OUT_ARB, 3);
            ARBGetProgramBinary.glProgramParameteri(ID, ARBGeometryShader4.GL_GEOMETRY_INPUT_TYPE_ARB,
                    GL11.GL_TRIANGLES);
            ARBGetProgramBinary.glProgramParameteri(ID, ARBGeometryShader4.GL_GEOMETRY_VERTICES_OUT_ARB,
                    GL11.GL_TRIANGLE_STRIP);
        }

        ID = ARBShaderObjects.glCreateProgramObjectARB();
        Log.debug("shader id: " + ID);
        for (int obj : shaders) {
            ARBShaderObjects.glAttachObjectARB(ID, obj);
        }

        ARBShaderObjects.glLinkProgramARB(ID);
        if (ARBShaderObjects.glGetObjectParameteriARB(ID,
                ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
            Log.error(getLogInfo(ID));
            ID = 0;
            return;
        }

        ARBShaderObjects.glValidateProgramARB(ID);
        if (ARBShaderObjects.glGetObjectParameteriARB(ID,
                ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
            Log.error(getLogInfo(ID));
            ID = 0;
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

From source file:com.ardor3d.scene.state.lwjgl.LwjglShaderObjectsStateUtil.java

License:Open Source License

protected static void sendToGL(final GLSLShaderObjectsState state, final ContextCapabilities caps) {
    if (state.getVertexShader() == null && state.getFragmentShader() == null) {
        logger.warning("Could not find shader resources!" + "(both inputbuffers are null)");
        state._needSendShader = false;//from   www  .j  a v a  2  s  . c  om
        return;
    }

    if (state._programID == -1) {
        state._programID = ARBShaderObjects.glCreateProgramObjectARB();
    }

    if (state.getVertexShader() != null) {
        if (state._vertexShaderID != -1) {
            removeVertShader(state);
        }

        state._vertexShaderID = ARBShaderObjects.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB);

        // Create the sources
        ARBShaderObjects.glShaderSourceARB(state._vertexShaderID, state.getVertexShader());

        // Compile the vertex shader
        final IntBuffer compiled = BufferUtils.createIntBuffer(1);
        ARBShaderObjects.glCompileShaderARB(state._vertexShaderID);
        ARBShaderObjects.glGetObjectParameterARB(state._vertexShaderID,
                ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled);
        checkProgramError(compiled, state._vertexShaderID, state._vertexShaderName);

        // Attach the program
        ARBShaderObjects.glAttachObjectARB(state._programID, state._vertexShaderID);
    } else if (state._vertexShaderID != -1) {
        removeVertShader(state);
        state._vertexShaderID = -1;
    }

    if (state.getFragmentShader() != null) {
        if (state._fragmentShaderID != -1) {
            removeFragShader(state);
        }

        state._fragmentShaderID = ARBShaderObjects
                .glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);

        // Create the sources
        ARBShaderObjects.glShaderSourceARB(state._fragmentShaderID, state.getFragmentShader());

        // Compile the fragment shader
        final IntBuffer compiled = BufferUtils.createIntBuffer(1);
        ARBShaderObjects.glCompileShaderARB(state._fragmentShaderID);
        ARBShaderObjects.glGetObjectParameterARB(state._fragmentShaderID,
                ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled);
        checkProgramError(compiled, state._fragmentShaderID, state._fragmentShaderName);

        // Attach the program
        ARBShaderObjects.glAttachObjectARB(state._programID, state._fragmentShaderID);
    } else if (state._fragmentShaderID != -1) {
        removeFragShader(state);
        state._fragmentShaderID = -1;
    }

    if (caps.isGeometryShader4Supported()) {
        if (state.getGeometryShader() != null) {
            if (state._geometryShaderID != -1) {
                removeGeomShader(state);
            }

            state._geometryShaderID = ARBShaderObjects
                    .glCreateShaderObjectARB(ARBGeometryShader4.GL_GEOMETRY_SHADER_ARB);

            // Create the sources
            ARBShaderObjects.glShaderSourceARB(state._geometryShaderID, state.getGeometryShader());

            // Compile the fragment shader
            final IntBuffer compiled = BufferUtils.createIntBuffer(1);
            ARBShaderObjects.glCompileShaderARB(state._geometryShaderID);
            ARBShaderObjects.glGetObjectParameterARB(state._geometryShaderID,
                    ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled);
            checkProgramError(compiled, state._geometryShaderID, state._geometryShaderName);

            // Attach the program
            ARBShaderObjects.glAttachObjectARB(state._programID, state._geometryShaderID);
        } else if (state._geometryShaderID != -1) {
            removeGeomShader(state);
            state._geometryShaderID = -1;
        }
    }

    if (caps.isTessellationShadersSupported()) {
        if (state.getTessellationControlShader() != null) {
            if (state._tessellationControlShaderID != -1) {
                removeTessControlShader(state);
            }

            state._tessellationControlShaderID = ARBShaderObjects
                    .glCreateShaderObjectARB(ARBTessellationShader.GL_TESS_CONTROL_SHADER);

            // Create the sources
            ARBShaderObjects.glShaderSourceARB(state._tessellationControlShaderID,
                    state.getTessellationControlShader());

            // Compile the tessellation control shader
            final IntBuffer compiled = BufferUtils.createIntBuffer(1);
            ARBShaderObjects.glCompileShaderARB(state._tessellationControlShaderID);
            ARBShaderObjects.glGetObjectParameterARB(state._tessellationControlShaderID,
                    ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled);
            checkProgramError(compiled, state._tessellationControlShaderID,
                    state._tessellationControlShaderName);

            // Attach the program
            ARBShaderObjects.glAttachObjectARB(state._programID, state._tessellationControlShaderID);
        } else if (state._tessellationControlShaderID != -1) {
            removeTessControlShader(state);
            state._tessellationControlShaderID = -1;
        }

        if (state.getTessellationEvaluationShader() != null) {
            if (state._tessellationEvaluationShaderID != -1) {
                removeTessEvalShader(state);
            }

            state._tessellationEvaluationShaderID = ARBShaderObjects
                    .glCreateShaderObjectARB(ARBTessellationShader.GL_TESS_CONTROL_SHADER);

            // Create the sources
            ARBShaderObjects.glShaderSourceARB(state._tessellationEvaluationShaderID,
                    state.getTessellationEvaluationShader());

            // Compile the tessellation control shader
            final IntBuffer compiled = BufferUtils.createIntBuffer(1);
            ARBShaderObjects.glCompileShaderARB(state._tessellationEvaluationShaderID);
            ARBShaderObjects.glGetObjectParameterARB(state._tessellationEvaluationShaderID,
                    ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, compiled);
            checkProgramError(compiled, state._tessellationEvaluationShaderID,
                    state._tessellationEvaluationShaderName);

            // Attach the program
            ARBShaderObjects.glAttachObjectARB(state._programID, state._tessellationEvaluationShaderID);
        } else if (state._tessellationEvaluationShaderID != -1) {
            removeTessEvalShader(state);
            state._tessellationEvaluationShaderID = -1;
        }
    }

    ARBShaderObjects.glLinkProgramARB(state._programID);
    checkLinkError(state._programID);
    state.setNeedsRefresh(true);
    state._needSendShader = false;
}

From source file:com.github.atomicblom.nullplayerexception.client.render.ShaderHelper.java

License:Open Source License

private static int createProgram(String vert, String frag) {
    int vertId = 0, fragId = 0, program;
    if (vert != null)
        vertId = createShader(vert, VERT);
    if (frag != null)
        fragId = createShader(frag, FRAG);

    program = ARBShaderObjects.glCreateProgramObjectARB();
    if (program == 0)
        return 0;

    if (vert != null)
        ARBShaderObjects.glAttachObjectARB(program, vertId);
    if (frag != null)
        ARBShaderObjects.glAttachObjectARB(program, fragId);

    ARBShaderObjects.glLinkProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        Logger.severe(getLogInfo(program));
        return 0;
    }/* w  w w . ja  v a2s . c o m*/

    ARBShaderObjects.glValidateProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        Logger.severe(getLogInfo(program));
        return 0;
    }

    return program;
}

From source file:com.runescape.client.revised.editor.modelviewer.Viewport.java

License:Open Source License

public boolean initShader() {
    int vertShader = 0, fragShader = 0;
    try {/*from ww w.  j  ava2 s  .c om*/
        vertShader = this.createShader("./shaders/screen.vert", ARBVertexShader.GL_VERTEX_SHADER_ARB);
        fragShader = this.createShader("./shaders/screen.frag", ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);
    } catch (final Exception exc) {
        exc.printStackTrace();
        return false;
    } finally {
        if ((vertShader == 0) || (fragShader == 0)) {
            return false;
        }
    }
    this.program = ARBShaderObjects.glCreateProgramObjectARB();
    if (this.program == 0) {
        return false;
    }
    ARBShaderObjects.glAttachObjectARB(this.program, vertShader);
    ARBShaderObjects.glAttachObjectARB(this.program, fragShader);
    ARBShaderObjects.glLinkProgramARB(this.program);
    if (ARBShaderObjects.glGetObjectParameteriARB(this.program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        System.err.println(this.getLogInfo(this.program));
        return false;
    }
    ARBShaderObjects.glValidateProgramARB(this.program);
    if (ARBShaderObjects.glGetObjectParameteriARB(this.program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        System.err.println(this.getLogInfo(this.program));
        return false;
    }
    return true;
}

From source file:com.wuest.prefab.Structures.Render.ShaderHelper.java

License:Open Source License

private static int createProgram(String vert, String frag) {
    int vertId = 0, fragId = 0, program;

    if (vert != null) {
        vertId = createShader(vert, VERT);
    }// w  w  w. j  ava 2  s  . c  o  m

    if (frag != null) {
        fragId = createShader(frag, FRAG);
    }

    program = ARBShaderObjects.glCreateProgramObjectARB();

    if (program == 0) {
        return 0;
    }

    if (vert != null) {
        ARBShaderObjects.glAttachObjectARB(program, vertId);
    }

    if (frag != null) {
        ARBShaderObjects.glAttachObjectARB(program, fragId);
    }

    ARBShaderObjects.glLinkProgramARB(program);

    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        return 0;
    }

    ARBShaderObjects.glValidateProgramARB(program);

    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        return 0;
    }

    return program;
}

From source file:de.sanandrew.mods.turretmod.client.util.ShaderHelper.java

License:Open Source License

private static int createProgram(ResourceLocation vert, ResourceLocation frag) {
    int vertId = 0;
    int fragId = 0;
    int program;//from   w w w  . j  av  a  2 s .  c  o m
    if (vert != null) {
        vertId = createShader(vert, VERT);
    }
    if (frag != null) {
        fragId = createShader(frag, FRAG);
    }

    program = ARBShaderObjects.glCreateProgramObjectARB();
    if (program == 0) {
        return 0;
    }

    if (vert != null) {
        ARBShaderObjects.glAttachObjectARB(program, vertId);
    }
    if (frag != null) {
        ARBShaderObjects.glAttachObjectARB(program, fragId);
    }

    ARBShaderObjects.glLinkProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        TmrConstants.LOG.log(Level.ERROR, getLogInfo(program));
        return 0;
    }

    ARBShaderObjects.glValidateProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        TmrConstants.LOG.log(Level.ERROR, getLogInfo(program));
        return 0;
    }

    return program;
}

From source file:elucent.roots.render.ShaderHandler.java

License:Open Source License

private static int createProgram(String vert, String frag) {
    int vertId = 0, fragId = 0;
    if (vert != null)
        vertId = createShader(vert, VERT_ST);
    if (frag != null)
        fragId = createShader(frag, FRAG_ST);

    int program = ARBShaderObjects.glCreateProgramObjectARB();
    if (program == 0)
        return 0;

    if (vert != null)
        ARBShaderObjects.glAttachObjectARB(program, vertId);
    if (frag != null)
        ARBShaderObjects.glAttachObjectARB(program, fragId);

    ARBShaderObjects.glLinkProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        FMLLog.log(Level.ERROR, getLogInfo(program));
        return 0;
    }//from  ww  w  .j  a  va 2  s  .  c om

    ARBShaderObjects.glValidateProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        FMLLog.log(Level.ERROR, getLogInfo(program));
        return 0;
    }

    return program;
}

From source file:flash.display.Shader.java

License:Open Source License

protected void compileShader() {
    System.out.println("Compiling shader ...");
    final String vertexShader = vertexShader();
    final String fragmentShader = fragmentShader();

    System.out.println("Vertex shader:");
    System.out.println(vertexShader);
    System.out.println("Fragment shader:");
    System.out.println(fragmentShader);

    _vertexShaderId = ARBShaderObjects.glCreateShaderObjectARB(ARBVertexShader.GL_VERTEX_SHADER_ARB);
    ARBShaderObjects.glShaderSourceARB(_vertexShaderId, vertexShader);
    ARBShaderObjects.glCompileShaderARB(_vertexShaderId);
    System.out.println("VertexShader Info: " + ARBShaderObjects.glGetInfoLogARB(_vertexShaderId, 8192));

    _fragmentShaderId = ARBShaderObjects.glCreateShaderObjectARB(ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);
    ARBShaderObjects.glShaderSourceARB(_fragmentShaderId, fragmentShader);
    ARBShaderObjects.glCompileShaderARB(_fragmentShaderId);
    System.out.println("FragmentShader Info: " + ARBShaderObjects.glGetInfoLogARB(_fragmentShaderId, 8192));

    _programId = ARBShaderObjects.glCreateProgramObjectARB();
    ARBShaderObjects.glAttachObjectARB(_programId, _vertexShaderId);
    ARBShaderObjects.glAttachObjectARB(_programId, _fragmentShaderId);
    ARBShaderObjects.glLinkProgramARB(_programId);
    System.out.println("Program Info: " + ARBShaderObjects.glGetInfoLogARB(_programId, 8192));
}

From source file:fox.spiteful.ridiculous.client.shaders.ShaderHelper.java

License:Creative Commons License

private static int createProgram(String vert, String frag) {
    int vertId = 0, fragId = 0, program = 0;
    if (vert != null)
        vertId = createShader(vert, VERT);
    if (frag != null)
        fragId = createShader(frag, FRAG);
    program = ARBShaderObjects.glCreateProgramObjectARB();
    if (program == 0)
        return 0;
    if (vert != null)
        ARBShaderObjects.glAttachObjectARB(program, vertId);
    if (frag != null)
        ARBShaderObjects.glAttachObjectARB(program, fragId);
    ARBShaderObjects.glLinkProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        FMLLog.log(Level.ERROR, getLogInfo(program));
        return 0;
    }//from w w  w  . j  a v a 2 s . co m
    ARBShaderObjects.glValidateProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        FMLLog.log(Level.ERROR, getLogInfo(program));
        return 0;
    }
    return program;
}

From source file:game.map.Shader.java

public Shader() {
    int vertShader = 0, fragShader = 0;

    try {/*from  ww  w  . ja  va2  s.co  m*/
        vertShader = createShader("src/Terrain/shaders/screen.vert", ARBVertexShader.GL_VERTEX_SHADER_ARB);
        fragShader = createShader("src/Terrain/shaders/screen.frag", ARBFragmentShader.GL_FRAGMENT_SHADER_ARB);
    } catch (Exception exc) {
        exc.printStackTrace();
        return;
    } finally {
        if (vertShader == 0 || fragShader == 0)
            return;
    }

    program = ARBShaderObjects.glCreateProgramObjectARB();

    if (program == 0)
        return;

    /*
    * if the vertex and fragment shaders setup sucessfully,
    * attach them to the shader program, link the sahder program
    * (into the GL context I suppose), and validate
    */
    ARBShaderObjects.glAttachObjectARB(program, vertShader);
    ARBShaderObjects.glAttachObjectARB(program, fragShader);

    ARBShaderObjects.glLinkProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE) {
        System.err.println(getLogInfo(program));
        return;
    }

    ARBShaderObjects.glValidateProgramARB(program);
    if (ARBShaderObjects.glGetObjectParameteriARB(program,
            ARBShaderObjects.GL_OBJECT_VALIDATE_STATUS_ARB) == GL11.GL_FALSE) {
        System.err.println(getLogInfo(program));
        return;
    }

    useShader = true;
}