Skip to content

Commit

Permalink
offsets dont need double precision, but floats are not precise enough
Browse files Browse the repository at this point in the history
  • Loading branch information
RacoonDog committed Oct 6, 2024
1 parent 03b2f88 commit 70a11a4
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
import net.minecraft.client.render.VertexConsumerProvider;

public interface IVertexConsumerProvider extends VertexConsumerProvider {
void setOffset(double offsetX, double offsetY, double offsetZ);
void setOffset(int offsetX, int offsetY, int offsetZ);
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ public void setColor(Color color) {
}

@Override
public void setOffset(double offsetX, double offsetY, double offsetZ) {
public void setOffset(int offsetX, int offsetY, int offsetZ) {
vertexConsumer.setOffset(offsetX, offsetY, offsetZ);
}

public static class MeshVertexConsumer implements VertexConsumer {
private final Mesh mesh;

private double offsetX, offsetY, offsetZ;
private int offsetX, offsetY, offsetZ;

private final double[] xs = new double[4];
private final double[] ys = new double[4];
Expand All @@ -47,17 +47,17 @@ public MeshVertexConsumer(Mesh mesh) {
this.mesh = mesh;
}

public void setOffset(double offsetX, double offsetY, double offsetZ) {
public void setOffset(int offsetX, int offsetY, int offsetZ) {
this.offsetX = offsetX;
this.offsetY = offsetY;
this.offsetZ = offsetZ;
}

@Override
public VertexConsumer vertex(float x, float y, float z) {
xs[i] = offsetX + x;
ys[i] = offsetY + y;
zs[i] = offsetZ + z;
xs[i] = (double) offsetX + x;
ys[i] = (double) offsetY + y;
zs[i] = (double) offsetZ + z;

if (++i >= 4) {
mesh.quad(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt
vertexConsumerProvider.setOffset(0, 0, 0);
}

public static void render(BlockPos pos, BlockState state, IVertexConsumerProvider consumerProvider) {
public static void render(BlockPos pos, BlockState state, VertexConsumerProvider consumerProvider) {
if (state.getRenderType() != BlockRenderType.MODEL) return;

VertexConsumer consumer = consumerProvider.getBuffer(RenderLayer.getSolid());
Expand All @@ -51,9 +51,8 @@ public static void render(BlockPos pos, BlockState state, IVertexConsumerProvide
float offsetY = (float) offset.y;
float offsetZ = (float) offset.z;

//noinspection ForLoopReplaceableByForEach
for (int i = 0; i < DIRECTIONS.length; i++) {
List<BakedQuad> list = model.getQuads(state, DIRECTIONS[i], RANDOM);
for (Direction direction : DIRECTIONS) {
List<BakedQuad> list = model.getQuads(state, direction, RANDOM);
if (!list.isEmpty()) renderQuads(list, offsetX, offsetY, offsetZ, consumer);
}

Expand All @@ -62,9 +61,8 @@ public static void render(BlockPos pos, BlockState state, IVertexConsumerProvide
}

private static void renderQuads(List<BakedQuad> quads, float offsetX, float offsetY, float offsetZ, VertexConsumer consumer) {
//noinspection ForLoopReplaceableByForEach
for (int i = 0; i < quads.size(); i++) {
IBakedQuad quad = (IBakedQuad) quads.get(i);
for (BakedQuad bakedQuad : quads) {
IBakedQuad quad = (IBakedQuad) bakedQuad;

for (int j = 0; j < 4; j++) {
float x = quad.meteor$getX(j);
Expand Down

0 comments on commit 70a11a4

Please sign in to comment.