List of usage examples for org.lwjgl.opengl GL20 glCompileShader
public static void glCompileShader(@NativeType("GLuint") int shader)
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; }