Example usage for org.lwjgl.opengl GL20 GL_VERTEX_SHADER

List of usage examples for org.lwjgl.opengl GL20 GL_VERTEX_SHADER

Introduction

In this page you can find the example usage for org.lwjgl.opengl GL20 GL_VERTEX_SHADER.

Prototype

int GL_VERTEX_SHADER

To view the source code for org.lwjgl.opengl GL20 GL_VERTEX_SHADER.

Click Source Link

Document

Accepted by the type argument of CreateShader and returned by the params parameter of GetShaderiv.

Usage

From source file:org.jogamp.glg2d.impl.shader.AbstractShaderPipeline.java

License:Apache License

protected void attachShaders() {
    if (vertexShaderFileName != null) {
        vertexShaderId = compileShader(GL20.GL_VERTEX_SHADER, getClass(), vertexShaderFileName);
        GL20.glAttachShader(programId, vertexShaderId);
    }//from   w  ww.j a v  a  2  s  .  com

    if (geometryShaderFileName != null) {
        geometryShaderId = compileShader(GL32.GL_GEOMETRY_SHADER, getClass(), geometryShaderFileName);
        GL20.glAttachShader(programId, geometryShaderId);
    }

    if (fragmentShaderFileName != null) {
        fragmentShaderId = compileShader(GL20.GL_FRAGMENT_SHADER, getClass(), fragmentShaderFileName);
        GL20.glAttachShader(programId, fragmentShaderId);
    }
}

From source file:org.spout.engine.renderer.shader.ClientShader.java

License:Open Source License

private void doCompileShader(String vsource, String fsource) {
    if (((Client) Spout.getEngine()).getRenderMode() == RenderMode.GL11) {
        return;//from   w w  w. ja v  a  2  s .c  o  m
    }

    //Create a new Shader object on the GPU
    program = GL20.glCreateProgram();

    int vShader = ShaderHelper.compileShader(vsource, GL20.GL_VERTEX_SHADER);
    GL20.glAttachShader(program, vShader);

    int fShader = ShaderHelper.compileShader(fsource, GL20.GL_FRAGMENT_SHADER);
    GL20.glAttachShader(program, fShader);

    GL20.glLinkProgram(program);

    int status = GL20.glGetProgram(program, GL20.GL_LINK_STATUS);
    if (status != GL11.GL_TRUE) {
        String error = GL20.glGetProgramInfoLog(program, 255);
        throw new ShaderCompileException("Link Error: " + error);
    }
    if (validateShader) {
        GL20.glValidateProgram(this.program);
        if (GL20.glGetProgram(program, GL20.GL_VALIDATE_STATUS) != GL11.GL_TRUE) {
            String info = GL20.glGetProgramInfoLog(program, 255);
            System.out.println("Validate Log: \n" + info);
        }

        System.out.println("Attached Shaders: " + GL20.glGetProgram(program, GL20.GL_ATTACHED_SHADERS));
        int activeAttributes = GL20.glGetProgram(program, GL20.GL_ACTIVE_ATTRIBUTES);
        System.out.println("Active Attributes: " + activeAttributes);
        int maxAttributeLength = GL20.glGetProgram(program, GL20.GL_ACTIVE_ATTRIBUTE_MAX_LENGTH);
        for (int i = 0; i < activeAttributes; i++) {
            System.out.println("\t" + GL20.glGetActiveAttrib(program, i, maxAttributeLength));
        }

        int activeUniforms = GL20.glGetProgram(program, GL20.GL_ACTIVE_UNIFORMS);
        System.out.println("Active Uniforms: " + activeUniforms);
        int maxUniformLength = GL20.glGetProgram(program, GL20.GL_ACTIVE_UNIFORM_MAX_LENGTH);
        for (int i = 0; i < activeUniforms; i++) {
            System.out.println("\t" + GL20.glGetActiveUniform(program, i, maxUniformLength));
        }
    }
    System.out.println("Compiled Shader with id: " + program);
}

From source file:org.terasology.rendering.assets.GLSLShaderProgramInstance.java

License:Apache License

private void compileShaderProgram(int featureHash) {
    compileShader(GL20.GL_FRAGMENT_SHADER, featureHash);
    compileShader(GL20.GL_VERTEX_SHADER, featureHash);

    int shaderProgram = GL20.glCreateProgram();
    shaderPrograms.put(featureHash, shaderProgram);

    GL20.glAttachShader(shaderProgram, fragmentPrograms.get(featureHash));
    GL20.glAttachShader(shaderProgram, vertexPrograms.get(featureHash));
    GL20.glLinkProgram(shaderProgram);/*from  ww w .j a  v a  2 s .  co m*/
    GL20.glValidateProgram(shaderProgram);
}

From source file:org.terasology.rendering.assets.GLSLShaderProgramInstance.java

License:Apache License

private void compileShader(int type, int featureHash) {
    int shaderId = GL20.glCreateShader(type);
    StringBuilder shader = createShaderBuilder();

    // Add the activated features for this shader
    for (int i = 0; i < ShaderProgramFeatures.FEATURE_ALL.ordinal(); ++i) {
        if ((ShaderProgramFeatures.values()[i].getValue() & featureHash) > 0) {
            shader.append("#define ").append(ShaderProgramFeatures.values()[i].name()).append("\n");
        }/*www .j  a v  a  2  s  .  co m*/
    }

    shader.append("\n");

    shader.append(includedDefines);
    shader.append(includedUniforms);

    if (type == GL20.GL_FRAGMENT_SHADER) {
        shader.append(includedFunctionsFragment).append("\n");
    } else {
        shader.append(includedFunctionsVertex).append("\n");
    }

    if (type == GL20.GL_FRAGMENT_SHADER) {
        shader.append(shaderProgramBase.getFragShader());
    } else if (type == GL20.GL_VERTEX_SHADER) {
        shader.append(shaderProgramBase.getVertShader());
    }

    String debugShaderType = "UNKNOWN";
    if (type == GL20.GL_FRAGMENT_SHADER) {
        fragmentPrograms.put(featureHash, shaderId);
        debugShaderType = "FRAGMENT";
    } else if (type == GL20.GL_VERTEX_SHADER) {
        vertexPrograms.put(featureHash, shaderId);
        debugShaderType = "VERTEX";
    }

    // Dump all final shader sources to the log directory
    try {
        final String strippedTitle = shaderProgramBase.getTitle().replace(":", "");

        File file = new File(PathManager.getInstance().getLogPath(),
                debugShaderType.toLowerCase() + "_" + strippedTitle + "_" + featureHash + ".glsl");
        FileWriter fileWriter = new FileWriter(file);

        BufferedWriter out = new BufferedWriter(fileWriter);

        out.write(shader.toString());

        out.close();
    } catch (Exception e) {
        logger.error("Failed to dump shader source.");
    }

    GL20.glShaderSource(shaderId, shader.toString());
    GL20.glCompileShader(shaderId);

    StringBuilder error = new StringBuilder();
    boolean success = printLogInfo(shaderId, error);

    String errorLine = "";
    if (error.length() > 0) {
        try {
            Pattern p = Pattern.compile("-?\\d+");
            Matcher m = p.matcher(error.toString());

            int counter = 0;
            while (m.find()) {
                if (counter++ % 2 == 1) {
                    int lineNumberInt = Integer.valueOf(m.group());

                    Scanner reader = new Scanner(shader.toString());
                    for (int i = 0; i < lineNumberInt - 1; ++i) {
                        reader.nextLine();
                    }

                    errorLine = reader.nextLine();
                    errorLine = "Error prone line: '" + errorLine + "'";

                    logger.warn("{}", error);
                    logger.warn("{}", errorLine);

                    break;
                }
            }

        } catch (Exception e) {
            // Do nothing...
        }
    }

    if (!success) {
        String errorMessage = debugShaderType + " Shader '" + shaderProgramBase.getTitle()
                + "' failed to compile. Terasology might not look quite as good as it should now...\n\n" + error
                + "\n\n" + errorLine;

        logger.error("{}", errorMessage);
        JOptionPane.showMessageDialog(null, errorMessage, "Shader compilation error",
                JOptionPane.ERROR_MESSAGE);
    }
}

From source file:org.terasology.rendering.assets.MaterialShader.java

License:Apache License

private void compileShaderProgram() {
    String finalVert = ShaderProgram.createShaderBuilder().append(IncludedFunctionsVertex).append('\n')
            .append(vertShader).toString();
    String finalFrag = ShaderProgram.createShaderBuilder().append(IncludedFunctionsFragment).append('\n')
            .append(fragShader).toString();

    valid = true;/*from   w  w w  .  ja v a  2s.  co m*/
    compileShader(GL20.GL_FRAGMENT_SHADER, finalFrag);
    compileShader(GL20.GL_VERTEX_SHADER, finalVert);
}

From source file:org.terasology.rendering.assets.MaterialShader.java

License:Apache License

private void compileShader(int type, String shaderCode) {

    int shaderId = GL20.glCreateShader(type);

    if (type == GL20.GL_FRAGMENT_SHADER) {
        fragmentProgram = shaderId;//ww  w. j a  v a 2s .  c  o m
    } else if (type == GL20.GL_VERTEX_SHADER) {
        vertexProgram = shaderId;
    }

    GL20.glShaderSource(shaderId, shaderCode);
    GL20.glCompileShader(shaderId);

    verifyCompile(shaderId);
}

From source file:org.terasology.rendering.assets.Shader.java

License:Apache License

private void compileShaderProgram() {
    String finalVert = createShaderBuilder().append(IncludedFunctionsVertex).append('\n').append(vertShader)
            .toString();/*from  w  w w  .  j a v a2 s  .c  o  m*/
    String finalFrag = createShaderBuilder().append(IncludedFunctionsFragment).append('\n').append(fragShader)
            .toString();

    valid = true;
    compileShader(GL20.GL_FRAGMENT_SHADER, finalFrag);
    compileShader(GL20.GL_VERTEX_SHADER, finalVert);
}

From source file:org.terasology.rendering.opengl.GLSLShader.java

License:Apache License

private void compileShaders(Set<ShaderProgramFeature> features) {
    compileShader(GL20.GL_FRAGMENT_SHADER, features);
    compileShader(GL20.GL_VERTEX_SHADER, features);
}

From source file:org.terasology.rendering.opengl.GLSLShader.java

License:Apache License

private void compileShader(int type, Set<ShaderProgramFeature> features) {
    int shaderId = GL20.glCreateShader(type);
    StringBuilder shader = createShaderBuilder();

    // Add the activated features for this shader
    for (ShaderProgramFeature feature : features) {
        shader.append("#define ").append(feature.name()).append("\n");
    }/*w  w w .j a v  a  2 s. c o  m*/

    shader.append("\n");

    shader.append(includedDefines);
    shader.append(includedUniforms);

    if (type == GL20.GL_FRAGMENT_SHADER) {
        shader.append(includedFunctionsFragment).append("\n");
    } else {
        shader.append(includedFunctionsVertex).append("\n");
    }

    if (type == GL20.GL_FRAGMENT_SHADER) {
        shader.append(shaderProgramBase.getFragmentProgram());
    } else if (type == GL20.GL_VERTEX_SHADER) {
        shader.append(shaderProgramBase.getVertexProgram());
    }

    String debugShaderType = "UNKNOWN";
    int featureHash = ShaderProgramFeature.getBitset(features);
    if (type == GL20.GL_FRAGMENT_SHADER) {
        fragmentPrograms.put(featureHash, shaderId);
        debugShaderType = "FRAGMENT";
    } else if (type == GL20.GL_VERTEX_SHADER) {
        vertexPrograms.put(featureHash, shaderId);
        debugShaderType = "VERTEX";
    }

    // Dump all final shader sources to the log directory
    final String strippedTitle = getURI().toString().replace(":", "-");

    Path path = PathManager.getInstance().getShaderLogPath()
            .resolve(debugShaderType.toLowerCase() + "_" + strippedTitle + "_" + featureHash + ".glsl");
    try (BufferedWriter writer = Files.newBufferedWriter(path, TerasologyConstants.CHARSET)) {
        writer.write(shader.toString());
    } catch (IOException e) {
        logger.error("Failed to dump shader source.");
    }

    GL20.glShaderSource(shaderId, shader.toString());
    GL20.glCompileShader(shaderId);

    StringBuilder error = new StringBuilder();
    boolean success = printLogInfo(shaderId, error);

    String errorLine = "";
    if (error.length() > 0) {
        try {
            Pattern p = Pattern.compile("-?\\d+");
            Matcher m = p.matcher(error.toString());

            int counter = 0;
            while (m.find()) {
                if (counter++ % 2 == 1) {
                    int lineNumberInt = Integer.valueOf(m.group());

                    try (Scanner reader = new Scanner(shader.toString())) {
                        for (int i = 0; i < lineNumberInt - 1; ++i) {
                            reader.nextLine();
                        }

                        errorLine = reader.nextLine();
                        errorLine = "Error prone line: '" + errorLine + "'";

                        logger.warn("{} \n Line: {}", error, errorLine);
                    }
                    break;
                }
            }

        } catch (Exception e) {
            logger.error("Error parsing shader compile error: {}", error, e);
        }
    }

    if (!success) {
        String errorMessage = debugShaderType + " Shader '" + getURI()
                + "' failed to compile. Terasology might not look quite as good as it should now...\n\n" + error
                + "\n\n" + errorLine;

        logger.error(errorMessage);
        JOptionPane.showMessageDialog(null, errorMessage, "Shader compilation error",
                JOptionPane.ERROR_MESSAGE);
    }
}

From source file:org.terasology.rendering.shader.ShaderProgram.java

License:Apache License

private void compileShaderProgram() {
    compileShader(GL20.GL_FRAGMENT_SHADER);
    compileShader(GL20.GL_VERTEX_SHADER);

    shaderProgram = GL20.glCreateProgram();

    GL20.glAttachShader(shaderProgram, fragmentProgram);
    GL20.glAttachShader(shaderProgram, vertexProgram);
    GL20.glLinkProgram(shaderProgram);// ww  w  . j  a v  a2 s .c om
    GL20.glValidateProgram(shaderProgram);
}