fix some broken shapes and text rendering on background. Still doublesiding doesn't work properly until I got to renderpasses

This commit is contained in:
gnembon committed 2025-03-22 15:27:01 +01:00
1 parent 57df043efa
commit 41a7d8df46
1 file changed
+73 -24
@@ -526,7 +526,7 @@ public class ShapesRenderer
MultiBufferSource.BufferSource immediate = MultiBufferSource.immediate(new ByteBufferBuilder(RenderType.TRANSIENT_BUFFER_SIZE)); MultiBufferSource.BufferSource immediate = MultiBufferSource.immediate(new ByteBufferBuilder(RenderType.TRANSIENT_BUFFER_SIZE));
// text doesn't appear if backgroud is set // text doesn't appear if backgroud is set
///script run draw_shape('label', 100, 'pos', [200, 100, 200], 'text', 'Hewwo World!', 'color', 0xffffffff, 'fill', 0x33333333) ///script run draw_shape('label', 100, 'pos', [200, 100, 200], 'text', 'Hewwo World!', 'color', 0xffffffff, 'fill', 0x33333333)
textRenderer.drawInBatch(shape.value, text_x, 0.0F, shape.textcolor, false, matrices.last().pose(), immediate, Font.DisplayMode.NORMAL, shape.textbck, 15728880); textRenderer.drawInBatch(shape.value, text_x, 0.0F, shape.textcolor, false, matrices.last().pose(), immediate, Font.DisplayMode.SEE_THROUGH, shape.textbck, 15728880);
immediate.endBatch(); immediate.endBatch();
matrices.popPose(); matrices.popPose();
////RenderSystem.enableCull(); ////RenderSystem.enableCull();
@@ -629,6 +629,7 @@ public class ShapesRenderer
public static class RenderedPolyface extends RenderedShape<ShapeDispatcher.Polyface> public static class RenderedPolyface extends RenderedShape<ShapeDispatcher.Polyface>
{ {
// mode now can only be 4, 5, or 6
private static final VertexFormat.Mode[] faceIndices = new VertexFormat.Mode[]{ private static final VertexFormat.Mode[] faceIndices = new VertexFormat.Mode[]{
Mode.LINES, Mode.LINE_STRIP, Mode.DEBUG_LINES, Mode.DEBUG_LINE_STRIP, Mode.TRIANGLES, Mode.TRIANGLE_STRIP, Mode.TRIANGLE_FAN, Mode.QUADS}; Mode.LINES, Mode.LINE_STRIP, Mode.DEBUG_LINES, Mode.DEBUG_LINE_STRIP, Mode.TRIANGLES, Mode.TRIANGLE_STRIP, Mode.TRIANGLE_FAN, Mode.QUADS};
@@ -637,9 +638,9 @@ public class ShapesRenderer
RenderType.debugLineStrip(1), RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1), RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1), RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1), // TODO wrong RenderType.debugTriangleFan(), // TODO wrong
RenderType.debugLineStrip(1), // TODO wrong RenderType.debugTriangleFan(), // TODO wrong
RenderType.debugLineStrip(1), RenderType.debugTriangleFan(),
RenderType.debugQuads() RenderType.debugQuads()
}; };
@@ -714,7 +715,7 @@ public class ShapesRenderer
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
if (shape.inneredges) if (shape.inneredges)
{ {
BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builderr = tesselator.begin(Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR);
for (int i = 1; i < shape.vertexList.size() - 1; i++) for (int i = 1; i < shape.vertexList.size() - 1; i++)
{ {
Vec3 vec = shape.vertexList.get(i); Vec3 vec = shape.vertexList.get(i);
@@ -722,7 +723,7 @@ public class ShapesRenderer
{ {
vec = shape.relativiseRender(client.level, vec, partialTick); vec = shape.relativiseRender(client.level, vec, partialTick);
} }
builderr.addVertex((float) (vec0.x() - cx), (float) (vec0.y() - cy), (float) (vec0.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builderr.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builderr.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builderr.addVertex((float) (vec0.x() - cx), (float) (vec0.y() - cy), (float) (vec0.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builderr.addVertex((float) (vec0.x() - cx), (float) (vec0.y() - cy), (float) (vec0.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
} }
@@ -776,9 +777,10 @@ public class ShapesRenderer
} }
if (shape.mode == 4) if (shape.mode == 4)
{ {
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); //
for (int i = 0; i < shape.vertexList.size(); i++) for (int i = 0; i < shape.vertexList.size(); i++)
{ {
BufferBuilder builder = tesselator.begin(Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR);
Vec3 vecA = shape.vertexList.get(i); Vec3 vecA = shape.vertexList.get(i);
if (shape.relative.get(i)) if (shape.relative.get(i))
{ {
@@ -799,14 +801,16 @@ public class ShapesRenderer
builder.addVertex((float) (vecA.x() - cx), (float) (vecA.y() - cy), (float) (vecA.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vecA.x() - cx), (float) (vecA.y() - cy), (float) (vecA.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builder.addVertex((float) (vecB.x() - cx), (float) (vecB.y() - cy), (float) (vecB.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vecB.x() - cx), (float) (vecB.y() - cy), (float) (vecB.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builder.addVertex((float) (vecB.x() - cx), (float) (vecB.y() - cy), (float) (vecB.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); //builder.addVertex((float) (vecB.x() - cx), (float) (vecB.y() - cy), (float) (vecB.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builder.addVertex((float) (vecC.x() - cx), (float) (vecC.y() - cy), (float) (vecC.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vecC.x() - cx), (float) (vecC.y() - cy), (float) (vecC.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builder.addVertex((float) (vecC.x() - cx), (float) (vecC.y() - cy), (float) (vecC.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); //builder.addVertex((float) (vecC.x() - cx), (float) (vecC.y() - cy), (float) (vecC.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
builder.addVertex((float) (vecA.x() - cx), (float) (vecA.y() - cy), (float) (vecA.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vecA.x() - cx), (float) (vecA.y() - cy), (float) (vecA.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
}
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
//drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
}
} }
} }
@@ -865,7 +869,7 @@ public class ShapesRenderer
drawCylinderWireframe(tesselator, drawCylinderWireframe(tesselator,
(float) (vc.x - cx - dir * renderEpsilon), (float) (vc.y - cy - dir * renderEpsilon), (float) (vc.z - cz - dir * renderEpsilon), (float) (vc.x - cx - dir * renderEpsilon), (float) (vc.y - cy - dir * renderEpsilon), (float) (vc.z - cz - dir * renderEpsilon),
(float) (shape.radius + renderEpsilon), (float) (shape.height + 2 * dir * renderEpsilon), shape.axis, (float) (shape.radius + renderEpsilon), (float) (shape.height + 2 * dir * renderEpsilon), shape.axis,
shape.subdivisions, shape.radius == 0, shape.subdivisions, shape.height == 0,
shape.r, shape.g, shape.b, shape.a); shape.r, shape.g, shape.b, shape.a);
} }
@@ -891,7 +895,7 @@ public class ShapesRenderer
public static void drawLine(Tesselator tesselator, float x1, float y1, float z1, float x2, float y2, float z2, float red1, float grn1, float blu1, float alpha) public static void drawLine(Tesselator tesselator, float x1, float y1, float z1, float x2, float y2, float z2, float red1, float grn1, float blu1, float alpha)
{ {
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builder = tesselator.begin(Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR);
builder.addVertex(x1, y1, z1).setColor(red1, grn1, blu1, alpha); builder.addVertex(x1, y1, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha); builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha);
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
@@ -904,7 +908,8 @@ public class ShapesRenderer
boolean xthick, boolean ythick, boolean zthick, boolean xthick, boolean ythick, boolean zthick,
float red1, float grn1, float blu1, float alpha, float red2, float grn2, float blu2) float red1, float grn1, float blu1, float alpha, float red2, float grn2, float blu2)
{ {
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builder = tesselator.begin(Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR);
/* old lines not using strip
if (xthick) if (xthick)
{ {
builder.addVertex(x1, y1, z1).setColor(red1, grn2, blu2, alpha); builder.addVertex(x1, y1, z1).setColor(red1, grn2, blu2, alpha);
@@ -946,6 +951,51 @@ public class ShapesRenderer
builder.addVertex(x2, y2, z1).setColor(red1, grn1, blu1, alpha); builder.addVertex(x2, y2, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha); builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha);
}
*/
if (xthick)
{
builder.addVertex(x1, y1, z1).setColor(red1, grn2, blu2, alpha);
builder.addVertex(x2, y1, z1).setColor(red1, grn2, blu2, alpha);
builder.addVertex(x2, y2, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x1, y2, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x1, y2, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y1, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x1, y1, z2).setColor(red1, grn1, blu1, alpha);
}
if (ythick)
{
builder.addVertex(x1, y1, z1).setColor(red2, grn1, blu2, alpha);
builder.addVertex(x1, y2, z1).setColor(red2, grn1, blu2, alpha);
builder.addVertex(x2, y2, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y1, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y1, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x1, y2, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x1, y1, z2).setColor(red1, grn1, blu1, alpha);
}
if (zthick)
{
builder.addVertex(x1, y1, z1).setColor(red2, grn2, blu1, alpha);
builder.addVertex(x1, y1, z2).setColor(red2, grn2, blu1, alpha);
builder.addVertex(x1, y2, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x1, y2, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y2, z1).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y2, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y1, z2).setColor(red1, grn1, blu1, alpha);
builder.addVertex(x2, y1, z1).setColor(red1, grn1, blu1, alpha);
} }
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
@@ -1062,7 +1112,7 @@ public class ShapesRenderer
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else /* else
{ {
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR);
for (int i = 0; i <= num_steps180; i++) for (int i = 0; i <= num_steps180; i++)
@@ -1074,7 +1124,7 @@ public class ShapesRenderer
builder.addVertex(cx + x, cy, cz - z).setColor(red, grn, blu, alpha); builder.addVertex(cx + x, cy, cz - z).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }*/
} }
else if (axis == Direction.Axis.X) else if (axis == Direction.Axis.X)
@@ -1111,19 +1161,19 @@ public class ShapesRenderer
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else /*else
{ {
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builder = tesselator.begin(Mode.DEBUG_LINE_STRIP, DefaultVertexFormat.POSITION_COLOR);
for (int i = 0; i <= num_steps180; i++) for (int i = 0; i <= num_steps360+1; i++)
{ {
float theta = step * i; float theta = step * i;
float y = r * Mth.cos(theta); float y = r * Mth.cos(theta);
float z = r * Mth.sin(theta); float z = r * Mth.sin(theta);
builder.addVertex(cx, cy - y, cz + z).setColor(red, grn, blu, alpha); builder.addVertex(cx, cy + y, cz + z).setColor(red, grn, blu, alpha);
builder.addVertex(cx, cy + y, cz - z).setColor(red, grn, blu, alpha); //builder.addVertex(cx, cy + y, cz - z).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }*/
} }
else if (axis == Direction.Axis.Z) else if (axis == Direction.Axis.Z)
{ {
@@ -1158,7 +1208,7 @@ public class ShapesRenderer
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else /*else
{ {
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR);
for (int i = 0; i <= num_steps180; i++) for (int i = 0; i <= num_steps180; i++)
@@ -1170,8 +1220,7 @@ public class ShapesRenderer
builder.addVertex(cx - x, cy + y, cz).setColor(red, grn, blu, alpha); builder.addVertex(cx - x, cy + y, cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1)); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }*/
} }
} }