public StringBuilder toString(StringBuilder sb, boolean alsoUnlocated) { if (null == sb) { sb = new StringBuilder(); } sb.append("ShaderState[ "); sb.append(Platform.getNewline()).append(" "); if (null != shaderProgram) { shaderProgram.toString(sb); } else { sb.append("ShaderProgram: null"); } sb.append(Platform.getNewline()).append(" enabledAttributes ["); { Iterator<String> names = activedAttribEnabledMap.keySet().iterator(); Iterator<Boolean> values = activedAttribEnabledMap.values().iterator(); while (names.hasNext()) { sb.append(Platform.getNewline()) .append(" ") .append(names.next()) .append(": ") .append(values.next()); } } sb.append(Platform.getNewline()).append(" ],").append(" activeAttributes ["); for (Iterator<GLArrayData> iter = activeAttribDataMap.values().iterator(); iter.hasNext(); ) { final GLArrayData ad = iter.next(); if (alsoUnlocated || 0 <= ad.getLocation()) { sb.append(Platform.getNewline()).append(" ").append(ad); } } sb.append(Platform.getNewline()).append(" ],").append(" managedAttributes ["); for (Iterator<GLArrayData> iter = managedAttributes.iterator(); iter.hasNext(); ) { final GLArrayData ad = iter.next(); if (alsoUnlocated || 0 <= ad.getLocation()) { sb.append(Platform.getNewline()).append(" ").append(ad); } } sb.append(Platform.getNewline()).append(" ],").append(" activeUniforms ["); for (Iterator<GLUniformData> iter = activeUniformDataMap.values().iterator(); iter.hasNext(); ) { final GLUniformData ud = iter.next(); if (alsoUnlocated || 0 <= ud.getLocation()) { sb.append(Platform.getNewline()).append(" ").append(ud); } } sb.append(Platform.getNewline()).append(" ],").append(" managedUniforms ["); for (Iterator<GLUniformData> iter = managedUniforms.iterator(); iter.hasNext(); ) { final GLUniformData ud = iter.next(); if (alsoUnlocated || 0 <= ud.getLocation()) { sb.append(Platform.getNewline()).append(" ").append(ud); } } sb.append(Platform.getNewline()).append(" ]").append(Platform.getNewline()).append("]"); return sb; }
/** * Set the uniform data. * * <p>Even if the uniform is not found in the current shader, it is stored in this state. * * @param data the GLUniforms's name must match the uniform one, it's index will be set with the * uniforms's location, if found. * @return false, if the name is not found, otherwise true * @throws GLException if the program is not in use * @see #glGetUniformLocation * @see javax.media.opengl.GL2ES2#glGetUniformLocation * @see javax.media.opengl.GL2ES2#glUniform * @see #getUniformLocation * @see ShaderProgram#glReplaceShader */ public boolean uniform(GL2ES2 gl, GLUniformData data) { if (!shaderProgram.inUse()) throw new GLException("Program is not in use"); int location = data.getLocation(); if (0 > location) { location = getUniformLocation(gl, data); } if (0 <= location) { // only pass the data, if the uniform exists in the current shader if (DEBUG) { System.err.println("ShaderState: glUniform: " + data); } gl.glUniform(data); } return true; }