Skip to content

Commit 68269ef

Browse files
committed
Revert "swap outline renderers to transform the baked quads directly"
This reverts commit 8004e0e.
1 parent 086b5b8 commit 68269ef

File tree

4 files changed

+66
-17
lines changed

4 files changed

+66
-17
lines changed

src/main/java/mekanism/client/render/MekanismRenderer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,9 @@ public static void onStitch(TextureAtlasStitchedEvent event) {
308308
RenderDimensionalStabilizer.resetCachedVisuals();
309309
RenderFluidTank.resetCachedModels();
310310
RenderNutritionalLiquifier.resetCachedModels();
311+
RenderPigmentMixer.resetCached();
311312
RenderMechanicalPipe.onStitch();
313+
RenderSeismicVibrator.resetCached();
312314
RenderTickHandler.resetCached();
313315
RenderTeleporter.resetCachedModels();
314316

src/main/java/mekanism/client/render/RenderTickHandler.java

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import mekanism.client.render.armor.ISpecialGear;
2020
import mekanism.client.render.armor.MekaSuitArmor;
2121
import mekanism.client.render.hud.RadiationOverlay;
22+
import mekanism.client.render.lib.Quad;
23+
import mekanism.client.render.lib.QuadUtils;
2224
import mekanism.client.render.lib.Vertex;
2325
import mekanism.client.render.lib.effect.BoltRenderer;
2426
import mekanism.client.render.tileentity.IWireFrameRenderer;
@@ -54,7 +56,6 @@
5456
import net.minecraft.client.renderer.MultiBufferSource;
5557
import net.minecraft.client.renderer.RenderType;
5658
import net.minecraft.client.renderer.Sheets;
57-
import net.minecraft.client.renderer.block.model.BakedQuad;
5859
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
5960
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
6061
import net.minecraft.client.renderer.texture.OverlayTexture;
@@ -479,19 +480,54 @@ public void onBlockHover(RenderHighlightEvent.Block event) {
479480
}
480481

481482
private void renderQuadsWireFrame(BlockState state, VertexConsumer buffer, PoseStack matrix, RandomSource rand, int red, int green, int blue, int alpha) {
482-
//TODO: Eventually we may want to add support for Model data and maybe render type
483-
ModelData modelData = ModelData.EMPTY;
484-
BakedModel bakedModel = Minecraft.getInstance().getBlockRenderer().getBlockModel(state);
485-
for (Direction direction : EnumUtils.DIRECTIONS) {
486-
for (BakedQuad quad : bakedModel.getQuads(state, direction, rand, modelData, null)) {
487-
buffer.putBulkData(matrix.last(), quad, red, green, blue, alpha, 0, OverlayTexture.NO_OVERLAY, false);
483+
List<Vertex[]> vertices = cachedWireFrames.get(state);
484+
if (vertices == null) {
485+
BakedModel bakedModel = Minecraft.getInstance().getBlockRenderer().getBlockModel(state);
486+
//TODO: Eventually we may want to add support for Model data and maybe render type
487+
ModelData modelData = ModelData.EMPTY;
488+
vertices = new ArrayList<>();
489+
for (Direction direction : EnumUtils.DIRECTIONS) {
490+
for (Quad quad : QuadUtils.unpack(bakedModel.getQuads(state, direction, rand, modelData, null))) {
491+
vertices.add(quad.getVertices());
492+
}
493+
}
494+
for (Quad quad : QuadUtils.unpack(bakedModel.getQuads(state, null, rand, modelData, null))) {
495+
vertices.add(quad.getVertices());
488496
}
497+
cachedWireFrames.put(state, vertices);
489498
}
490-
for (BakedQuad quad : bakedModel.getQuads(state, null, rand, modelData, null)) {
491-
buffer.putBulkData(matrix.last(), quad, red, green, blue, alpha, 0, OverlayTexture.NO_OVERLAY, false);
499+
renderVertexWireFrame(vertices, buffer, matrix.last().pose(), red, green, blue, alpha);
500+
}
501+
502+
public static void renderVertexWireFrame(List<Vertex[]> allVertices, VertexConsumer buffer, Matrix4f matrix, int red, int green, int blue, int alpha) {
503+
for (Vertex[] vertices : allVertices) {
504+
Vector4f vertex = getVertex(matrix, vertices[0]);
505+
Vector3f normal = vertices[0].getNormal();
506+
Vector4f vertex2 = getVertex(matrix, vertices[1]);
507+
Vector3f normal2 = vertices[1].getNormal();
508+
Vector4f vertex3 = getVertex(matrix, vertices[2]);
509+
Vector3f normal3 = vertices[2].getNormal();
510+
Vector4f vertex4 = getVertex(matrix, vertices[3]);
511+
Vector3f normal4 = vertices[3].getNormal();
512+
buffer.vertex(vertex.x(), vertex.y(), vertex.z()).color(red, green, blue, alpha).normal(normal.x(), normal.y(), normal.z()).endVertex();
513+
buffer.vertex(vertex2.x(), vertex2.y(), vertex2.z()).color(red, green, blue, alpha).normal(normal2.x(), normal2.y(), normal2.z()).endVertex();
514+
515+
buffer.vertex(vertex3.x(), vertex3.y(), vertex3.z()).color(red, green, blue, alpha).normal(normal3.x(), normal3.y(), normal3.z()).endVertex();
516+
buffer.vertex(vertex4.x(), vertex4.y(), vertex4.z()).color(red, green, blue, alpha).normal(normal4.x(), normal4.y(), normal4.z()).endVertex();
517+
518+
buffer.vertex(vertex2.x(), vertex2.y(), vertex2.z()).color(red, green, blue, alpha).normal(normal2.x(), normal2.y(), normal2.z()).endVertex();
519+
buffer.vertex(vertex3.x(), vertex3.y(), vertex3.z()).color(red, green, blue, alpha).normal(normal3.x(), normal3.y(), normal3.z()).endVertex();
520+
521+
buffer.vertex(vertex.x(), vertex.y(), vertex.z()).color(red, green, blue, alpha).normal(normal.x(), normal.y(), normal.z()).endVertex();
522+
buffer.vertex(vertex4.x(), vertex4.y(), vertex4.z()).color(red, green, blue, alpha).normal(normal4.x(), normal4.y(), normal4.z()).endVertex();
492523
}
493524
}
494525

526+
private static Vector4f getVertex(Matrix4f matrix4f, Vertex vertex) {
527+
Vector4f vector4f = new Vector4f((float) vertex.getPos().x(), (float) vertex.getPos().y(), (float) vertex.getPos().z(), 1);
528+
return vector4f.mul(matrix4f);
529+
}
530+
495531
private void renderJetpackSmoke(Level world, Vec3 pos, Vec3 motion) {
496532
world.addParticle(MekanismParticleTypes.JETPACK_FLAME.get(), pos.x, pos.y, pos.z, motion.x, motion.y, motion.z);
497533
world.addParticle(MekanismParticleTypes.JETPACK_SMOKE.get(), pos.x, pos.y, pos.z, motion.x, motion.y, motion.z);

src/main/java/mekanism/client/render/tileentity/RenderPigmentMixer.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import net.minecraft.client.renderer.Sheets;
1818
import net.minecraft.client.renderer.block.model.BakedQuad;
1919
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
20-
import net.minecraft.client.renderer.texture.OverlayTexture;
2120
import net.minecraft.util.profiling.ProfilerFiller;
2221
import net.minecraft.world.level.block.entity.BlockEntity;
2322
import net.minecraft.world.level.block.state.BlockState;
@@ -27,8 +26,13 @@
2726
@NothingNullByDefault
2827
public class RenderPigmentMixer extends MekanismTileEntityRenderer<TileEntityPigmentMixer> implements IWireFrameRenderer {
2928

29+
private static final List<Vertex[]> vertices = new ArrayList<>();
3030
private static final float SHAFT_SPEED = 5F;
3131

32+
public static void resetCached() {
33+
vertices.clear();
34+
}
35+
3236
public RenderPigmentMixer(BlockEntityRendererProvider.Context context) {
3337
super(context);
3438
}
@@ -69,10 +73,11 @@ public boolean isCombined() {
6973
@Override
7074
public void renderWireFrame(BlockEntity tile, float partialTick, PoseStack matrix, VertexConsumer buffer, int red, int green, int blue, int alpha) {
7175
if (tile instanceof TileEntityPigmentMixer mixer) {
72-
setupRenderer(mixer, partialTick, matrix);
73-
for (BakedQuad quad : MekanismModelCache.INSTANCE.PIGMENT_MIXER_SHAFT.getQuads(tile.getLevel().random)) {
74-
buffer.putBulkData(matrix.last(), quad, red, green, blue, alpha, 0, OverlayTexture.NO_OVERLAY, false);
76+
if (vertices.isEmpty()) {
77+
MekanismModelCache.INSTANCE.PIGMENT_MIXER_SHAFT.collectQuadVertices(vertices, tile.getLevel().random);
7578
}
79+
setupRenderer(mixer, partialTick, matrix);
80+
RenderTickHandler.renderVertexWireFrame(vertices, buffer, matrix.last().pose(), red, green, blue, alpha);
7681
matrix.popPose();
7782
}
7883
}

src/main/java/mekanism/client/render/tileentity/RenderSeismicVibrator.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import net.minecraft.client.renderer.Sheets;
1616
import net.minecraft.client.renderer.block.model.BakedQuad;
1717
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
18-
import net.minecraft.client.renderer.texture.OverlayTexture;
1918
import net.minecraft.core.BlockPos;
2019
import net.minecraft.util.profiling.ProfilerFiller;
2120
import net.minecraft.world.level.block.entity.BlockEntity;
@@ -24,6 +23,12 @@
2423
@NothingNullByDefault
2524
public class RenderSeismicVibrator extends MekanismTileEntityRenderer<TileEntitySeismicVibrator> implements IWireFrameRenderer {
2625

26+
private static final List<Vertex[]> vertices = new ArrayList<>();
27+
28+
public static void resetCached() {
29+
vertices.clear();
30+
}
31+
2732
public RenderSeismicVibrator(BlockEntityRendererProvider.Context context) {
2833
super(context);
2934
}
@@ -53,10 +58,11 @@ public boolean isCombined() {
5358
@Override
5459
public void renderWireFrame(BlockEntity tile, float partialTick, PoseStack matrix, VertexConsumer buffer, int red, int green, int blue, int alpha) {
5560
if (tile instanceof TileEntitySeismicVibrator vibrator) {
56-
setupRenderer(vibrator, partialTick, matrix);
57-
for (BakedQuad quad : MekanismModelCache.INSTANCE.VIBRATOR_SHAFT.getQuads(tile.getLevel().random)) {
58-
buffer.putBulkData(matrix.last(), quad, red, green, blue, alpha, 0, OverlayTexture.NO_OVERLAY, false);
61+
if (vertices.isEmpty()) {
62+
MekanismModelCache.INSTANCE.VIBRATOR_SHAFT.collectQuadVertices(vertices, tile.getLevel().random);
5963
}
64+
setupRenderer(vibrator, partialTick, matrix);
65+
RenderTickHandler.renderVertexWireFrame(vertices, buffer, matrix.last().pose(), red, green, blue, alpha);
6066
matrix.popPose();
6167
}
6268
}

0 commit comments

Comments
 (0)