minecraft-src/com/mojang/blaze3d/buffers/Std140Builder.java
2025-09-18 12:27:44 +00:00

156 lines
3.6 KiB
Java

package com.mojang.blaze3d.buffers;
import com.mojang.blaze3d.DontObfuscate;
import java.nio.ByteBuffer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.util.Mth;
import org.joml.Matrix4fc;
import org.joml.Vector2fc;
import org.joml.Vector2ic;
import org.joml.Vector3fc;
import org.joml.Vector3ic;
import org.joml.Vector4fc;
import org.joml.Vector4ic;
import org.lwjgl.system.MemoryStack;
@Environment(EnvType.CLIENT)
@DontObfuscate
public class Std140Builder {
private final ByteBuffer buffer;
private final int start;
private Std140Builder(ByteBuffer byteBuffer) {
this.buffer = byteBuffer;
this.start = byteBuffer.position();
}
public static Std140Builder intoBuffer(ByteBuffer byteBuffer) {
return new Std140Builder(byteBuffer);
}
public static Std140Builder onStack(MemoryStack memoryStack, int i) {
return new Std140Builder(memoryStack.malloc(i));
}
public ByteBuffer get() {
return this.buffer.flip();
}
public Std140Builder align(int i) {
int j = this.buffer.position();
this.buffer.position(this.start + Mth.roundToward(j - this.start, i));
return this;
}
public Std140Builder putFloat(float f) {
this.align(4);
this.buffer.putFloat(f);
return this;
}
public Std140Builder putInt(int i) {
this.align(4);
this.buffer.putInt(i);
return this;
}
public Std140Builder putVec2(float f, float g) {
this.align(8);
this.buffer.putFloat(f);
this.buffer.putFloat(g);
return this;
}
public Std140Builder putVec2(Vector2fc vector2fc) {
this.align(8);
vector2fc.get(this.buffer);
this.buffer.position(this.buffer.position() + 8);
return this;
}
public Std140Builder putIVec2(int i, int j) {
this.align(8);
this.buffer.putInt(i);
this.buffer.putInt(j);
return this;
}
public Std140Builder putIVec2(Vector2ic vector2ic) {
this.align(8);
vector2ic.get(this.buffer);
this.buffer.position(this.buffer.position() + 8);
return this;
}
public Std140Builder putVec3(float f, float g, float h) {
this.align(16);
this.buffer.putFloat(f);
this.buffer.putFloat(g);
this.buffer.putFloat(h);
this.buffer.position(this.buffer.position() + 4);
return this;
}
public Std140Builder putVec3(Vector3fc vector3fc) {
this.align(16);
vector3fc.get(this.buffer);
this.buffer.position(this.buffer.position() + 16);
return this;
}
public Std140Builder putIVec3(int i, int j, int k) {
this.align(16);
this.buffer.putInt(i);
this.buffer.putInt(j);
this.buffer.putInt(k);
this.buffer.position(this.buffer.position() + 4);
return this;
}
public Std140Builder putIVec3(Vector3ic vector3ic) {
this.align(16);
vector3ic.get(this.buffer);
this.buffer.position(this.buffer.position() + 16);
return this;
}
public Std140Builder putVec4(float f, float g, float h, float i) {
this.align(16);
this.buffer.putFloat(f);
this.buffer.putFloat(g);
this.buffer.putFloat(h);
this.buffer.putFloat(i);
return this;
}
public Std140Builder putVec4(Vector4fc vector4fc) {
this.align(16);
vector4fc.get(this.buffer);
this.buffer.position(this.buffer.position() + 16);
return this;
}
public Std140Builder putIVec4(int i, int j, int k, int l) {
this.align(16);
this.buffer.putInt(i);
this.buffer.putInt(j);
this.buffer.putInt(k);
this.buffer.putInt(l);
return this;
}
public Std140Builder putIVec4(Vector4ic vector4ic) {
this.align(16);
vector4ic.get(this.buffer);
this.buffer.position(this.buffer.position() + 16);
return this;
}
public Std140Builder putMat4f(Matrix4fc matrix4fc) {
this.align(16);
matrix4fc.get(this.buffer);
this.buffer.position(this.buffer.position() + 64);
return this;
}
}