ALL = new ArrayList<>();
-
- private final RenderType renderType;
- private final VertexFormat format;
- private final int stride;
- private final boolean sortOnUpload;
- private final VertexViewProvider provider;
-
- private MemoryBlock data;
- private ByteBuffer buffer;
-
- private boolean prepared;
- private int vertexCount;
- private int verticesToDraw;
-
- public DrawBuffer(RenderType renderType, VertexFormat format, int stride, boolean sortOnUpload, VertexViewProvider provider) {
- this.renderType = renderType;
- this.format = format;
- this.stride = stride;
- this.sortOnUpload = sortOnUpload;
- this.provider = provider;
-
- ALL.add(this);
- }
-
- /**
- * Prepares this buffer by initializing a block of memory.
- * @param vertexCount The number of vertices to reserve memory for.
- * @throws IllegalStateException If the buffer is already in use.
- */
- public void prepare(int vertexCount) {
- if (prepared) {
- throw new IllegalStateException("Cannot prepare DrawBuffer twice!");
- }
-
- this.vertexCount = vertexCount;
- verticesToDraw = this.vertexCount;
-
- // Add one extra vertex to uphold the vanilla assumption that BufferBuilders have at least
- // enough buffer space for one more vertex. Rubidium checks for this extra space when popNextBuffer
- // is called and reallocates the buffer if there is not space for one more vertex.
- int byteSize = stride * (vertexCount + 1);
-
- // We'll need to allocate space for the index buffer if this render type needs sorting.
- if (sortOnUpload) {
- int i = renderType.mode()
- .indexCount(vertexCount);
- VertexFormat.IndexType indexType = VertexFormat.IndexType.least(i);
- int extraBytes = Mth.roundToward(i * indexType.bytes, 4);
- byteSize += extraBytes;
- }
-
- if (data == null) {
- data = MemoryBlock.malloc(byteSize);
- buffer = data.asBuffer();
- } else if (byteSize > data.size()) {
- data = data.realloc(byteSize);
- buffer = data.asBuffer();
- }
-
- prepared = true;
- }
-
- public VertexView slice(int startVertex, int vertexCount) {
- if (!prepared) {
- throw new IllegalStateException("Cannot slice DrawBuffer that is not prepared!");
- }
-
- if (startVertex + vertexCount > this.vertexCount) {
- throw new IndexOutOfBoundsException("Vertex count greater than allocated: " + startVertex + " + " + vertexCount + " > " + this.vertexCount);
- }
-
- VertexView vertexView = provider.createVertexView();
- vertexView.ptr(ptrForVertex(startVertex));
- vertexView.vertexCount(vertexCount);
- return vertexView;
- }
-
- public long ptrForVertex(long startVertex) {
- return data.ptr() + startVertex * stride;
- }
-
- public void verticesToDraw(int verticesToDraw) {
- this.verticesToDraw = verticesToDraw;
- }
-
- /**
- * Injects the backing buffer into the given builder and prepares it for rendering.
- *
- * @param bufferBuilder The buffer builder to inject into.
- */
- public void inject(BufferBuilderExtension bufferBuilder) {
- if (!prepared) {
- throw new IllegalStateException("Cannot inject DrawBuffer that is not prepared!");
- }
-
- buffer.clear();
- bufferBuilder.flywheel$injectForRender(buffer, format, verticesToDraw);
- }
-
- public RenderType getRenderType() {
- return renderType;
- }
-
- public VertexFormat getVertexFormat() {
- return format;
- }
-
- public boolean isPrepared() {
- return prepared;
- }
-
- public int getVertexCount() {
- return vertexCount;
- }
-
- public int getVerticesToDraw() {
- return verticesToDraw;
- }
-
- /**
- * @return {@code true} if the buffer has any vertices to draw.
- */
- public boolean hasVertices() {
- return verticesToDraw > 0;
- }
-
- /**
- * Reset the draw buffer to have no vertices.
- *
- * Does not clear the backing buffer.
- */
- public void reset() {
- prepared = false;
- vertexCount = 0;
- verticesToDraw = 0;
- }
-
- public void free() {
- reset();
-
- if (data == null) {
- return;
- }
-
- data.free();
- data = null;
- buffer = null;
- }
-
- public static void onReloadRenderers(ReloadLevelRendererEvent event) {
- ALL.forEach(DrawBuffer::free);
- }
-
- public static DrawBuffer get(RenderType renderType, RenderStage stage) {
- return RenderTypeExtension.getDrawBufferSet(renderType)
- .getBuffer(stage);
- }
-}
diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/batching/DrawBufferSet.java b/src/main/java/com/jozufozu/flywheel/backend/engine/batching/DrawBufferSet.java
deleted file mode 100644
index ce18ead93..000000000
--- a/src/main/java/com/jozufozu/flywheel/backend/engine/batching/DrawBufferSet.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.jozufozu.flywheel.backend.engine.batching;
-
-import java.util.EnumMap;
-import java.util.Map;
-
-import com.jozufozu.flywheel.api.event.RenderStage;
-import com.jozufozu.flywheel.api.vertex.VertexViewProvider;
-import com.jozufozu.flywheel.api.vertex.VertexViewProviderRegistry;
-import com.mojang.blaze3d.vertex.VertexFormat;
-
-import net.minecraft.client.renderer.RenderType;
-
-public class DrawBufferSet {
- private final RenderType renderType;
- private final VertexFormat format;
- private final boolean sortOnUpload;
- private final int stride;
- private final VertexViewProvider provider;
- private final Map buffers = new EnumMap<>(RenderStage.class);
-
- public DrawBufferSet(RenderType renderType, boolean sortOnUpload) {
- this.renderType = renderType;
- this.sortOnUpload = sortOnUpload;
- format = renderType.format();
- stride = format.getVertexSize();
- provider = VertexViewProviderRegistry.getProvider(format);
- }
-
- public DrawBuffer getBuffer(RenderStage stage) {
- return buffers.computeIfAbsent(stage, renderStage -> new DrawBuffer(renderType, format, stride, sortOnUpload, provider));
- }
-}
diff --git a/src/main/java/com/jozufozu/flywheel/extension/RenderTypeExtension.java b/src/main/java/com/jozufozu/flywheel/extension/RenderTypeExtension.java
deleted file mode 100644
index d132ab426..000000000
--- a/src/main/java/com/jozufozu/flywheel/extension/RenderTypeExtension.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.jozufozu.flywheel.extension;
-
-import com.jozufozu.flywheel.backend.engine.batching.DrawBufferSet;
-
-import net.minecraft.client.renderer.RenderType;
-
-/**
- * Duck interface to make RenderType store a DrawBufferSet.
- *
- * @see RenderType
- */
-public interface RenderTypeExtension {
- /**
- * @return The DrawBufferSet associated with this RenderType.
- */
- DrawBufferSet flywheel$getDrawBufferSet();
-
- /**
- * Helper function to cast a RenderType to a RenderTypeExtension and get its DrawBufferSet.
- * @param type The RenderType to get the DrawBufferSet from.
- * @return The DrawBufferSet associated with the given RenderType.
- */
- static DrawBufferSet getDrawBufferSet(RenderType type) {
- return ((RenderTypeExtension) type).flywheel$getDrawBufferSet();
- }
-}
diff --git a/src/main/java/com/jozufozu/flywheel/mixin/RenderTypeMixin.java b/src/main/java/com/jozufozu/flywheel/mixin/RenderTypeMixin.java
deleted file mode 100644
index 1644c2c08..000000000
--- a/src/main/java/com/jozufozu/flywheel/mixin/RenderTypeMixin.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.jozufozu.flywheel.mixin;
-
-import org.jetbrains.annotations.NotNull;
-import org.spongepowered.asm.mixin.Final;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.Unique;
-
-import com.jozufozu.flywheel.backend.engine.batching.DrawBufferSet;
-import com.jozufozu.flywheel.extension.RenderTypeExtension;
-
-import net.minecraft.client.renderer.RenderType;
-
-@Mixin(RenderType.class)
-abstract class RenderTypeMixin implements RenderTypeExtension {
- @Shadow
- @Final
- private boolean sortOnUpload;
-
- @Unique
- private DrawBufferSet flywheel$drawBufferSet;
-
- @Override
- @NotNull
- public DrawBufferSet flywheel$getDrawBufferSet() {
- if (flywheel$drawBufferSet == null) {
- flywheel$drawBufferSet = new DrawBufferSet((RenderType) (Object) this, sortOnUpload);
- }
- return flywheel$drawBufferSet;
- }
-}
diff --git a/src/main/resources/flywheel.mixins.json b/src/main/resources/flywheel.mixins.json
index 5d0885cc2..396e1b26f 100644
--- a/src/main/resources/flywheel.mixins.json
+++ b/src/main/resources/flywheel.mixins.json
@@ -16,7 +16,6 @@
"LightUpdateMixin",
"MinecraftMixin",
"PoseStackMixin",
- "RenderTypeMixin",
"VertexFormatMixin",
"fix.FixFabulousDepthMixin",
"fix.FixNormalScalingMixin",