From cb049f5ace4bd789a58f563c9d78089dcf4e5ab1 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Fri, 23 Aug 2024 17:28:11 -0700 Subject: [PATCH] Use vertex buffer offsets instead of pointers --- .../iris/mixin/MixinByteBufferBuilder.java | 17 ++++++++++ .../mixin/vertices/MixinBufferBuilder.java | 33 ++++++++++++------- .../vertices/BufferBuilderPolygonView.java | 18 +++++----- .../iris/vertices/MojangBufferAccessor.java | 5 +++ common/src/main/resources/mixins.iris.json | 1 + 5 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 common/src/main/java/net/irisshaders/iris/mixin/MixinByteBufferBuilder.java create mode 100644 common/src/main/java/net/irisshaders/iris/vertices/MojangBufferAccessor.java diff --git a/common/src/main/java/net/irisshaders/iris/mixin/MixinByteBufferBuilder.java b/common/src/main/java/net/irisshaders/iris/mixin/MixinByteBufferBuilder.java new file mode 100644 index 0000000000..25b8039664 --- /dev/null +++ b/common/src/main/java/net/irisshaders/iris/mixin/MixinByteBufferBuilder.java @@ -0,0 +1,17 @@ +package net.irisshaders.iris.mixin; + +import com.mojang.blaze3d.vertex.ByteBufferBuilder; +import net.irisshaders.iris.vertices.MojangBufferAccessor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(ByteBufferBuilder.class) +public class MixinByteBufferBuilder implements MojangBufferAccessor { + @Shadow + long pointer; + + @Override + public long getPointer() { + return this.pointer; + } +} diff --git a/common/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java b/common/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java index 980984b94a..bdbd7aa1df 100644 --- a/common/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java +++ b/common/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java @@ -1,6 +1,7 @@ package net.irisshaders.iris.mixin.vertices; import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.ByteBufferBuilder; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexFormat; @@ -12,6 +13,7 @@ import net.irisshaders.iris.vertices.ExtendedDataHelper; import net.irisshaders.iris.vertices.ImmediateState; import net.irisshaders.iris.vertices.IrisVertexFormats; +import net.irisshaders.iris.vertices.MojangBufferAccessor; import net.irisshaders.iris.vertices.NormI8; import net.irisshaders.iris.vertices.NormalHelper; import org.joml.Vector3f; @@ -76,7 +78,7 @@ public abstract class MixinBufferBuilder implements VertexConsumer, BlockSensiti @Unique private int currentLocalPosZ; @Unique - private final long[] vertexPointers = new long[4]; + private final long[] vertexOffsets = new long[4]; @Shadow public abstract VertexConsumer setNormal(float f, float g, float h); @@ -84,6 +86,10 @@ public abstract class MixinBufferBuilder implements VertexConsumer, BlockSensiti @Shadow protected abstract long beginElement(VertexFormatElement vertexFormatElement); + @Shadow + @Final + private ByteBufferBuilder buffer; + @ModifyVariable(method = "", at = @At(value = "FIELD", target = "Lcom/mojang/blaze3d/vertex/VertexFormatElement;POSITION:Lcom/mojang/blaze3d/vertex/VertexFormatElement;", ordinal = 0), argsOnly = true) private VertexFormat iris$extendFormat(VertexFormat format) { boolean iris$isTerrain = false; @@ -170,7 +176,7 @@ private void injectMidBlock(float x, float y, float z, CallbackInfoReturnable