Example usage for org.lwjgl.opengl GL20 glCreateShader

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

Introduction

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

Prototype

@NativeType("GLuint")
public static int glCreateShader(@NativeType("GLenum") int type) 

Source Link

Document

Creates 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");
        }/*from www . j  a  v  a2  s .  c om*/
    }

    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  .java2  s .  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.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  ww . j  a  v  a  2 s  .c om*/

    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  w w. j a  va  2s.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);/*  w  w  w  .  j av  a  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 int glCreateShader(int type) {
    return GL20.glCreateShader(type);
}

From source file:processing.opengl.PLWJGL.java

License:Open Source License

@Override
public int createShader(int type) {
    return GL20.glCreateShader(type);
}

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.//from ww  w.ja  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   www  . j a v a  2s  .  c  om*/
    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;
}

From source file:thebounzer.org.lwgldemo.glutils.GenericShader.java

License:Open Source License

public GenericShader(String shader, int type) {
    shaderFile = new File(shader);
    sourceFileName = shaderFile.getName();
    BufferedReader reader = null;
    shaderId = GL20.glCreateShader(type);
    try {//from w w w .  jav  a 2  s.  co  m
        reader = new BufferedReader(new FileReader(shaderFile));
        String line;
        while ((line = reader.readLine()) != null) {
            shaderSource.append(line).append("\n");
        }
    } catch (IOException e) {
        logger.log(Level.SEVERE, "Unable to load shader from:{0}", shaderFile.getAbsolutePath());
    } finally {
        IOUtils.closeQuietly(reader);
    }
}