]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Rendering improvements
authorishland <ishlandmc@yeah.net>
Sun, 1 Aug 2021 13:25:05 +0000 (21:25 +0800)
committerirtimaled <irtimaled@gmail.com>
Sun, 15 Aug 2021 18:36:02 +0000 (11:36 -0700)
Fixes https://github.com/irtimaled/BoundingBoxOutlineReloaded/issues/128
Fixes https://github.com/irtimaled/BoundingBoxOutlineReloaded/issues/127

14 files changed:
src/main/java/com/irtimaled/bbor/client/providers/BeaconProvider.java
src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/BeaconRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/BiomeBorderRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/ConduitRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/CuboidRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/FlowerForestRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/MobSpawnerRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java
src/main/java/com/irtimaled/bbor/client/renderers/SlimeChunkRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/SpawnableBlocksRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/SpawningSphereRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/WorldSpawnRenderer.java
src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinWorldRenderer.java

index 33b3a2d2060ae0de7385f15b2079c2913113c4d3..ee6ca6a38c163f107c9dac3932b025e2b849477d 100644 (file)
@@ -6,6 +6,7 @@ import com.irtimaled.bbor.client.models.BoundingBoxBeacon;
 import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
+import com.irtimaled.bbor.mixin.access.IBeaconBlockEntity;
 import net.minecraft.block.entity.BeaconBlockEntity;
 
 public class BeaconProvider implements IBoundingBoxProvider<BoundingBoxBeacon> {
@@ -17,7 +18,7 @@ public class BeaconProvider implements IBoundingBoxProvider<BoundingBoxBeacon> {
     @Override
     public Iterable<BoundingBoxBeacon> get(DimensionId dimensionId) {
         return TileEntitiesHelper.map(BeaconBlockEntity.class, beacon -> {
-            int levels = beacon.getBeamSegments().size();
+            int levels = ((IBeaconBlockEntity) beacon).getLevel();
             Coords coords = new Coords(beacon.getPos());
             return BoundingBoxBeacon.from(coords, levels);
         });
index 98e8a919938f9ad4c8a2feac336fbf56c885fbff..683c19a4d3dc033d38475bbae214b41cba04a7c6 100644 (file)
@@ -30,6 +30,7 @@ public abstract class AbstractRenderer<T extends AbstractBoundingBox> {
     public static final double PHI_SEGMENT = TAU / 90D;
     private static final double PI = TAU / 2D;
     public static final double THETA_SEGMENT = PHI_SEGMENT / 2D;
+    private static final float LINE_RADIUS = 0.0025f;
 
     private final VertexBuffer solidBox = new VertexBuffer();
     private final VertexBuffer outlinedBox = new VertexBuffer();
@@ -42,47 +43,74 @@ public abstract class AbstractRenderer<T extends AbstractBoundingBox> {
 
     public abstract void render(MatrixStack matrixStack, T boundingBox);
 
-    void renderCuboid(MatrixStack matrixStack, OffsetBox bb, Color color, boolean fillOnly) {
+    void renderCuboid(MatrixStack matrixStack, OffsetBox bb, Color color, boolean fillOnly, int fillAlpha) {
         OffsetBox nudge = bb.nudge();
 
-        GL11.glEnable(GL11.GL_LINE_SMOOTH);
         GL11.glEnable(GL11.GL_CULL_FACE);
         RenderHelper.polygonModeFill();
         matrixStack.push();
 
-        RenderHelper.applyRegionalRenderOffset(matrixStack);
-        renderCuboid0(matrixStack, nudge, color, fillOnly);
+        renderCuboid0(matrixStack, nudge, color, fillOnly, fillAlpha);
 
         matrixStack.pop();
-        GL11.glDisable(GL11.GL_LINE_SMOOTH);
         RenderSystem.setShaderColor(1, 1, 1, 1);
     }
 
-    private void renderCuboid0(MatrixStack stack, OffsetBox nudge, Color color, boolean fillOnly) {
+    private void renderCuboid0(MatrixStack stack, OffsetBox nudge, Color color, boolean fillOnly, int fillAlpha) {
         if (!RenderCulling.isVisibleCulling(nudge.toBox())) return;
         if (ConfigManager.invertBoxColorPlayerInside.get() &&
                 playerInsideBoundingBox(nudge)) {
             color = new Color(255 - color.getRed(), 255 - color.getGreen(), 255 - color.getBlue());
         }
+        final MatrixStack.Entry lastStack = stack.peek();
         stack.push();
         int regionX = (((int) Camera.getX()) >> 9) << 9;
         int regionZ = (((int) Camera.getZ()) >> 9) << 9;
+        RenderHelper.applyRegionalRenderOffset(stack);
         RenderSystem.setShader(GameRenderer::getPositionShader);
-        stack.translate(nudge.getMin().getX() - regionX, nudge.getMin().getY(), nudge.getMin().getZ() - regionZ);
-        stack.scale((float) (nudge.getMax().getX() - nudge.getMin().getX()),
-                (float) (nudge.getMax().getY() - nudge.getMin().getY()),
-                (float) (nudge.getMax().getZ() - nudge.getMin().getZ()));
+        final double minX = nudge.getMin().getX();
+        final double minY = nudge.getMin().getY();
+        final double minZ = nudge.getMin().getZ();
+        final double maxX = nudge.getMax().getX();
+        final double maxY = nudge.getMax().getY();
+        final double maxZ = nudge.getMax().getZ();
+        stack.translate(minX - regionX, minY, minZ - regionZ);
+        stack.scale((float) (maxX - minX),
+                (float) (maxY - minY),
+                (float) (maxZ - minZ));
 
         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, 30 / 255F);
+            RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, fillAlpha / 255F);
             solidBox.setShader(viewMatrix, projMatrix, shader);
         }
         if (!fillOnly) {
             RenderSystem.setShaderColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F, 1F);
-            outlinedBox.setShader(viewMatrix, projMatrix, shader);
+//            outlinedBox.setShader(viewMatrix, projMatrix, shader);
+            final double minXL = minX - LINE_RADIUS;
+            final double minYL = minY - LINE_RADIUS;
+            final double minZL = minZ - LINE_RADIUS;
+            final double maxXL = maxX + LINE_RADIUS;
+            final double maxYL = maxY + LINE_RADIUS;
+            final double maxZL = maxZ + LINE_RADIUS;
+            stack.push();
+            stack.peek().getModel().load(lastStack.getModel());
+            stack.peek().getNormal().load(lastStack.getNormal());
+            renderLine(stack, new OffsetPoint(minXL, minYL, minZL), new OffsetPoint(maxXL, minYL, minZL), color);
+            renderLine(stack, new OffsetPoint(maxXL, minYL, minZL), new OffsetPoint(maxXL, minYL, maxZL), color);
+            renderLine(stack, new OffsetPoint(maxXL, minYL, maxZL), new OffsetPoint(minXL, minYL, maxZL), color);
+            renderLine(stack, new OffsetPoint(minXL, minYL, maxZL), new OffsetPoint(minXL, minYL, minZL), color);
+            renderLine(stack, new OffsetPoint(minXL, minYL, minZL), new OffsetPoint(minXL, maxYL, minZL), color);
+            renderLine(stack, new OffsetPoint(maxXL, minYL, minZL), new OffsetPoint(maxXL, maxYL, minZL), color);
+            renderLine(stack, new OffsetPoint(maxXL, minYL, maxZL), new OffsetPoint(maxXL, maxYL, maxZL), color);
+            renderLine(stack, new OffsetPoint(minXL, minYL, maxZL), new OffsetPoint(minXL, maxYL, maxZL), color);
+            renderLine(stack, new OffsetPoint(minXL, maxYL, minZL), new OffsetPoint(maxXL, maxYL, minZL), color);
+            renderLine(stack, new OffsetPoint(maxXL, maxYL, minZL), new OffsetPoint(maxXL, maxYL, maxZL), color);
+            renderLine(stack, new OffsetPoint(maxXL, maxYL, maxZL), new OffsetPoint(minXL, maxYL, maxZL), color);
+            renderLine(stack, new OffsetPoint(minXL, maxYL, maxZL), new OffsetPoint(minXL, maxYL, minZL), color);
+            stack.pop();
         }
 
         stack.pop();
@@ -95,12 +123,20 @@ public abstract class AbstractRenderer<T extends AbstractBoundingBox> {
     }
 
     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())) {
+            renderCuboid(matrixStack, new OffsetBox(startPoint.offset(-LINE_RADIUS, -LINE_RADIUS, -LINE_RADIUS), endPoint.offset(LINE_RADIUS, LINE_RADIUS, LINE_RADIUS)), color, true, 255);
+            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, 0.55f);
+        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;
 
index e1ee127db24b2ab867b4984f37730beeed2dcb4f..53b886cc5442d91be82c5a4eea9b02739288431c 100644 (file)
@@ -12,9 +12,9 @@ public class BeaconRenderer extends AbstractRenderer<BoundingBoxBeacon> {
     public void render(MatrixStack matrixStack, BoundingBoxBeacon boundingBox) {
         Coords coords = boundingBox.getCoords();
         Color color = BoundingBoxTypeHelper.getColor(boundingBox.getType());
-        renderCuboid(matrixStack, new OffsetBox(coords, coords), color, false);
+        renderCuboid(matrixStack, new OffsetBox(coords, coords), color, false, 30);
         if (boundingBox.getLevel() != 0) {
-            renderCuboid(matrixStack, new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords()), color, false);
+            renderCuboid(matrixStack, new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords()), color, false, 30);
         }
     }
 }
index c957690d88aa42b92f525e660063a8bc9b678e40..fc50eab8b58d3f61f160ee1319302c14ceda58ac 100644 (file)
@@ -48,7 +48,7 @@ public class BiomeBorderRenderer extends AbstractRenderer<BoundingBoxBiomeBorder
 
         renderLine(matrixStack, topCorner1, topCorner2, color);
         OffsetPoint bottomCorner2 = topCorner2.offset(0, 1, 0);
-        renderCuboid(matrixStack, new OffsetBox(topCorner1, bottomCorner2), color, true);
+        renderCuboid(matrixStack, new OffsetBox(topCorner1, bottomCorner2), color, true, 30);
         OffsetPoint bottomCorner1 = topCorner1.offset(0, 1, 0);
         renderLine(matrixStack, bottomCorner1, bottomCorner2, color);
     }
index 93dda6602abc68e54754635625fe33c83acf236a..0990d09fb571b2694cb0f434002fcd613fa728e0 100644 (file)
@@ -22,10 +22,10 @@ public class ConduitRenderer extends AbstractRenderer<BoundingBoxConduit> {
 
         OffsetPoint center = new OffsetPoint(point);
         OffsetBox centerBox = new OffsetBox(center, center).grow(0.5, 0.5, 0.5);
-        renderCuboid(matrixStack, centerBox, color, false);
+        renderCuboid(matrixStack, centerBox, color, false, 30);
         if (level == 6 && ConfigManager.renderConduitMobHarmArea.get()) {
             renderCuboid(matrixStack, centerBox.grow(8, 8, 8),
-                    ColorHelper.getColor(ConfigManager.colorConduitMobHarmArea), false);
+                    ColorHelper.getColor(ConfigManager.colorConduitMobHarmArea), false, 30);
         }
     }
 }
index 094c63e41060e032fc76007148ecbb2ed3d1734c..b53809329dbc66f37f6856b53f61068b3db15553 100644 (file)
@@ -8,6 +8,6 @@ public class CuboidRenderer extends AbstractRenderer<BoundingBoxCuboid> {
     @Override
     public void render(MatrixStack matrixStack, BoundingBoxCuboid boundingBox) {
         OffsetBox bb = new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords());
-        renderCuboid(matrixStack, bb, BoundingBoxTypeHelper.getColor(boundingBox.getType()), false);
+        renderCuboid(matrixStack, bb, BoundingBoxTypeHelper.getColor(boundingBox.getType()), false, 30);
     }
 }
index fd81328ab8ee6f8e36559e13d89bbdd1f78dadc0..81c3e777622e41f7392bea10ecef3ad440c6023c 100644 (file)
@@ -13,6 +13,6 @@ public class FlowerForestRenderer extends AbstractRenderer<BoundingBoxFlowerFore
         int z = coords.getZ();
         renderCuboid(matrixStack, new OffsetBox(new OffsetPoint(x, y + 0.01d, z),
                         new OffsetPoint(x + 1, y + 0.01d, z + 1)),
-                boundingBox.getColor()/*, 127 alpha*/, true);
+                boundingBox.getColor(), true, 127);
     }
 }
index 7cdd89ca8ec3a235d383a50ffa705678bb639970..7d4784c36ce6cfd99276c4e27850a5c838afcf04 100644 (file)
@@ -16,7 +16,7 @@ public class MobSpawnerRenderer extends AbstractRenderer<BoundingBoxMobSpawner>
         Coords coords = boundingBox.getCoords();
         Color color = BoundingBoxTypeHelper.getColor(boundingBox.getType());
 
-        renderCuboid(matrixStack, new OffsetBox(coords, coords), color, false);
+        renderCuboid(matrixStack, new OffsetBox(coords, coords), color, false, 30);
 
         if (ConfigManager.renderMobSpawnerActivationLines.get()) {
             renderActivationLine(matrixStack, new OffsetPoint(coords).offset(0.5, 0.5, 0.5));
@@ -24,7 +24,7 @@ public class MobSpawnerRenderer extends AbstractRenderer<BoundingBoxMobSpawner>
 
         if (ConfigManager.renderMobSpawnerSpawnArea.get()) {
             OffsetBox bb = new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords());
-            renderCuboid(matrixStack, bb, color, false);
+            renderCuboid(matrixStack, bb, color, false, 30);
         }
     }
 
index 8826c4b94f7f40c8b7544da7c29f064cb180bf9e..17bddf7a442444d7d1d88cf8c3ca96a91daa6929 100644 (file)
@@ -31,6 +31,7 @@ public class RenderHelper {
     }
 
     public static void afterRender() {
+        enableDepthTest();
         RenderSystem.enableCull();
         GL11.glDisable(GL11.GL_LINE_SMOOTH);
         RenderSystem.setShaderColor(1, 1, 1, 1);
index 49b3c3d5215bf735a78d5e14b4b1e15df744626a..1b8e7f6bb64f5825c6c4522eb4ee7f0b27c8dd1b 100644 (file)
@@ -13,14 +13,14 @@ public class SlimeChunkRenderer extends AbstractRenderer<BoundingBoxSlimeChunk>
     public void render(MatrixStack matrixStack, BoundingBoxSlimeChunk boundingBox) {
         OffsetBox bb = new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords());
         Color color = BoundingBoxTypeHelper.getColor(boundingBox.getType());
-        renderCuboid(matrixStack, bb, color, false);
+        renderCuboid(matrixStack, bb, color, false, 30);
 
         double maxY = Player.getMaxY(ConfigManager.slimeChunkMaxY.get());
         double dY = maxY - 39;
         if (dY > 0) {
             OffsetPoint min = bb.getMin().offset(0, 38, 0);
             OffsetPoint max = bb.getMax().offset(0, dY, 0);
-            renderCuboid(matrixStack, new OffsetBox(min, max), color, false);
+            renderCuboid(matrixStack, new OffsetBox(min, max), color, false, 30);
         }
     }
 }
index f4ae570cd3e572c5dc03ab638b5e8bbbc2fc4e46..83b33c207b6ce965511fca952d1357b9d1eabe7b 100644 (file)
@@ -15,7 +15,7 @@ public class SpawnableBlocksRenderer extends AbstractRenderer<BoundingBoxSpawnab
             int y = c.getY();
             int z = c.getZ();
             OffsetBox offsetBox = new OffsetBox(x, y, z, x + 1, y, z + 1);
-            renderCuboid(matrixStack, offsetBox, color, false);
+            renderCuboid(matrixStack, offsetBox, color, false, 30);
         });
     }
 }
index d4116848d1ac313ac5cddaa1f910aeaaf82363ce..4c33aeeff04f4d9fc326e083b5241ab23dad77aa 100644 (file)
@@ -24,7 +24,7 @@ public class SpawningSphereRenderer extends AbstractRenderer<BoundingBoxSpawning
         renderOuterSphere(matrixStack, boundingBox, point);
 
         OffsetBox offsetBox = new OffsetBox(sphereCenter, sphereCenter).grow(0.5, 0, 0.5);
-        renderCuboid(matrixStack, offsetBox, safeAreaColor, false);
+        renderCuboid(matrixStack, offsetBox, safeAreaColor, false, 30);
 
         Integer spawnableSpacesCount = boundingBox.getSpawnableSpacesCount();
         if (spawnableSpacesCount != null) {
@@ -52,7 +52,7 @@ public class SpawningSphereRenderer extends AbstractRenderer<BoundingBoxSpawning
             int y = c.getY();
             int z = c.getZ();
             OffsetBox offsetBox = new OffsetBox(x, y, z, x + 1, y, z + 1);
-            renderCuboid(matrixStack, offsetBox, color, false);
+            renderCuboid(matrixStack, offsetBox, color, false, 30);
         });
     }
 }
index 572046475fe3c443874f081f17b1bd297293aa15..0d2bcd4ebf3b763de96bce55202dd0a71579bc44 100644 (file)
@@ -16,6 +16,6 @@ public class WorldSpawnRenderer extends AbstractRenderer<BoundingBoxWorldSpawn>
         double y = Player.getMaxY(ConfigManager.worldSpawnMaxY.get());
 
         OffsetBox offsetBox = new OffsetBox(minCoords.getX(), y, minCoords.getZ(), maxCoords.getX(), y, maxCoords.getZ());
-        renderCuboid(matrixStack, offsetBox.nudge(), BoundingBoxTypeHelper.getColor(boundingBox.getType()), false);
+        renderCuboid(matrixStack, offsetBox.nudge(), BoundingBoxTypeHelper.getColor(boundingBox.getType()), false, 30);
     }
 }
index ca76e6ee689fdcd6633534a0891e6628dd21e18b..fcaa9c412693eea43826685883fa141519d2dc1e 100644 (file)
@@ -26,7 +26,7 @@ public class MixinWorldRenderer {
 
     @Shadow private Frustum frustum;
 
-    @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getWaterMask()Lnet/minecraft/client/render/RenderLayer;", shift = At.Shift.BEFORE))
+    @Inject(method = "render", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = "ldc=string", shift = At.Shift.BEFORE))
     private void onRender(MatrixStack matrixStack, float partialTicks, long ignored_2, boolean ignored_3, Camera ignored_4, GameRenderer ignored_5, LightmapTextureManager ignored_6, Matrix4f ignored_7, CallbackInfo ci) {
         Preconditions.checkNotNull(this.client.player);
         RenderCulling.setFrustum(frustum);