Example usage for org.lwjgl.opengl GL20 glCompileShader

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

Introduction

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

Prototype

public static void glCompileShader(@NativeType("GLuint") int shader) 

Source Link

Document

Compiles a shader object.

Usage

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");
        }//w ww.  j  a  v  a2  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.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 compileShader(int type, String shaderCode) {

    int shaderId = GL20.glCreateShader(type);

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

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

    verifyCompile(shaderId);
}

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");
    }//from  w  w  w  . j  av  a2  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 compileShader(int type) {

    int shaderId = GL20.glCreateShader(type);

    StringBuilder shader = Shader.createShaderBuilder();

    if (type == GL20.GL_FRAGMENT_SHADER)
        shader.append(Shader.getIncludedFunctionsFragment()).append("\n");
    else//  w ww  .ja v  a2s .  co  m
        shader.append(Shader.getIncludedFunctionsVertex()).append("\n");

    String filename = title;

    if (type == GL20.GL_FRAGMENT_SHADER) {
        filename += "_frag.glsl";
    } else if (type == GL20.GL_VERTEX_SHADER) {
        filename += "_vert.glsl";
    }

    logger.debug("Loading shader {} ({}, type = {})", title, filename, String.valueOf(type));

    // Read in the shader code
    shader.append(readShader(filename));

    if (type == GL20.GL_FRAGMENT_SHADER) {
        fragmentProgram = shaderId;
    } else if (type == GL20.GL_VERTEX_SHADER) {
        vertexProgram = shaderId;
    }

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

    String error;
    if ((error = printLogInfo(shaderId)) != null) {
        JOptionPane.showMessageDialog(null,
                "Shader '" + title
                        + "' failed to compile. Terasology might not look quite as good as it should now...\n\n"
                        + error,
                "Shader compilation error", JOptionPane.ERROR_MESSAGE);
    }
}

From source file:ovh.tgrhavoc.gameengine.core.Shader.java

License:Open Source License

private void addProgram(String text, int type) {
    int shader = GL20.glCreateShader(type);
    if (shader == 0) {
        System.err.println("Could not find valid memory location when adding shader");
        System.exit(-1);//from  w w w.  j  ava 2 s .co m
    }

    GL20.glShaderSource(shader, text);
    GL20.glCompileShader(shader);

    if (GL20.glGetShaderi(shader, GL20.GL_COMPILE_STATUS) == 0) {
        System.err.println(GL20.glGetShaderInfoLog(shader, 1024));
        System.exit(-1);
    }

    GL20.glAttachShader(pointer, shader);
}

From source file:playn.java.JavaGL20.java

License:Apache License

@Override
public void glCompileShader(int shader) {
    GL20.glCompileShader(shader);
}

From source file:processing.lwjgl.PGL.java

License:Open Source License

public void compileShader(int id) {
    GL20.glCompileShader(id);
}

From source file:processing.opengl.PLWJGL.java

License:Open Source License

@Override
public void compileShader(int shader) {
    GL20.glCompileShader(shader);
}

From source file:renderEngine.ShaderProgram.java

/**
 * Loads the shader given its content and type.
 *
 * @param file The content of the shader file.
 * @param type The type of shader (lwjgl!).
 * @return The shader ID./*w ww . j a  v  a 2  s.  c  o m*/
 */
private static int loadShader(String file, int type) {
    StringBuilder shaderSource = new StringBuilder();

    try {
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while ((line = reader.readLine()) != null) {
            shaderSource.append(line).append("\n");
        }
        reader.close();
    } catch (IOException ex) {
        Logger.getLogger(ShaderProgram.class.getName()).log(Level.SEVERE, null, ex);
    }
    int shaderID = GL20.glCreateShader(type);
    GL20.glShaderSource(shaderID, shaderSource);
    GL20.glCompileShader(shaderID);
    if (GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
        System.out.println(GL20.GL_COMPILE_STATUS);
        System.out.println("Shader of type: " + type + " did not compile!");
    }
    return shaderID;

}

From source file:se.angergard.engine.graphics.ShaderProgram.java

License:Apache License

private ShaderProgram addShader(String code, int type) {
    int shader = GL20.glCreateShader(type);
    GL20.glShaderSource(shader, code);/*from w  w w. ja  v a 2  s.  c  o m*/
    GL20.glCompileShader(shader);

    if (type == GL20.GL_VERTEX_SHADER) {
        vertexShader = shader;
    }

    else if (type == GL20.GL_FRAGMENT_SHADER) {
        fragmentShader = shader;
    }

    else if (type == GL32.GL_GEOMETRY_SHADER) {
        geometryShader = shader;
    }

    String error = GL20.glGetShaderInfoLog(shader, GL20.GL_INFO_LOG_LENGTH);
    if (!error.equals("")) {
        System.out.println(error);
    }

    if (shader == -1) {
        System.err.println("Shader wasn't succsessfully created");
    }

    GL20.glAttachShader(program, shader);
    return this;
}