VulkanShader_1.21.10-0.0.4-alpha.jar
Download file
package net.vulkanmod.vulkan.shader.layout;
import java.util.ArrayList;
import java.util.List;
import net.vulkanmod.vulkan.shader.descriptor.UBO;
public abstract class AlignedStruct {
protected List<Uniform> uniforms = new ArrayList();
protected int size;
protected AlignedStruct(List<Uniform.Info> infoList, int size) {
if (size <= 0) {
throw new IllegalArgumentException("Struct size cannot be <= 0");
} else {
this.size = size;
if (infoList != null) {
for(Uniform.Info info : infoList) {
Uniform uniform = Uniform.createField(info);
this.uniforms.add(uniform);
}
}
}
}
public void update(long ptr) {
for(Uniform uniform : this.uniforms) {
uniform.update(ptr);
}
}
public List<Uniform> getUniforms() {
return this.uniforms;
}
public int getSize() {
return this.size;
}
public static class Builder {
final List<Uniform.Info> uniforms = new ArrayList();
protected int currentOffset = 0;
public void addUniformInfo(String type, String name, int count) {
Uniform.Info info = Uniform.createUniformInfo(type, name, count);
this.addUniformInfo(info);
}
public void addUniformInfo(String type, String name) {
Uniform.Info info = Uniform.createUniformInfo(type, name);
this.addUniformInfo(info);
}
public void addUniformInfo(Uniform.Info uniformInfo) {
this.currentOffset = uniformInfo.computeAlignmentOffset(this.currentOffset);
this.currentOffset += uniformInfo.size;
this.uniforms.add(uniformInfo);
}
public UBO buildUBO(int binding, int stages) {
return this.buildUBO("UBO: %d".formatted(binding), binding, stages);
}
public UBO buildUBO(String name, int binding, int stages) {
return new UBO(name, binding, stages, this.currentOffset * 4, this.uniforms);
}
public PushConstants buildPushConstant() {
return this.uniforms.isEmpty() ? null : new PushConstants(this.uniforms, this.currentOffset * 4);
}
}
}
Download file