public void updateShaderData(Shader shader) { int id = shader.getId(); boolean needRegister = false; if (id == -1) { shader.setId(id); needRegister = true; for (ShaderSource source : shader.getSources()) { if (source.isUpdateNeeded()) { updateShaderSourceData(source); logger.fine("Shader linked successfully."); shader.clearUpdateNeeded(); if (needRegister) {
protected void resetUniformLocations(Shader shader) { ListMap<String, Uniform> uniforms = shader.getUniformMap(); for (int i = 0; i < uniforms.size(); i++) { Uniform uniform = uniforms.getValue(i); uniform.reset(); // e.g check location again } }
shader = shaderGenerator.generateShader(definesSourceCode); } else { shader = new Shader(); for (ShaderType type : ShaderType.values()) { String language = shaderLanguages.get(type); shader.addSource(type, shaderSourceAssetName, shaderSourceCode, definesSourceCode, language); shader.addUniformBinding(binding);
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 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); } }
@Override public String toString() { return getClass().getSimpleName() + "[numSources=" + shaderSourceList.size() + ", numUniforms=" + uniforms.size() + ", numBufferBlocks=" + bufferBlocks.size() + ", shaderSources=" + getSources() + "]"; }
/** * 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++; }
Uniform lightData = shader.getUniform("g_LightData"); lightData.setVector4Length(numLights * 3);//8 lights * max 3 Uniform ambientColor = shader.getUniform("g_AmbientLightColor"); Uniform lightProbeData = shader.getUniform("g_LightProbeData"); Uniform lightProbeData2 = shader.getUniform("g_LightProbeData2"); Uniform lightProbeData3 = shader.getUniform("g_LightProbeData3"); Uniform shCoeffs = shader.getUniform("g_ShCoeffs"); Uniform lightProbePemMap = shader.getUniform("g_PrefEnvMap"); Uniform shCoeffs2 = shader.getUniform("g_ShCoeffs2"); Uniform lightProbePemMap2 = shader.getUniform("g_PrefEnvMap2"); Uniform shCoeffs3 = shader.getUniform("g_ShCoeffs3"); Uniform lightProbePemMap3 = shader.getUniform("g_PrefEnvMap3");
/** * Generate vertex and fragment shaders for the given technique * * @return a Shader program */ public Shader generateShader(String definesSourceCode) { if (techniqueDef == null) { throw new UnsupportedOperationException("The shaderGenerator was not " + "properly initialized, call " + "initialize(TechniqueDef) before any generation"); } String techniqueName = techniqueDef.getName(); ShaderGenerationInfo info = techniqueDef.getShaderGenerationInfo(); Shader shader = new Shader(); for (ShaderType type : ShaderType.values()) { String extension = type.getExtension(); String language = getLanguageAndVersion(type); String shaderSourceCode = buildShader(techniqueDef.getShaderNodes(), info, type); if (shaderSourceCode != null) { String shaderSourceAssetName = techniqueName + "." + extension; shader.addSource(type, shaderSourceAssetName, shaderSourceCode, definesSourceCode, language); } } techniqueDef = null; return shader; }
final ShaderBufferBlock bufferBlock = shader.getBufferBlock(param.getPrefixedName()); bufferBlock.setBufferObject((BufferObject) param.getValue()); Uniform uniform = shader.getUniform(param.getPrefixedName()); if (uniform.isSetByCurrentMaterial()) { continue;
@Override public void setUpdateNeeded(){ super.setUpdateNeeded(); resetLocations(); }
public NativeObject createDestructableClone(){ return new Shader(this); }
Attribute attrib = context.boundShader.getAttribute(vb.getBufferType()); int loc = attrib.getLocation(); if (loc == -1) {
public void addSource(ShaderType type, String source, String defines){ addSource(type, null, source, defines); }
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(); }
for (ShaderSource source : shader.getSources()) { if (source.getLanguage().startsWith("GLSL")) { int ver = Integer.parseInt(source.getLanguage().substring(4));
/*********************************************************************\ |* 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); } }
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); } }
private void updateLightListUniforms(Matrix4f viewMatrix, Shader shader, LightList lights) { Uniform ambientColor = shader.getUniform("g_AmbientLightColor"); ambientColor.setValue(VarType.Vector4, getAmbientColor(lights, true, ambientLightColor)); Uniform lightData = shader.getUniform("g_LightData");