package com.xfestudio.mydimensionlord.platform;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormat;
/** Owns the native memory behind one independently built preview mesh. */
public final class MeshBuilder implements VertexConsumer {
private final ByteBufferBuilder storage;
private BufferBuilder builder;
private boolean closed;
public MeshBuilder(int capacity) { storage = new ByteBufferBuilder(capacity); }
public void begin(VertexFormat.Mode mode, VertexFormat format) { builder = new BufferBuilder(storage, mode, format); }
public MeshData endOrDiscardIfEmpty() {
MeshData result = builder.build();
if (result == null) discard();
return result;
}
public void discard() { if (!closed) { closed = true; storage.close(); } }
@Override public VertexConsumer addVertex(float x, float y, float z) { builder.addVertex(x,y,z); return this; }
@Override public VertexConsumer setColor(int r, int g, int b, int a) { builder.setColor(r,g,b,a); return this; }
@Override public VertexConsumer setUv(float u, float v) { builder.setUv(u,v); return this; }
@Override public VertexConsumer setUv1(int u, int v) { builder.setUv1(u,v); return this; }
@Override public VertexConsumer setUv2(int u, int v) { builder.setUv2(u,v); return this; }
@Override public VertexConsumer setNormal(float x, float y, float z) { builder.setNormal(x,y,z); return this; }
}
package com.xfestudio.mydimensionlord.platform;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.ByteBufferBuilder;
import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormat;
/** Owns the native memory behind one independently built preview mesh. */
public final class MeshBuilder implements VertexConsumer {
private final ByteBufferBuilder storage;
private BufferBuilder builder;
private boolean closed;
public MeshBuilder(int capacity) { storage = new ByteBufferBuilder(capacity); }
public void begin(VertexFormat.Mode mode, VertexFormat format) { builder = new BufferBuilder(storage, mode, format); }
public MeshData endOrDiscardIfEmpty() {
MeshData result = builder.build();
if (result == null) discard();
return result;
}
public void discard() { if (!closed) { closed = true; storage.close(); } }
@Override public VertexConsumer addVertex(float x, float y, float z) { builder.addVertex(x,y,z); return this; }
@Override public VertexConsumer setColor(int r, int g, int b, int a) { builder.setColor(r,g,b,a); return this; }
@Override public VertexConsumer setUv(float u, float v) { builder.setUv(u,v); return this; }
@Override public VertexConsumer setUv1(int u, int v) { builder.setUv1(u,v); return this; }
@Override public VertexConsumer setUv2(int u, int v) { builder.setUv2(u,v); return this; }
@Override public VertexConsumer setNormal(float x, float y, float z) { builder.setNormal(x,y,z); return this; }
}