package android.opengl.OpenGLES10; import java.util.ArrayList; public class Uniform<T> extends UniformBase { protected T value = null; public Uniform(T value) { super(-1); this.value = value; } public Uniform() { super(-1); } public void setValue(T val) { // TODO: Profile whether this if clause is an optimization if (value != val) { uploaded = false; value = val; } } public T getValue() { return value; } @Override public ArrayList<ShaderFile > getAdditionalRequiredShaderFiles() { ArrayList<ShaderFile > shaderFiles = new ArrayList<ShaderFile >(); for (int i = 0; i < this.additionalRequiredShaderFiles.size(); i++) { if (this.father == null || ((Uniform<Boolean>)(this.father)).getValue()) { shaderFiles.add(this.additionalRequiredShaderFiles.get(i).getValue()); } } return shaderFiles; } @Override public void upload(ShaderProgram program) { if (uploaded) return; if (value instanceof Boolean) { program.setUniform1i(location, (Boolean) value ? 1 : 0); uploaded = true; return; } if (value instanceof Integer) { program.setUniform1i(location, (Integer) value); uploaded = true; return; } if (value instanceof Float) { program.setUniform1f(location, (Float) value); uploaded = true; return; } if (value instanceof Matrix3x3f) { Matrix3x3f tmp = (Matrix3x3f)value; program.setUniformMatrix3fv(location, tmp.m); uploaded = true; return; } if (value instanceof Matrix4x4f) { Matrix4x4f tmp = (Matrix4x4f)value; program.setUniformMatrix4fv(location, tmp.m); uploaded = true; return; } } }