bring shapes to somewhat usable state, still broken and not pretty, missing culling control, text renders or not.

This commit is contained in:
gnembon committed 2025-02-26 21:56:54 +01:00
1 parent 976d614a81
commit 5e65a6f89c
1 file changed
+44 -31
@@ -524,6 +524,8 @@ public class ShapesRenderer
text_x = (float) (-textRenderer.width(shape.value.getString())); text_x = (float) (-textRenderer.width(shape.value.getString()));
} }
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
///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.NORMAL, shape.textbck, 15728880);
immediate.endBatch(); immediate.endBatch();
matrices.popPose(); matrices.popPose();
@@ -616,8 +618,8 @@ public class ShapesRenderer
} }
} }
private static void drawWithShader(MeshData mesh) { private static void drawWithShader(MeshData mesh, RenderType type) {
RenderType.debugLineStrip(1.0).draw(mesh); type.draw(mesh);
//VertexBuffer buffre = mesh.drawState().format().getImmediateDrawVertexBuffer(); //VertexBuffer buffre = mesh.drawState().format().getImmediateDrawVertexBuffer();
//buffre.bind(); //buffre.bind();
//buffre.upload(mesh); //buffre.upload(mesh);
@@ -630,6 +632,17 @@ public class ShapesRenderer
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};
private static final RenderType [] renderTypes = new RenderType[] {
RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1),
RenderType.debugLineStrip(1), // TODO wrong
RenderType.debugLineStrip(1), // TODO wrong
RenderType.debugLineStrip(1),
RenderType.debugQuads()
};
public RenderedPolyface(Minecraft client, ShapeDispatcher.ExpiringShape shape) public RenderedPolyface(Minecraft client, ShapeDispatcher.ExpiringShape shape)
{ {
super(client, (ShapeDispatcher.Polyface) shape); super(client, (ShapeDispatcher.Polyface) shape);
@@ -662,7 +675,7 @@ public class ShapesRenderer
} }
builder.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.fr, shape.fg, shape.fb, shape.fa); builder.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.fr, shape.fg, shape.fb, shape.fa);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), renderTypes[shape.mode]);
////RenderSystem.disableCull(); ////RenderSystem.disableCull();
////RenderSystem.depthMask(false); ////RenderSystem.depthMask(false);
@@ -698,7 +711,7 @@ public class ShapesRenderer
builder.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
} }
builder.addVertex((float) (vec0.x() - cx), (float) (vec0.y() - cy), (float) (vec0.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vec0.x() - cx), (float) (vec0.y() - cy), (float) (vec0.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
drawWithShader(builder.buildOrThrow()); 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(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR);
@@ -713,7 +726,7 @@ public class ShapesRenderer
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);
} }
drawWithShader(builderr.buildOrThrow()); drawWithShader(builderr.buildOrThrow(), RenderType.debugLineStrip(1));
} }
return; return;
} }
@@ -758,7 +771,7 @@ public class ShapesRenderer
builder.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a); builder.addVertex((float) (vec.x() - cx), (float) (vec.y() - cy), (float) (vec.z() - cz)).setColor(shape.r, shape.g, shape.b, shape.a);
} }
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
return; return;
} }
if (shape.mode == 4) if (shape.mode == 4)
@@ -792,7 +805,7 @@ public class ShapesRenderer
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()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
} }
@@ -881,7 +894,7 @@ public class ShapesRenderer
BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builder = tesselator.begin(VertexFormat.Mode.DEBUG_LINES, 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()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
public static void drawBoxWireGLLines( public static void drawBoxWireGLLines(
@@ -934,7 +947,7 @@ 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);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
public static void drawBoxFaces( public static void drawBoxFaces(
@@ -995,7 +1008,7 @@ public class ShapesRenderer
builder.addVertex(x1, y2, z2).setColor(red1, grn1, blu1, alpha); builder.addVertex(x1, y2, z2).setColor(red1, grn1, blu1, alpha);
} }
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugQuads());
} }
public static void drawCylinderWireframe(Tesselator tesselator, public static void drawCylinderWireframe(Tesselator tesselator,
@@ -1028,7 +1041,7 @@ public class ShapesRenderer
float z = r * Mth.sin(theta); float z = r * Mth.sin(theta);
builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
if (!isFlat) if (!isFlat)
@@ -1046,7 +1059,7 @@ public class ShapesRenderer
builder.addVertex(cx + x, cy + h, cz - z).setColor(red, grn, blu, alpha); builder.addVertex(cx + x, cy + h, cz - z).setColor(red, grn, blu, alpha);
builder.addVertex(cx - x, cy + h, cz + z).setColor(red, grn, blu, alpha); builder.addVertex(cx - x, cy + h, cz + z).setColor(red, grn, blu, alpha);
builder.addVertex(cx - x, cy + 0, cz + z).setColor(red, grn, blu, alpha); builder.addVertex(cx - x, cy + 0, cz + z).setColor(red, grn, blu, alpha);
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else else
@@ -1060,7 +1073,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);
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()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
@@ -1078,7 +1091,7 @@ public class ShapesRenderer
float y = r * Mth.sin(theta); float y = r * Mth.sin(theta);
builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
if (!isFlat) if (!isFlat)
@@ -1095,7 +1108,7 @@ public class ShapesRenderer
builder.addVertex(cx + 0, cy + y, cz - z).setColor(red, grn, blu, alpha); builder.addVertex(cx + 0, cy + y, cz - z).setColor(red, grn, blu, alpha);
builder.addVertex(cx + h, cy + y, cz - z).setColor(red, grn, blu, alpha); builder.addVertex(cx + h, cy + y, cz - z).setColor(red, grn, blu, alpha);
builder.addVertex(cx + h, cy - y, cz + z).setColor(red, grn, blu, alpha); builder.addVertex(cx + h, cy - y, cz + z).setColor(red, grn, blu, alpha);
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else else
@@ -1109,7 +1122,7 @@ public class ShapesRenderer
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()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else if (axis == Direction.Axis.Z) else if (axis == Direction.Axis.Z)
@@ -1126,7 +1139,7 @@ public class ShapesRenderer
float x = r * Mth.sin(theta); float x = r * Mth.sin(theta);
builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
if (!isFlat) if (!isFlat)
{ {
@@ -1142,7 +1155,7 @@ public class ShapesRenderer
builder.addVertex(cx - x, cy + y, cz + 0).setColor(red, grn, blu, alpha); builder.addVertex(cx - x, cy + y, cz + 0).setColor(red, grn, blu, alpha);
builder.addVertex(cx - x, cy + y, cz + h).setColor(red, grn, blu, alpha); builder.addVertex(cx - x, cy + y, cz + h).setColor(red, grn, blu, alpha);
builder.addVertex(cx + x, cy - y, cz + h).setColor(red, grn, blu, alpha); builder.addVertex(cx + x, cy - y, cz + h).setColor(red, grn, blu, alpha);
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
else else
@@ -1156,7 +1169,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);
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()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
@@ -1183,7 +1196,7 @@ public class ShapesRenderer
float z = r * Mth.sin(theta); float z = r * Mth.sin(theta);
builder.addVertex(x + cx, cy, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, cy, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugTriangleFan());
if (!isFlat) if (!isFlat)
{ {
BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR);
@@ -1195,7 +1208,7 @@ public class ShapesRenderer
float z = r * Mth.sin(theta); float z = r * Mth.sin(theta);
builderr.addVertex(x + cx, cy + h, z + cz).setColor(red, grn, blu, alpha); builderr.addVertex(x + cx, cy + h, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builderr.buildOrThrow()); drawWithShader(builderr.buildOrThrow(), RenderType.debugTriangleFan());
BufferBuilder builderrr = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); // quad strip to quads BufferBuilder builderrr = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); // quad strip to quads
float xp = r * 1; float xp = r * 1;
@@ -1212,7 +1225,7 @@ public class ShapesRenderer
xp = x; xp = x;
zp = z; zp = z;
} }
drawWithShader(builderrr.buildOrThrow()); drawWithShader(builderrr.buildOrThrow(), RenderType.debugQuads());
} }
} }
@@ -1227,7 +1240,7 @@ public class ShapesRenderer
float z = r * Mth.sin(theta); float z = r * Mth.sin(theta);
builder.addVertex(cx, cy + y, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(cx, cy + y, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugTriangleFan());
if (!isFlat) if (!isFlat)
{ {
BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR);
@@ -1239,7 +1252,7 @@ public class ShapesRenderer
float z = r * Mth.sin(theta); float z = r * Mth.sin(theta);
builderr.addVertex(cx + h, cy + y, cz + z).setColor(red, grn, blu, alpha); builderr.addVertex(cx + h, cy + y, cz + z).setColor(red, grn, blu, alpha);
} }
drawWithShader(builderr.buildOrThrow()); drawWithShader(builderr.buildOrThrow(), RenderType.debugTriangleFan());
BufferBuilder builderrr = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); // quad strip to quads BufferBuilder builderrr = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); // quad strip to quads
float yp = r * 1; float yp = r * 1;
@@ -1256,7 +1269,7 @@ public class ShapesRenderer
yp = y; yp = y;
zp = z; zp = z;
} }
drawWithShader(builderrr.buildOrThrow()); drawWithShader(builderrr.buildOrThrow(), RenderType.debugQuads());
} }
} }
else if (axis == Direction.Axis.Z) else if (axis == Direction.Axis.Z)
@@ -1270,7 +1283,7 @@ public class ShapesRenderer
float y = r * Mth.sin(theta); float y = r * Mth.sin(theta);
builder.addVertex(x + cx, cy + y, cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, cy + y, cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugTriangleFan());
if (!isFlat) if (!isFlat)
{ {
BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR); BufferBuilder builderr = tesselator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR);
@@ -1282,7 +1295,7 @@ public class ShapesRenderer
float y = r * Mth.sin(theta); float y = r * Mth.sin(theta);
builderr.addVertex(x + cx, cy + y, cz + h).setColor(red, grn, blu, alpha); builderr.addVertex(x + cx, cy + y, cz + h).setColor(red, grn, blu, alpha);
} }
drawWithShader(builderr.buildOrThrow()); drawWithShader(builderr.buildOrThrow(), RenderType.debugTriangleFan());
BufferBuilder builderrr = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); // quad strip to quads BufferBuilder builderrr = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); // quad strip to quads
float xp = r; float xp = r;
@@ -1299,7 +1312,7 @@ public class ShapesRenderer
xp = x; xp = x;
yp = y; yp = y;
} }
drawWithShader(builderrr.buildOrThrow()); drawWithShader(builderrr.buildOrThrow(), RenderType.debugQuads());
} }
} }
} }
@@ -1324,7 +1337,7 @@ public class ShapesRenderer
float y = r * Mth.cos(phi); float y = r * Mth.cos(phi);
builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
for (int j = 0; j <= num_steps180; j++) for (int j = 0; j <= num_steps180; j++)
{ {
@@ -1339,7 +1352,7 @@ public class ShapesRenderer
float y = r * Mth.cos(phi); float y = r * Mth.cos(phi);
builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha); builder.addVertex(x + cx, y + cy, z + cz).setColor(red, grn, blu, alpha);
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugLineStrip(1));
} }
} }
@@ -1381,7 +1394,7 @@ public class ShapesRenderer
zbp = zp; zbp = zp;
yp = y; yp = y;
} }
drawWithShader(builder.buildOrThrow()); drawWithShader(builder.buildOrThrow(), RenderType.debugQuads());
} }
} }
} }