SimpleJavaEngine/src/main/java/speiger/src/coreengine/rendering/shader/uniform/UniformManager.java

96 lines
3.3 KiB
Java

package speiger.src.coreengine.rendering.shader.uniform;
import java.util.List;
import speiger.src.collections.objects.lists.ObjectArrayList;
import speiger.src.coreengine.math.vector.floats.Vec2f;
import speiger.src.coreengine.math.vector.floats.Vec3f;
import speiger.src.coreengine.math.vector.floats.Vec4f;
import speiger.src.coreengine.math.vector.matrix.Matrix4f;
import speiger.src.coreengine.rendering.shader.ShaderProgram;
import speiger.src.coreengine.rendering.shader.uniform.base.BoolUniform;
import speiger.src.coreengine.rendering.shader.uniform.base.BufferUniform;
import speiger.src.coreengine.rendering.shader.uniform.base.FloatUniform;
import speiger.src.coreengine.rendering.shader.uniform.base.IntUniform;
import speiger.src.coreengine.rendering.shader.uniform.base.TextureUniform;
import speiger.src.coreengine.rendering.shader.uniform.vec.Matrix4fUniform;
import speiger.src.coreengine.rendering.shader.uniform.vec.Vec2fUniform;
import speiger.src.coreengine.rendering.shader.uniform.vec.Vec3fUniform;
import speiger.src.coreengine.rendering.shader.uniform.vec.Vec4fUniform;
import speiger.src.coreengine.rendering.utils.GLStateTracker;
public class UniformManager {
List<IUniform> uniforms = new ObjectArrayList<>();
List<IAutoUniform> autoUniforms = new ObjectArrayList<>();
ShaderProgram owner;
public UniformManager(ShaderProgram owner) {
this.owner = owner;
}
public <T extends IUniform> T addGlobalUniform(String name) {
return addUniform(GLStateTracker.UNIFORMS.get(name));
}
public <T extends IUniform> T addGlobalUniform(String name, T defaultValue) {
return addUniform(GLStateTracker.UNIFORMS.getOrDefault(name, defaultValue));
}
public BoolUniform addBool(String name, boolean defaultValue) {
return addUniform(new BoolUniform(name, defaultValue));
}
public IntUniform addInt(String name, int defaultValue) {
return addUniform(new IntUniform(name, defaultValue));
}
public FloatUniform addFloat(String name, float defaultValue) {
return addUniform(new FloatUniform(name, defaultValue));
}
public Vec2fUniform addVec2(String name, Vec2f defaultValue) {
return addUniform(new Vec2fUniform(name, defaultValue.copyAsMutable()));
}
public Vec3fUniform addVec3(String name, Vec3f defaultValue) {
return addUniform(new Vec3fUniform(name, defaultValue.copyAsMutable()));
}
public Vec4fUniform addVec4(String name, Vec4f defaultValue) {
return addUniform(new Vec4fUniform(name, defaultValue.copyAsMutable()));
}
public Matrix4fUniform addMat(String name, Matrix4f defaultValue) {
return addUniform(new Matrix4fUniform(name, new Matrix4f(defaultValue)));
}
public BufferUniform addBuffer(String name, int slot) {
return addUniform(new BufferUniform(name, slot));
}
public TextureUniform addTexture(String name, int unit) {
return addUniform(new TextureUniform(name, unit));
}
public <T extends IUniform> T addUniform(T uniform) {
uniforms.add(uniform);
uniform.registerShader(owner);
if(uniform instanceof IAutoUniform auto) {
autoUniforms.add(auto);
}
return uniform;
}
public void bind() {
if(autoUniforms.isEmpty()) return;
for(int i = 0,m=autoUniforms.size();i<m;i++) {
autoUniforms.get(i).bind(owner);
}
}
public void remove() {
for(int i = 0,m=uniforms.size();i<m;i++) {
uniforms.get(i).removeShader(owner);
}
}
}