Skip to content

Commit fdcd441

Browse files
committed
Up
2 parents 84a28ca + c349262 commit fdcd441

File tree

9 files changed

+499
-92
lines changed

9 files changed

+499
-92
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ loom.platform = forge
99
forge_version=47.1.84
1010

1111
# Mod Properties
12-
mod_version = 1.6.15
12+
mod_version = 1.6.16
1313
maven_group = net.coderbot
1414
archives_base_name = oculus
1515

src/main/java/net/coderbot/batchedentityrendering/impl/FullyBufferedMultiBufferSource.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.mojang.blaze3d.vertex.BufferBuilder;
44
import com.mojang.blaze3d.vertex.VertexConsumer;
5+
import me.jellysquid.mods.sodium.client.render.vertex.buffer.ExtendedBufferBuilder;
6+
import me.jellysquid.mods.sodium.client.render.vertex.buffer.SodiumBufferBuilder;
57
import net.coderbot.batchedentityrendering.impl.ordering.GraphTranslucencyRenderOrderManager;
68
import net.coderbot.batchedentityrendering.impl.ordering.RenderOrderManager;
79
import net.coderbot.iris.fantastic.WrappingMultiBufferSource;
@@ -90,7 +92,16 @@ public VertexConsumer getBuffer(RenderType renderType) {
9092
affinities.put(renderType, affinity);
9193
}
9294

93-
return builders[affinity].getBuffer(renderType);
95+
VertexConsumer buffer = builders[affinity].getBuffer(renderType);
96+
97+
if (buffer instanceof ExtendedBufferBuilder bufferBuilder) {
98+
SodiumBufferBuilder replacement = bufferBuilder.sodium$getDelegate();
99+
if (replacement != null) {
100+
return replacement;
101+
}
102+
}
103+
104+
return buffer;
94105
}
95106

96107
private void removeReady() {

src/main/java/net/coderbot/batchedentityrendering/mixin/MixinBufferBuilder_SegmentRendering.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22

33
import com.mojang.blaze3d.vertex.BufferBuilder;
44
import com.mojang.blaze3d.vertex.VertexFormat;
5+
import net.caffeinemc.mods.sodium.api.memory.MemoryIntrinsics;
56
import net.coderbot.batchedentityrendering.impl.BufferBuilderExt;
67
import net.minecraft.util.Mth;
8+
import org.lwjgl.system.MemoryUtil;
9+
import org.spongepowered.asm.mixin.Dynamic;
710
import org.spongepowered.asm.mixin.Final;
811
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.Pseudo;
913
import org.spongepowered.asm.mixin.Shadow;
1014
import org.spongepowered.asm.mixin.Unique;
1115
import org.spongepowered.asm.mixin.injection.At;
1216
import org.spongepowered.asm.mixin.injection.Inject;
17+
import org.spongepowered.asm.mixin.injection.Redirect;
1318
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1419
import com.mojang.blaze3d.vertex.BufferBuilder;
1520
import com.mojang.blaze3d.vertex.VertexFormat;
@@ -18,7 +23,7 @@
1823
import java.nio.ByteBuffer;
1924
import java.util.List;
2025

21-
@Mixin(BufferBuilder.class)
26+
@Mixin(value = BufferBuilder.class, priority = 1010)
2227
public class MixinBufferBuilder_SegmentRendering implements BufferBuilderExt {
2328
@Shadow
2429
private ByteBuffer buffer;
@@ -53,7 +58,7 @@ public void splitStrip() {
5358

5459
private void duplicateLastVertex() {
5560
int i = this.format.getVertexSize();
56-
this.buffer.put(this.nextElementByte, this.buffer, this.nextElementByte - i, i);
61+
MemoryIntrinsics.copyMemory(MemoryUtil.memAddress(this.buffer, this.nextElementByte - i), MemoryUtil.memAddress(this.buffer, this.nextElementByte), i);
5762
this.nextElementByte += i;
5863
++this.vertices;
5964
this.ensureVertexCapacity();
@@ -71,4 +76,13 @@ private void duplicateLastVertex() {
7176
duplicateLastVertex();
7277
}
7378
}
79+
80+
@Dynamic
81+
@Inject(method = "sodium$moveToNextVertex", at = @At("RETURN"), require = 0)
82+
private void batchedentityrendering$onNextSodium(CallbackInfo ci) {
83+
if (dupeNextVertex) {
84+
dupeNextVertex = false;
85+
duplicateLastVertex();
86+
}
87+
}
7488
}

src/main/java/net/coderbot/iris/mixin/vertices/MixinBufferBuilder.java

Lines changed: 114 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,24 @@
88
import com.mojang.blaze3d.vertex.VertexFormat;
99
import com.mojang.blaze3d.vertex.VertexFormatElement;
1010
import net.coderbot.iris.block_rendering.BlockRenderingSettings;
11-
import org.joml.Vector3f;
12-
import net.coderbot.iris.vertices.NormI8;
13-
import org.jetbrains.annotations.NotNull;
1411
import net.coderbot.iris.uniforms.CapturedRenderingState;
1512
import net.coderbot.iris.vertices.BlockSensitiveBufferBuilder;
1613
import net.coderbot.iris.vertices.BufferBuilderPolygonView;
1714
import net.coderbot.iris.vertices.ExtendedDataHelper;
1815
import net.coderbot.iris.vertices.ExtendingBufferBuilder;
16+
import net.coderbot.iris.vertices.IrisExtendedBufferBuilder;
1917
import net.coderbot.iris.vertices.IrisVertexFormats;
18+
import net.coderbot.iris.vertices.NormI8;
2019
import net.coderbot.iris.vertices.NormalHelper;
20+
import org.jetbrains.annotations.NotNull;
2121
import org.jetbrains.annotations.Nullable;
22+
import org.joml.Vector3f;
2223
import org.spongepowered.asm.mixin.Mixin;
2324
import org.spongepowered.asm.mixin.Shadow;
2425
import org.spongepowered.asm.mixin.Unique;
2526
import org.spongepowered.asm.mixin.injection.At;
2627
import org.spongepowered.asm.mixin.injection.Inject;
27-
import org.spongepowered.asm.mixin.injection.ModifyArg;
28+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
2829
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
2930

3031
import java.nio.ByteBuffer;
@@ -33,33 +34,27 @@
3334
* Dynamically and transparently extends the vanilla vertex formats with additional data
3435
*/
3536
@Mixin(BufferBuilder.class)
36-
public abstract class MixinBufferBuilder extends DefaultedVertexConsumer implements BufferVertexConsumer, BlockSensitiveBufferBuilder, ExtendingBufferBuilder {
37+
public abstract class MixinBufferBuilder extends DefaultedVertexConsumer implements BufferVertexConsumer, BlockSensitiveBufferBuilder, ExtendingBufferBuilder, IrisExtendedBufferBuilder {
3738
@Unique
38-
private boolean extending;
39+
private boolean iris$shouldNotExtend;
3940

4041
@Unique
41-
private boolean iris$shouldNotExtend = false;
42-
43-
@Unique
44-
private boolean iris$isTerrain = false;
42+
private boolean extending;
4543

4644
@Unique
47-
private int vertexCount;
45+
private boolean iris$isTerrain;
4846

4947
@Unique
50-
private final BufferBuilderPolygonView polygon = new BufferBuilderPolygonView();
51-
52-
@Unique
53-
private final Vector3f normal = new Vector3f();
48+
private boolean injectNormalAndUV1;
5449

5550
@Unique
56-
private boolean injectNormalAndUV1;
51+
private int vertexCount;
5752

5853
@Unique
59-
private short currentBlock;
54+
private short currentBlock = -1;
6055

6156
@Unique
62-
private short currentRenderType;
57+
private short currentRenderType = -1;
6358

6459
@Unique
6560
private int currentLocalPosX;
@@ -70,11 +65,11 @@ public abstract class MixinBufferBuilder extends DefaultedVertexConsumer impleme
7065
@Unique
7166
private int currentLocalPosZ;
7267

73-
@Shadow
74-
private boolean fastFormat;
68+
@Unique
69+
private final BufferBuilderPolygonView polygon = new BufferBuilderPolygonView();
7570

76-
@Shadow
77-
private boolean fullFormat;
71+
@Unique
72+
private final Vector3f normal = new Vector3f();
7873

7974
@Shadow
8075
private ByteBuffer buffer;
@@ -97,9 +92,6 @@ public abstract class MixinBufferBuilder extends DefaultedVertexConsumer impleme
9792
@Shadow
9893
public abstract void putShort(int i, short s);
9994

100-
@Shadow
101-
protected abstract void switchFormat(VertexFormat arg);
102-
10395
@Shadow
10496
public abstract void nextElement();
10597

@@ -110,75 +102,44 @@ public abstract class MixinBufferBuilder extends DefaultedVertexConsumer impleme
110102
iris$shouldNotExtend = false;
111103
}
112104

113-
@Inject(method = "begin", at = @At("HEAD"))
114-
private void iris$onBegin(VertexFormat.Mode drawMode, VertexFormat format, CallbackInfo ci) {
115-
boolean shouldExtend = (!iris$shouldNotExtend) && BlockRenderingSettings.INSTANCE.shouldUseExtendedVertexFormat();
116-
extending = shouldExtend && (format == DefaultVertexFormat.BLOCK || format == DefaultVertexFormat.NEW_ENTITY
117-
|| format == DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP);
118-
vertexCount = 0;
119-
120-
if (extending) {
121-
injectNormalAndUV1 = format == DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP;
122-
}
123-
}
124-
125-
@Inject(method = "begin", at = @At("RETURN"))
126-
private void iris$afterBegin(VertexFormat.Mode drawMode, VertexFormat format, CallbackInfo ci) {
127-
if (extending) {
128-
if (format == DefaultVertexFormat.BLOCK) {
129-
this.switchFormat(IrisVertexFormats.TERRAIN);
130-
this.iris$isTerrain = true;
131-
} else if (format == DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP) {
132-
this.switchFormat(IrisVertexFormats.GLYPH);
133-
this.iris$isTerrain = false;
134-
} else {
135-
this.switchFormat(IrisVertexFormats.ENTITY);
136-
this.iris$isTerrain = false;
137-
}
138-
this.currentElement = this.format.getElements().get(0);
139-
}
140-
}
141-
142105
@Override
143106
public @NotNull VertexConsumer uv2(int pBufferVertexConsumer0, int pInt1) {
144-
145107
return BufferVertexConsumer.super.uv2(pBufferVertexConsumer0, pInt1);
146108
}
147109

148-
@ModifyArg(method = "begin", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/BufferBuilder;switchFormat(Lcom/mojang/blaze3d/vertex/VertexFormat;)V"))
149-
private VertexFormat iris$afterBeginSwitchFormat(VertexFormat arg) {
150-
if (extending) {
151-
if (format == DefaultVertexFormat.BLOCK) {
152-
this.switchFormat(IrisVertexFormats.TERRAIN);
153-
this.iris$isTerrain = true;
154-
} else if (format == DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP) {
155-
this.switchFormat(IrisVertexFormats.GLYPH);
156-
this.iris$isTerrain = false;
157-
} else {
158-
this.switchFormat(IrisVertexFormats.ENTITY);
159-
this.iris$isTerrain = false;
160-
}
161-
}
162-
return arg;
163-
}
164-
165-
166-
167-
@Inject(method = "discard()V", at = @At("HEAD"))
168-
private void iris$onDiscard(CallbackInfo ci) {
110+
@ModifyVariable(method = "begin", at = @At("HEAD"), argsOnly = true)
111+
private VertexFormat iris$extendFormat(VertexFormat format) {
169112
extending = false;
113+
iris$isTerrain = false;
170114
injectNormalAndUV1 = false;
171-
vertexCount = 0;
172-
}
173115

174-
@Inject(method = "switchFormat", at = @At("RETURN"))
175-
private void iris$preventHardcodedVertexWriting(VertexFormat format, CallbackInfo ci) {
176-
if (!extending) {
177-
return;
116+
if (iris$shouldNotExtend || !BlockRenderingSettings.INSTANCE.shouldUseExtendedVertexFormat()) {
117+
return format;
118+
}
119+
120+
if (format == DefaultVertexFormat.BLOCK) {
121+
extending = true;
122+
iris$isTerrain = true;
123+
injectNormalAndUV1 = false;
124+
return IrisVertexFormats.TERRAIN;
125+
} else if (format == DefaultVertexFormat.NEW_ENTITY) {
126+
extending = true;
127+
iris$isTerrain = false;
128+
injectNormalAndUV1 = false;
129+
return IrisVertexFormats.ENTITY;
130+
} else if (format == DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP) {
131+
extending = true;
132+
iris$isTerrain = false;
133+
injectNormalAndUV1 = true;
134+
return IrisVertexFormats.GLYPH;
178135
}
179136

180-
fastFormat = false;
181-
fullFormat = false;
137+
return format;
138+
}
139+
140+
@Inject(method = "reset()V", at = @At("HEAD"))
141+
private void iris$onReset(CallbackInfo ci) {
142+
vertexCount = 0;
182143
}
183144

184145
@Inject(method = "endVertex", at = @At("HEAD"))
@@ -197,7 +158,7 @@ public abstract class MixinBufferBuilder extends DefaultedVertexConsumer impleme
197158
this.putShort(0, currentBlock);
198159
this.putShort(2, currentRenderType);
199160
} else {
200-
// ENTITY_ELEMENT
161+
// ENTITY_ID_ELEMENT
201162
this.putShort(0, (short) CapturedRenderingState.INSTANCE.getCurrentRenderedEntity());
202163
this.putShort(2, (short) CapturedRenderingState.INSTANCE.getCurrentRenderedBlockEntity());
203164
this.putShort(4, (short) CapturedRenderingState.INSTANCE.getCurrentRenderedItem());
@@ -290,6 +251,11 @@ private void fillExtendedData(int vertexAmount) {
290251
}
291252
}
292253

254+
@Unique
255+
private void putInt(int i, int value) {
256+
this.buffer.putInt(this.nextElementByte + i, value);
257+
}
258+
293259
@Override
294260
public void beginBlock(short block, short renderType, int localPosX, int localPosY, int localPosZ) {
295261
this.currentBlock = block;
@@ -308,8 +274,68 @@ public void endBlock() {
308274
this.currentLocalPosZ = 0;
309275
}
310276

311-
@Unique
312-
private void putInt(int i, int value) {
313-
this.buffer.putInt(this.nextElementByte + i, value);
277+
@Override
278+
public VertexFormat iris$format() {
279+
return format;
280+
}
281+
282+
@Override
283+
public VertexFormat.Mode iris$mode() {
284+
return mode;
285+
}
286+
287+
@Override
288+
public boolean iris$extending() {
289+
return extending;
290+
}
291+
292+
@Override
293+
public boolean iris$isTerrain() {
294+
return iris$isTerrain;
295+
}
296+
297+
@Override
298+
public boolean iris$injectNormalAndUV1() {
299+
return injectNormalAndUV1;
300+
}
301+
302+
@Override
303+
public int iris$vertexCount() {
304+
return vertexCount;
305+
}
306+
307+
@Override
308+
public void iris$incrementVertexCount() {
309+
vertexCount++;
310+
}
311+
312+
@Override
313+
public void iris$resetVertexCount() {
314+
vertexCount = 0;
315+
}
316+
317+
@Override
318+
public short iris$currentBlock() {
319+
return currentBlock;
320+
}
321+
322+
@Override
323+
public short iris$currentRenderType() {
324+
return currentRenderType;
325+
}
326+
327+
@Override
328+
public int iris$currentLocalPosX() {
329+
return currentLocalPosX;
330+
}
331+
332+
@Override
333+
public int iris$currentLocalPosY() {
334+
return currentLocalPosY;
335+
}
336+
337+
@Override
338+
public int iris$currentLocalPosZ() {
339+
return currentLocalPosZ;
314340
}
315341
}

0 commit comments

Comments
 (0)