Skip to content

Commit c30d169

Browse files
committed
Fix StarVBOw NullPointerException in renderSky (#11)
generateStars() was calling tessellator.draw() instead of creating a VertexBuffer, leaving starVBO nuull and crashing on bindBuffer()
1 parent 23150bd commit c30d169

2 files changed

Lines changed: 32 additions & 12 deletions

File tree

src/main/java/jp/s12kuma01/celeritasextra/client/RenderStars.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package jp.s12kuma01.celeritasextra.client;
22

33
import net.minecraft.client.renderer.BufferBuilder;
4-
import net.minecraft.client.renderer.Tessellator;
5-
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
64

75
import java.util.Random;
86

@@ -14,17 +12,17 @@
1412
public class RenderStars {
1513

1614
/**
17-
* Generate star vertex data into the tessellator.
15+
* Generate star vertex data into an already-begun BufferBuilder.
1816
* Called from the mixin that overrides RenderGlobal.generateStars().
1917
* Uses the same seed (10842L) and algorithm as vanilla for deterministic rendering.
18+
*
19+
* @param buffer a BufferBuilder that has already had begin() called
20+
* @param totalStars number of stars to generate
2021
*/
21-
public static void generateStars(int totalStars) {
22+
public static void generateStars(BufferBuilder buffer, int totalStars) {
2223
if (totalStars <= 0) return;
2324

2425
Random random = new Random(10842L);
25-
Tessellator tessellator = Tessellator.getInstance();
26-
BufferBuilder buffer = tessellator.getBuffer();
27-
buffer.begin(7, DefaultVertexFormats.POSITION);
2826

2927
for (int i = 0; i < totalStars; ++i) {
3028
double x = random.nextFloat() * 2.0F - 1.0F;
@@ -69,6 +67,5 @@ public static void generateStars(int totalStars) {
6967
}
7068
}
7169

72-
tessellator.draw();
7370
}
7471
}

src/main/java/jp/s12kuma01/celeritasextra/mixin/render/sky/MixinRenderGlobalStars.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
55
import jp.s12kuma01.celeritasextra.client.CeleritasExtraClientMod;
66
import jp.s12kuma01.celeritasextra.client.RenderStars;
7+
import net.minecraft.client.renderer.BufferBuilder;
78
import net.minecraft.client.renderer.RenderGlobal;
9+
import net.minecraft.client.renderer.Tessellator;
10+
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
11+
import net.minecraft.client.renderer.vertex.VertexBuffer;
12+
import net.minecraft.client.renderer.vertex.VertexFormat;
813
import net.minecraft.world.World;
914
import org.spongepowered.asm.mixin.Mixin;
1015
import org.spongepowered.asm.mixin.Overwrite;
11-
import org.spongepowered.asm.mixin.Unique;
16+
import org.spongepowered.asm.mixin.Shadow;
1217
import org.spongepowered.asm.mixin.injection.At;
1318

1419
/**
@@ -19,8 +24,11 @@
1924
@Mixin(RenderGlobal.class)
2025
public class MixinRenderGlobalStars {
2126

22-
@Unique
23-
private int celeritasExtra$prevTotalStars = -1;
27+
@Shadow
28+
private VertexBuffer starVBO;
29+
30+
@Shadow
31+
private VertexFormat vertexBufferFormat;
2432

2533
/**
2634
* Control star rendering by wrapping the star brightness calculation.
@@ -49,7 +57,22 @@ private float wrapGetStarBrightness(World world, float partialTicks, Operation<F
4957
*/
5058
@Overwrite
5159
private void generateStars() {
60+
Tessellator tessellator = Tessellator.getInstance();
61+
BufferBuilder buffer = tessellator.getBuffer();
62+
63+
if (this.starVBO != null) {
64+
this.starVBO.deleteGlBuffers();
65+
}
66+
67+
this.starVBO = new VertexBuffer(this.vertexBufferFormat);
68+
69+
buffer.begin(7, DefaultVertexFormats.POSITION);
70+
5271
int totalStars = CeleritasExtraClientMod.options().detailSettings.totalStars;
53-
RenderStars.generateStars(totalStars);
72+
RenderStars.generateStars(buffer, totalStars);
73+
74+
buffer.finishDrawing();
75+
buffer.reset();
76+
this.starVBO.bufferData(buffer.getByteBuffer());
5477
}
5578
}

0 commit comments

Comments
 (0)