Fix issues with QuadBakingVertexConsumer and Forge's OBJ loader (#10065)

This commit is contained in:
Martijn van den Brand authored and GitHub committed 2024-08-22 17:26:44 -07:00
1 parent 93c72d2d92
commit 26d0f7282f
8 files changed
+140 -10

No files matched your search

@@ -490,7 +490,7 @@ public class ObjModel extends SimpleUnbakedGeometry<ObjModel>
}
}
return Pair.of(quadBaker.getQuad(), cull);
return Pair.of(quadBaker.build(), cull);
}
public CompositeRenderable bakeRenderable(IGeometryBakingContext configuration)
@@ -33,11 +33,12 @@ public class QuadBakingVertexConsumer implements VertexConsumer
for (var element : DefaultVertexFormat.BLOCK.getElements())
map.put(element, DefaultVertexFormat.BLOCK.getOffset(i++) / 4); // Int offset
});
private static final int QUAD_DATA_SIZE = IQuadTransformer.STRIDE * 4;
private static final int MAX_VERTICES = 4;
private static final int QUAD_DATA_SIZE = IQuadTransformer.STRIDE * MAX_VERTICES;
private final Consumer<BakedQuad> quadConsumer;
int vertexIndex = 0;
int vertexIndex = -1;
private int[] quadData = new int[QUAD_DATA_SIZE];
private int tintIndex;
@@ -54,7 +55,8 @@ public class QuadBakingVertexConsumer implements VertexConsumer
@Override
public VertexConsumer addVertex(float x, float y, float z)
{
endVertex();
if (vertexIndex++ == MAX_VERTICES)
build();
int offset = vertexIndex * IQuadTransformer.STRIDE + IQuadTransformer.POSITION;
quadData[offset] = Float.floatToRawIntBits((float) x);
@@ -124,16 +126,14 @@ public class QuadBakingVertexConsumer implements VertexConsumer
return this;
}
private void endVertex()
public BakedQuad build()
{
if (vertexIndex != 4) {
++vertexIndex;
return;
}
BakedQuad quad = new BakedQuad(quadData, tintIndex, direction, sprite, shade, hasAmbientOcclusion);
// We have a full quad, pass it to the consumer and reset
quadConsumer.accept(new BakedQuad(quadData, tintIndex, direction, sprite, shade, hasAmbientOcclusion));
quadConsumer.accept(quad);
vertexIndex = 0;
quadData = new int[QUAD_DATA_SIZE];
return quad;
}
public void setTintIndex(int tintIndex)