From: ishland Date: Mon, 2 Aug 2021 15:43:49 +0000 (+0800) Subject: Improve performance X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=512b172c97c6ac387e510d92005c98425a413996;p=BoundingBoxOutlineReloaded.git Improve performance --- diff --git a/build.gradle b/build.gradle index eba553d..28169bc 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,7 @@ tasks.withType(JavaCompile).configureEach { dependencies { minecraft 'com.mojang:minecraft:' + project.mcVersion - mappings 'net.fabricmc:yarn:' + project.mcVersion + '+build.29' + mappings 'net.fabricmc:yarn:' + project.mcVersion + '+build.29:v2' modImplementation 'net.fabricmc:fabric-loader:0.11.6' } diff --git a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java index c812178..2073e1d 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java @@ -57,6 +57,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Stream; public class ClientRenderer { @@ -66,6 +67,8 @@ public class ClientRenderer { private static boolean active; private static final Set providers = new HashSet<>(); + private static AtomicLong lastDurationNanos = new AtomicLong(0L); + public static boolean getActive() { return active; } @@ -133,6 +136,7 @@ public class ClientRenderer { public static void render(MatrixStack matrixStack, DimensionId dimensionId) { if (!active) return; + long startTime = System.nanoTime(); matrixStack.push(); RenderHelper.beforeRender(); @@ -141,19 +145,11 @@ public class ClientRenderer { if (renderer != null) renderer.render(matrixStack, key); }); - RenderHelper.afterRender(); - matrixStack.pop(); - } - - public static void renderDeferred() { - RenderHelper.beforeRender(); - RenderHelper.polygonModeFill(); - RenderHelper.enableBlend(); RenderQueue.renderDeferred(); - RenderHelper.disableBlend(); - RenderHelper.enablePolygonOffsetLine(); - RenderHelper.polygonOffsetMinusOne(); + RenderHelper.afterRender(); + matrixStack.pop(); + lastDurationNanos.set(System.nanoTime() - startTime); } public static Stream getBoundingBoxes(DimensionId dimensionId) { @@ -180,5 +176,9 @@ public class ClientRenderer { } } + public static long getLastDurationNanos() { + return lastDurationNanos.get(); + } + } diff --git a/src/main/java/com/irtimaled/bbor/client/interop/ClientInterop.java b/src/main/java/com/irtimaled/bbor/client/interop/ClientInterop.java index bbc29ce..9d91ad8 100644 --- a/src/main/java/com/irtimaled/bbor/client/interop/ClientInterop.java +++ b/src/main/java/com/irtimaled/bbor/client/interop/ClientInterop.java @@ -41,10 +41,6 @@ public class ClientInterop { ClientRenderer.render(matrixStack, DimensionId.from(player.getEntityWorld().getRegistryKey())); } - public static void renderDeferred() { - ClientRenderer.renderDeferred(); - } - public static boolean interceptChatMessage(String message) { if (message.startsWith("/bbor:")) { ClientPlayNetworkHandler connection = MinecraftClient.getInstance().getNetworkHandler(); diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java b/src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java index a4d237f..7837384 100644 --- a/src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java @@ -9,18 +9,10 @@ import com.irtimaled.bbor.common.models.AbstractBoundingBox; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gl.VertexBuffer; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.BufferRenderer; import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.Shader; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Box; -import net.minecraft.util.math.Matrix4f; import org.lwjgl.opengl.GL11; import java.awt.*; @@ -32,14 +24,7 @@ public abstract class AbstractRenderer { public static final double THETA_SEGMENT = PHI_SEGMENT / 2D; private static final float DEFAULT_LINE_WIDTH = 0.0025f; - private final VertexBuffer solidBox = new VertexBuffer(); - private final VertexBuffer outlinedBox = new VertexBuffer(); - - { - final Box box = new Box(BlockPos.ORIGIN); - RenderHelper.drawSolidBox(box, solidBox); - RenderHelper.drawOutlinedBox(box, outlinedBox); - } + private static final Box ORIGIN_BOX = new Box(BlockPos.ORIGIN); public abstract void render(MatrixStack matrixStack, T boundingBox); @@ -50,15 +35,13 @@ public abstract class AbstractRenderer { RenderHelper.polygonModeFill(); matrixStack.push(); - RenderSystem.depthMask(false); - renderCuboid0(matrixStack, nudge, color, fillOnly, fillAlpha); - RenderSystem.depthMask(true); + renderCuboid0(matrixStack, nudge, color, fillOnly, fillAlpha, false); matrixStack.pop(); RenderSystem.setShaderColor(1, 1, 1, 1); } - private void renderCuboid0(MatrixStack stack, OffsetBox nudge, Color color, boolean fillOnly, int fillAlpha) { + private void renderCuboid0(MatrixStack stack, OffsetBox nudge, Color color, boolean fillOnly, int fillAlpha, boolean mask) { if (!RenderCulling.isVisibleCulling(nudge.toBox())) return; if (ConfigManager.invertBoxColorPlayerInside.get() && playerInsideBoundingBox(nudge)) { @@ -81,15 +64,14 @@ public abstract class AbstractRenderer { (float) (maxY - minY), (float) (maxZ - minZ)); - Matrix4f viewMatrix = stack.peek().getModel(); - Matrix4f projMatrix = RenderSystem.getProjectionMatrix(); - Shader shader = RenderSystem.getShader(); +// Matrix4f viewMatrix = stack.peek().getModel(); +// Matrix4f projMatrix = RenderSystem.getProjectionMatrix(); +// Shader shader = RenderSystem.getShader(); if (fillOnly || ConfigManager.fill.get()) { - RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, fillAlpha / 255F); - solidBox.setShader(viewMatrix, projMatrix, shader); +// RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, fillAlpha / 255F); + RenderBatch.drawSolidBox(stack.peek(), ORIGIN_BOX, color, fillAlpha, mask); } if (!fillOnly) { - RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); // outlinedBox.setShader(viewMatrix, projMatrix, shader); final double minXL = minX - getLineWidth(); final double minYL = minY - getLineWidth(); @@ -129,42 +111,20 @@ public abstract class AbstractRenderer { } void renderLine(MatrixStack matrixStack, OffsetPoint startPoint, OffsetPoint endPoint, Color color) { - if ((startPoint.getY() == endPoint.getY() && startPoint.getZ() == endPoint.getZ()) || - (startPoint.getX() == endPoint.getX() && startPoint.getZ() == endPoint.getZ()) || - (startPoint.getX() == endPoint.getX() && startPoint.getY() == endPoint.getY())) { - RenderSystem.depthMask(true); - renderCuboid0(matrixStack, new OffsetBox(startPoint.offset(-getLineWidth(), -getLineWidth(), -getLineWidth()), endPoint.offset(getLineWidth(), getLineWidth(), getLineWidth())), color, true, 255); - RenderSystem.depthMask(false); - return; - } +// if ((startPoint.getY() == endPoint.getY() && startPoint.getZ() == endPoint.getZ()) || +// (startPoint.getX() == endPoint.getX() && startPoint.getZ() == endPoint.getZ()) || +// (startPoint.getX() == endPoint.getX() && startPoint.getY() == endPoint.getY())) { +// renderCuboid0(matrixStack, new OffsetBox(startPoint.offset(-getLineWidth(), -getLineWidth(), -getLineWidth()), endPoint.offset(getLineWidth(), getLineWidth(), getLineWidth())), color, true, 255, true); +// return; +// } if (!RenderCulling.isVisibleCulling(new OffsetBox(startPoint, endPoint).toBox())) return; // TODO better culling matrixStack.push(); RenderHelper.applyRegionalRenderOffset(matrixStack); - RenderSystem.setShader(GameRenderer::getPositionShader); - RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F); - int regionX = (((int) Camera.getX()) >> 9) * 512; - int regionZ = (((int) Camera.getZ()) >> 9) * 512; - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - bufferBuilder - .vertex(matrixStack.peek().getModel(), - (float) startPoint.getX() - regionX, - (float) startPoint.getY(), - (float) startPoint.getZ() - regionZ) - .next(); - bufferBuilder - .vertex(matrixStack.peek().getModel(), - (float) endPoint.getX() - regionX, - (float) endPoint.getY(), - (float) endPoint.getZ() - regionZ) - .next(); - bufferBuilder.end(); - BufferRenderer.draw(bufferBuilder); + RenderBatch.drawLine(matrixStack.peek(), startPoint.getPoint(), endPoint.getPoint(), color, 255); matrixStack.pop(); } @@ -207,49 +167,27 @@ public abstract class AbstractRenderer { RenderHelper.applyRegionalRenderOffset(matrixStack); RenderSystem.setShader(GameRenderer::getPositionShader); - RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 0.55f); - int regionX = (((int) Camera.getX()) >> 9) * 512; - int regionZ = (((int) Camera.getZ()) >> 9) * 512; - - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINE_STRIP, - VertexFormats.POSITION); Point firstPoint = null; + Point lastPoint = null; for (double phi = 0.0D; phi < TAU; phi += PHI_SEGMENT) { final Point point = center.offset(Math.cos(phi) * radius, dy, Math.sin(phi) * radius); if (firstPoint == null) firstPoint = point; - bufferBuilder.vertex(matrixStack.peek().getModel(), - (float) point.getX() - regionX, - (float) point.getY(), - (float) point.getZ() - regionZ) - .next(); + if (lastPoint == null) { + lastPoint = point; + continue; + } + RenderBatch.drawLine(matrixStack.peek(), lastPoint, point, color, 255); } + RenderBatch.drawLine(matrixStack.peek(), lastPoint, firstPoint, color, 255); - bufferBuilder.vertex(matrixStack.peek().getModel(), - (float) firstPoint.getX() - regionX, - (float) firstPoint.getY(), - (float) firstPoint.getZ() - regionZ) - .next(); - - bufferBuilder.end(); - BufferRenderer.draw(bufferBuilder); matrixStack.pop(); } private void renderDotSphere(MatrixStack matrixStack, Point center, double radius, Color color) { if (!RenderCulling.isVisibleCulling(new Box(new BlockPos(center.getX(), center.getY(), center.getZ())).expand(radius))) return; matrixStack.push(); - RenderHelper.applyRegionalRenderOffset(matrixStack); - RenderSystem.setShader(GameRenderer::getPositionShader); - RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 0.55f); - int regionX = (((int) Camera.getX()) >> 9) * 512; - int regionZ = (((int) Camera.getZ()) >> 9) * 512; - - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); for (double phi = 0.0D; phi < TAU; phi += PHI_SEGMENT) { double dy = radius * Math.cos(phi); @@ -257,18 +195,10 @@ public abstract class AbstractRenderer { for (double theta = 0.0D; theta < PI; theta += THETA_SEGMENT) { double dx = radiusBySinPhi * Math.cos(theta); double dz = radiusBySinPhi * Math.sin(theta); - final Point point = center.offset(dx, dy, dz); - bufferBuilder - .vertex(matrixStack.peek().getModel(), - (float) point.getX() - regionX, - (float) point.getY(), - (float) point.getZ() - regionZ) - .next(); + renderCuboid0(matrixStack, new OffsetBox(point.offset(-getLineWidth(), -getLineWidth(), -getLineWidth()), point.offset(getLineWidth(), getLineWidth(), getLineWidth())), color, true, 255, true); } } - bufferBuilder.end(); - BufferRenderer.draw(bufferBuilder); matrixStack.pop(); } } diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/OffsetBox.java b/src/main/java/com/irtimaled/bbor/client/renderers/OffsetBox.java index ce1d892..751cb25 100644 --- a/src/main/java/com/irtimaled/bbor/client/renderers/OffsetBox.java +++ b/src/main/java/com/irtimaled/bbor/client/renderers/OffsetBox.java @@ -1,5 +1,6 @@ package com.irtimaled.bbor.client.renderers; +import com.irtimaled.bbor.client.models.Point; import com.irtimaled.bbor.common.models.Coords; import net.minecraft.util.math.Box; @@ -22,6 +23,11 @@ class OffsetBox { this.max = max; } + OffsetBox(Point min, Point max) { + this.min = new OffsetPoint(min); + this.max = new OffsetPoint(max); + } + OffsetBox grow(double x, double y, double z) { return new OffsetBox(min.offset(-x, -y, -z), max.offset(x, y, z)); } diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/OffsetPoint.java b/src/main/java/com/irtimaled/bbor/client/renderers/OffsetPoint.java index 6230d8d..2b8675b 100644 --- a/src/main/java/com/irtimaled/bbor/client/renderers/OffsetPoint.java +++ b/src/main/java/com/irtimaled/bbor/client/renderers/OffsetPoint.java @@ -37,4 +37,8 @@ class OffsetPoint { double getDistance(OffsetPoint offsetPoint) { return this.point.getDistance(offsetPoint.point); } + + Point getPoint() { + return point; + } } diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/RenderBatch.java b/src/main/java/com/irtimaled/bbor/client/renderers/RenderBatch.java new file mode 100644 index 0000000..f8f4a5a --- /dev/null +++ b/src/main/java/com/irtimaled/bbor/client/renderers/RenderBatch.java @@ -0,0 +1,136 @@ +package com.irtimaled.bbor.client.renderers; + +import com.irtimaled.bbor.client.Camera; +import com.irtimaled.bbor.client.models.Point; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.render.BufferBuilder; +import net.minecraft.client.render.BufferRenderer; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.Box; + +import java.awt.*; +import java.util.concurrent.atomic.AtomicLong; + +public class RenderBatch { + + private static final BufferBuilder quadBufferBuilderNonMasked = new BufferBuilder(2097152); + private static final BufferBuilder quadBufferBuilderMasked = new BufferBuilder(2097152); + private static final BufferBuilder lineBufferBuilder = new BufferBuilder(2097152); + + private static final Object mutex = new Object(); + private static final AtomicLong quadNonMaskedCount = new AtomicLong(0L); + private static final AtomicLong quadMaskedCount = new AtomicLong(0L); + private static final AtomicLong lineCount = new AtomicLong(0L); + private static final AtomicLong quadNonMaskedCountLast = new AtomicLong(0L); + private static final AtomicLong quadMaskedCountLast = new AtomicLong(0L); + private static final AtomicLong lineCountLast = new AtomicLong(0L); + + private static final AtomicLong lastDurationNanos = new AtomicLong(0L); + + static void beginBatch() { + quadBufferBuilderMasked.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + quadBufferBuilderNonMasked.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR); + lineBufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, VertexFormats.POSITION_COLOR); + } + + public static void drawSolidBox(MatrixStack.Entry matrixEntry, Box box, Color color, int alpha, boolean mask) { + final float minX = (float) box.minX; + final float minY = (float) box.minY; + final float minZ = (float) box.minZ; + final float maxX = (float) box.maxX; + final float maxY = (float) box.maxY; + final float maxZ = (float) box.maxZ; + final int red = color.getRed(); + final int green = color.getGreen(); + final int blue = color.getBlue(); + + if (mask) quadMaskedCount.getAndIncrement(); + else quadNonMaskedCount.getAndIncrement(); + + final BufferBuilder bufferBuilder = mask ? RenderBatch.quadBufferBuilderMasked : RenderBatch.quadBufferBuilderNonMasked; + bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next(); + + bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next(); + + bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next(); + + bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next(); + + bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, minY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), maxX, maxY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next(); + + bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, minZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, minY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, maxZ).color(red, green, blue, alpha).next(); + bufferBuilder.vertex(matrixEntry.getModel(), minX, maxY, minZ).color(red, green, blue, alpha).next(); + } + + static void drawLine(MatrixStack.Entry matrixEntry, Point startPoint, Point endPoint, Color color, int alpha) { + int regionX = (((int) Camera.getX()) >> 9) * 512; + int regionZ = (((int) Camera.getZ()) >> 9) * 512; + + lineCount.getAndIncrement(); + + lineBufferBuilder + .vertex(matrixEntry.getModel(), + (float) startPoint.getX() - regionX, + (float) startPoint.getY(), + (float) startPoint.getZ() - regionZ) + .color(color.getRed(), color.getGreen(), color.getBlue(), alpha) + .next(); + lineBufferBuilder + .vertex(matrixEntry.getModel(), + (float) endPoint.getX() - regionX, + (float) endPoint.getY(), + (float) endPoint.getZ() - regionZ) + .color(color.getRed(), color.getGreen(), color.getBlue(), alpha) + .next(); + } + + static void endBatch() { + RenderSystem.setShader(GameRenderer::getPositionColorShader); + long startTime = System.nanoTime(); + quadBufferBuilderMasked.end(); + quadBufferBuilderNonMasked.end(); + lineBufferBuilder.end(); + + synchronized (mutex) { + quadMaskedCountLast.set(quadMaskedCount.get()); + quadNonMaskedCountLast.set(quadNonMaskedCount.get()); + lineCountLast.set(lineCount.get()); + quadMaskedCount.set(0); + quadNonMaskedCount.set(0); + lineCount.set(0); + } + + RenderSystem.depthMask(true); + BufferRenderer.draw(quadBufferBuilderMasked); + BufferRenderer.draw(lineBufferBuilder); + + RenderSystem.depthMask(false); + BufferRenderer.draw(quadBufferBuilderNonMasked); + lastDurationNanos.set(System.nanoTime() - startTime); + } + + public static String debugString() { + return String.format("[BBOR] Statistics: Boxes: %d,%d Lines: %d @ %.2fms", quadMaskedCountLast.get(), quadNonMaskedCountLast.get(), lineCountLast.get(), lastDurationNanos.get() / 1_000_000.0); + } + +} diff --git a/src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java b/src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java index 6cb77eb..5e53961 100644 --- a/src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java +++ b/src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java @@ -4,13 +4,7 @@ import com.irtimaled.bbor.client.Camera; import com.irtimaled.bbor.client.config.ConfigManager; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.gl.VertexBuffer; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.Box; import net.minecraft.util.math.Quaternion; import org.lwjgl.opengl.GL11; @@ -28,9 +22,11 @@ public class RenderHelper { if (ConfigManager.alwaysVisible.get()) { RenderSystem.disableDepthTest(); } + RenderBatch.beginBatch(); } public static void afterRender() { + RenderBatch.endBatch(); enableDepthTest(); RenderSystem.enableCull(); GL11.glDisable(GL11.GL_LINE_SMOOTH); @@ -157,90 +153,6 @@ public class RenderHelper { GlStateManager._depthFunc(GL11.GL_LEQUAL); } - public static void drawSolidBox(Box box, VertexBuffer vertexBuffer) { - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.QUADS, - VertexFormats.POSITION); - - bufferBuilder.vertex(box.minX, box.minY, box.minZ).next(); - bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next(); - bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next(); - bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next(); - - bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next(); - bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next(); - bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next(); - bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next(); - - bufferBuilder.vertex(box.minX, box.minY, box.minZ).next(); - bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next(); - bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next(); - bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next(); - - bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next(); - bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next(); - bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next(); - bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next(); - - bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next(); - bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next(); - bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next(); - bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next(); - - bufferBuilder.vertex(box.minX, box.minY, box.minZ).next(); - bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next(); - bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next(); - bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next(); - - bufferBuilder.end(); - vertexBuffer.upload(bufferBuilder); - } - - public static void drawOutlinedBox(Box bb, VertexBuffer vertexBuffer) { - BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); - bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES, - VertexFormats.POSITION); - - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - - bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); - - bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - - bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - - bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); - - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next(); - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - - bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); - - bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next(); - bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next(); - - bufferBuilder.end(); - vertexBuffer.upload(bufferBuilder); - } - public static void applyRegionalRenderOffset(MatrixStack matrixStack) { diff --git a/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinDebugHud.java b/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinDebugHud.java index e151230..e604e12 100644 --- a/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinDebugHud.java +++ b/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinDebugHud.java @@ -1,6 +1,8 @@ package com.irtimaled.bbor.mixin.client.renderer; +import com.irtimaled.bbor.client.ClientRenderer; import com.irtimaled.bbor.client.RenderCulling; +import com.irtimaled.bbor.client.renderers.RenderBatch; import net.minecraft.client.gui.hud.DebugHud; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -14,7 +16,14 @@ public class MixinDebugHud { @Inject(method = "getLeftText", at = @At("RETURN")) private void afterLeftText(CallbackInfoReturnable> cir) { + if (!ClientRenderer.getActive()) { + cir.getReturnValue().add("[BBOR] Rendering not enabled"); + return; + } + cir.getReturnValue().add(RenderCulling.debugString()); + cir.getReturnValue().add(RenderBatch.debugString()); + cir.getReturnValue().add(String.format("[BBOR] Rendering took %.2fms", ClientRenderer.getLastDurationNanos() / 1_000_000.0)); } } diff --git a/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinWorldRenderer.java b/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinWorldRenderer.java index c3b8188..0adc756 100644 --- a/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinWorldRenderer.java +++ b/src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinWorldRenderer.java @@ -33,7 +33,6 @@ public class MixinWorldRenderer { RenderCulling.flushStats(); Player.setPosition(partialTicks, this.client.player); ClientInterop.render(matrixStack, this.client.player); - ClientInterop.renderDeferred(); } }