/** * Called by the Renderer when a shader has been utilized. * * @param shader The shader that was used * @param wasSwitched If true, the shader has required a state switch */ public void onShaderUse(Shader shader, boolean wasSwitched){ assert shader.getId() >= 1; if( !enabled ) return; // Reduces unnecessary hashmap lookups if // we already considered this shader. if (lastShader != shader.getId()) { lastShader = shader.getId(); if (!shadersUsed.containsKey(shader.getId())) { shadersUsed.put(shader.getId(), null); } } if (wasSwitched) numShaderSwitches++; }
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(); }
protected void bindProgram(Shader shader) { int shaderId = shader.getId(); if (context.boundShaderProgram != shaderId) { gl.glUseProgram(shaderId); statistics.onShaderUse(shader, true); context.boundShader = shader; context.boundShaderProgram = shaderId; } else { statistics.onShaderUse(shader, false); } }
public void setShader(Shader shader) { if (shader == null) { throw new IllegalArgumentException("Shader cannot be null"); } else { if (shader.isUpdateNeeded()) { updateShaderData(shader); } // NOTE: might want to check if any of the // sources need an update? assert shader.getId() > 0; updateShaderUniforms(shader); updateShaderBufferBlocks(shader); bindProgram(shader); } }
/*********************************************************************\ |* Shaders *| \*********************************************************************/ protected void updateUniformLocation(Shader shader, Uniform uniform) { int loc = gl.glGetUniformLocation(shader.getId(), uniform.getName()); if (loc < 0) { uniform.setLocation(-1); // uniform is not declared in shader logger.log(Level.FINE, "Uniform {0} is not declared in shader {1}.", new Object[]{uniform.getName(), shader.getSources()}); } else { uniform.setLocation(loc); } }
/** * Updates the buffer block for the shader. * * @param shader the shader. * @param bufferBlock the storage block. */ protected void updateShaderBufferBlock(final Shader shader, final ShaderBufferBlock bufferBlock) { assert bufferBlock.getName() != null; assert shader.getId() > 0; final BufferObject bufferObject = bufferBlock.getBufferObject(); if (bufferObject.getUniqueId() == -1 || bufferObject.isUpdateNeeded()) { updateBufferData(bufferObject); } if (!bufferBlock.isUpdateNeeded()) { return; } bindProgram(shader); final int shaderId = shader.getId(); final BufferObject.BufferType bufferType = bufferObject.getBufferType(); bindBuffer(bufferBlock, bufferObject, shaderId, bufferType); bufferBlock.clearUpdateNeeded(); }
public void updateShaderData(Shader shader) { int id = shader.getId(); boolean needRegister = false; if (id == -1) {
/** * Called by the Renderer when a shader has been utilized. * * @param shader The shader that was used * @param wasSwitched If true, the shader has required a state switch */ public void onShaderUse(Shader shader, boolean wasSwitched){ assert shader.getId() >= 1; // if (!shadersUsed.contains(shader.id)) // shadersUsed.add(shader.id); if (wasSwitched) numShaderSwitches++; }
/** * Called by the Renderer when a shader has been utilized. * * @param shader The shader that was used * @param wasSwitched If true, the shader has required a state switch */ public void onShaderUse(Shader shader, boolean wasSwitched){ assert shader.getId() >= 1; if( !enabled ) return; // Reduces unnecessary hashmap lookups if // we already considered this shader. if (lastShader != shader.getId()) { lastShader = shader.getId(); if (!shadersUsed.containsKey(shader.getId())) { shadersUsed.put(shader.getId(), null); } } if (wasSwitched) numShaderSwitches++; }
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(); }
protected void bindProgram(Shader shader) { int shaderId = shader.getId(); if (context.boundShaderProgram != shaderId) { gl.glUseProgram(shaderId); statistics.onShaderUse(shader, true); context.boundShader = shader; context.boundShaderProgram = shaderId; } else { statistics.onShaderUse(shader, false); } }
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(); }
protected void bindProgram(Shader shader) { int shaderId = shader.getId(); if (context.boundShaderProgram != shaderId) { glUseProgram(shaderId); statistics.onShaderUse(shader, true); context.boundShader = shader; context.boundShaderProgram = shaderId; } else { statistics.onShaderUse(shader, false); } }
public void setShader(Shader shader) { if (shader == null) { throw new IllegalArgumentException("Shader cannot be null"); } else { if (shader.isUpdateNeeded()) { updateShaderData(shader); } // NOTE: might want to check if any of the // sources need an update? assert shader.getId() > 0; updateShaderUniforms(shader); bindProgram(shader); } }
public void setShader(Shader shader) { if (shader == null) { throw new IllegalArgumentException("Shader cannot be null"); } else { if (shader.isUpdateNeeded()) { updateShaderData(shader); } // NOTE: might want to check if any of the // sources need an update? assert shader.getId() > 0; updateShaderUniforms(shader); bindProgram(shader); } }
/*********************************************************************\ |* Shaders *| \*********************************************************************/ protected void updateUniformLocation(Shader shader, Uniform uniform) { stringBuf.setLength(0); stringBuf.append(uniform.getName()).append('\0'); updateNameBuffer(); int loc = glGetUniformLocation(shader.getId(), nameBuf); if (loc < 0) { uniform.setLocation(-1); // uniform is not declared in shader logger.log(Level.FINE, "Uniform {0} is not declared in shader {1}.", new Object[]{uniform.getName(), shader.getSources()}); } else { uniform.setLocation(loc); } }
/*********************************************************************\ |* Shaders *| \*********************************************************************/ protected void updateUniformLocation(Shader shader, Uniform uniform) { int loc = gl.glGetUniformLocation(shader.getId(), uniform.getName()); if (loc < 0) { uniform.setLocation(-1); // uniform is not declared in shader logger.log(Level.FINE, "Uniform {0} is not declared in shader {1}.", new Object[]{uniform.getName(), shader.getSources()}); } else { uniform.setLocation(loc); } }
public void updateShaderData(Shader shader) { int id = shader.getId(); boolean needRegister = false; if (id == -1) {
/** * Returns the sorting ID or sorting index for this material. * * <p>The sorting ID is used internally by the system to sort rendering * of geometries. It sorted to reduce shader switches, if the shaders * are equal, then it is sorted by textures. * * @return The sorting ID used for sorting geometries for rendering. */ public int getSortId() { Technique t = getActiveTechnique(); if (sortingId == -1 && t != null && t.getShader() != null) { int texId = -1; for (int i = 0; i < paramValues.size(); i++) { MatParam param = paramValues.getValue(i); if (param instanceof MatParamTexture) { MatParamTexture tex = (MatParamTexture) param; if (tex.getTextureValue() != null && tex.getTextureValue().getImage() != null) { if (texId == -1) { texId = 0; } texId += tex.getTextureValue().getImage().getId() % 0xff; } } } sortingId = texId + t.getShader().getId() * 1000; } return sortingId; }