public void updateShaderSourceData(ShaderSource source) { int id = source.getId(); if (id == -1) { id = gl.glCreateShader(convertShaderType(source.getType())); if (id <= 0) { throw new RendererException("Invalid ID received when trying to create shader."); source.setId(id); } else { throw new RendererException("Cannot recompile shader source"); String language = source.getLanguage(); if (source.getType() == ShaderType.Fragment) { stringBuf.append("#define ").append(source.getType().name().toUpperCase()).append("_SHADER 1\n"); stringBuf.append(source.getDefines()); stringBuf.append(source.getSource()); if (infoLog != null) { logger.log(Level.WARNING, "{0} compiled successfully, compiler warnings: \n{1}", new Object[]{source.getName(), infoLog}); } else { logger.log(Level.FINE, "{0} compiled successfully.", source.getName()); source.clearUpdateNeeded(); } else { logger.log(Level.WARNING, "Bad compile of:\n{0}",
public void deleteShaderSource(ShaderSource source) { if (source.getId() < 0) { logger.warning("Shader source is not uploaded to GPU, cannot delete."); return; } source.clearUpdateNeeded(); gl.glDeleteShader(source.getId()); source.resetObject(); }
/** * Adds source code to a certain pipeline. * * @param type The pipeline to control * @param source The shader source code (in GLSL). * @param defines Preprocessor defines (placed at the beginning of the shader) * @param language The shader source language, currently accepted is GLSL### * where ### is the version, e.g. GLSL100 = GLSL 1.0, GLSL330 = GLSL 3.3, etc. */ public void addSource(ShaderType type, String name, String source, String defines, String language){ ShaderSource shaderSource = new ShaderSource(type); shaderSource.setSource(source); shaderSource.setName(name); shaderSource.setLanguage(language); if (defines != null) { shaderSource.setDefines(defines); } shaderSourceList.add(shaderSource); setUpdateNeeded(); }
if (source.isUpdateNeeded()) { updateShaderSourceData(source); glAttachShader(id, source.getId());
public void updateShaderSourceData(ShaderSource source) { int id = source.getId(); if (id == -1) { id = gl.glCreateShader(convertShaderType(source.getType())); if (id <= 0) { throw new RendererException("Invalid ID received when trying to create shader."); source.setId(id); } else { throw new RendererException("Cannot recompile shader source"); String language = source.getLanguage(); if (source.getType() == ShaderType.Fragment) { stringBuf.append("#define ").append(source.getType().name().toUpperCase()).append("_SHADER 1\n"); stringBuf.append(source.getDefines()); stringBuf.append(source.getSource()); if (infoLog != null) { logger.log(Level.WARNING, "{0} compiled successfully, compiler warnings: \n{1}", new Object[]{source.getName(), infoLog}); } else { logger.log(Level.FINE, "{0} compiled successfully.", source.getName()); source.clearUpdateNeeded(); } else { logger.log(Level.WARNING, "Bad compile of:\n{0}",
public void updateShaderSourceData(ShaderSource source) { int id = source.getId(); if (id == -1) { id = glCreateShader(convertShaderType(source.getType())); if (id <= 0) { throw new RendererException("Invalid ID received when trying to create shader."); source.setId(id); } else { throw new RendererException("Cannot recompile shader source"); String language = source.getLanguage(); stringBuf.setLength(0); if (language.startsWith("GLSL")) { byte[] definesCodeData = source.getDefines().getBytes(); byte[] sourceCodeData = source.getSource().getBytes(); ByteBuffer codeBuf = BufferUtils.createByteBuffer(nameBuf.limit() + definesCodeData.length if (infoLog != null) { logger.log(Level.WARNING, "{0} compiled successfully, compiler warnings: \n{1}", new Object[]{source.getName(), infoLog}); } else { logger.log(Level.FINE, "{0} compiled successfully.", source.getName()); source.clearUpdateNeeded(); } else { logger.log(Level.WARNING, "Bad compile of:\n{0}",
if (source.isUpdateNeeded()) { updateShaderSourceData(source); if (source.getType() == ShaderType.Fragment && source.getLanguage().equals("GLSL150")) { bindFragDataRequired = true; gl.glAttachShader(id, source.getId());
if (source.getLanguage().startsWith("GLSL")) { int ver = Integer.parseInt(source.getLanguage().substring(4)); switch (ver) { case 100:
/** * Adds source code to a certain pipeline. * * @param type The pipeline to control * @param source The shader source code (in GLSL). * @param defines Preprocessor defines (placed at the beginning of the shader) * @param language The shader source language, currently accepted is GLSL### * where ### is the version, e.g. GLSL100 = GLSL 1.0, GLSL330 = GLSL 3.3, etc. */ public void addSource(ShaderType type, String name, String source, String defines, String language){ ShaderSource shaderSource = new ShaderSource(type); shaderSource.setSource(source); shaderSource.setName(name); shaderSource.setLanguage(language); if (defines != null) { shaderSource.setDefines(defines); } shaderSourceList.add(shaderSource); setUpdateNeeded(); }
/** * Adds source code to a certain pipeline. * * @param type The pipeline to control * @param source The shader source code (in GLSL). */ public void addSource(ShaderType type, String name, String source, String defines){ ShaderSource shader = new ShaderSource(type); shader.setSource(source); shader.setName(name); if (defines != null) shader.setDefines(defines); shaderList.add(shader); setUpdateNeeded(); }
/** * Do not use this constructor. Used for destructible clones only. */ protected Shader(Shader s){ super(s.id); // Shader sources cannot be shared, therefore they must // be destroyed together with the parent shader. shaderSourceList = new ArrayList<ShaderSource>(); for (ShaderSource source : s.shaderSourceList){ shaderSourceList.add( (ShaderSource)source.createDestructableClone() ); } uniforms = null; boundUniforms = null; attribs = null; }
public void deleteShader(Shader shader) { if (shader.getId() == -1) { logger.warning("Shader is not uploaded to GPU, cannot delete."); return; } for (ShaderSource source : shader.getSources()) { if (source.getId() != -1) { glDetachShader(shader.getId(), source.getId()); deleteShaderSource(source); } } glDeleteProgram(shader.getId()); statistics.onDeleteShader(); shader.resetObject(); }
public void deleteShader(Shader shader) { if (shader.getId() == -1) { logger.warning("Shader is not uploaded to GPU, cannot delete."); return; } for (ShaderSource source : shader.getSources()) { if (source.getId() != -1) { gl.glDetachShader(shader.getId(), source.getId()); deleteShaderSource(source); } } gl.glDeleteProgram(shader.getId()); statistics.onDeleteShader(); shader.resetObject(); }
public NativeObject createDestructableClone(){ return new ShaderSource(ShaderSource.this); } }
public NativeObject createDestructableClone(){ return new ShaderSource(ShaderSource.this); } }
/** * Called by the object manager to reset all object IDs. This causes * the shader to be reuploaded to the GPU incase the display was restarted. */ @Override public void resetObject() { this.id = -1; this.usable = false; for (ShaderSource source : shaderList){ source.resetObject(); } setUpdateNeeded(); }
public void validate(Shader shader, StringBuilder results) { for (ShaderSource source : shader.getSources()){ results.append("Checking: ").append(source.getName()); switch (source.getType()){ case Fragment: executeCg(source.getSource(), source.getLanguage(), source.getDefines(), "arbfp1", results); break; case Vertex: executeCg(source.getSource(), source.getLanguage(), source.getDefines(), "arbvp1", results); break; } } }
/** * Called by the object manager to reset all object IDs. This causes * the shader to be reuploaded to the GPU incase the display was restarted. */ @Override public void resetObject() { this.id = -1; for (ShaderSource source : shaderSourceList){ source.resetObject(); } setUpdateNeeded(); }
public void deleteShaderSource(ShaderSource source) { if (source.getId() < 0) { logger.warning("Shader source is not uploaded to GPU, cannot delete."); return; } source.clearUpdateNeeded(); glDeleteShader(source.getId()); source.resetObject(); }
protected Shader(Shader s){ super(Shader.class, s.id); shaderList = new ArrayList<ShaderSource>(); //uniforms = new ListMap<String, Uniform>(); //attribs = new IntMap<Attribute>(); // NOTE: Because ShaderSources are registered separately with // the GLObjectManager for (ShaderSource source : s.shaderList){ shaderList.add( (ShaderSource)source.createDestructableClone() ); } }