X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Firtimaled%2Fbbor%2Fclient%2FClientRenderer.java;h=836d0e04fa28e311ef055e9f0a24cb7b1274f912;hb=7db6e0c5990b2ea5909529ee8866fa7fcda18e86;hp=554dcdc064f97d3ed2739751cb1e58d4494d19f7;hpb=5e8953ae97badb54c36f66faabda137b3350c57b;p=BoundingBoxOutlineReloaded.git diff --git a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java index 554dcdc..836d0e0 100644 --- a/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java +++ b/src/main/java/com/irtimaled/bbor/client/ClientRenderer.java @@ -1,6 +1,8 @@ package com.irtimaled.bbor.client; +import com.irtimaled.bbor.client.config.ConfigManager; import com.irtimaled.bbor.client.interop.ClientInterop; +import com.irtimaled.bbor.client.interop.TileEntitiesHelper; import com.irtimaled.bbor.client.models.Point; import com.irtimaled.bbor.client.providers.BeaconProvider; import com.irtimaled.bbor.client.providers.BedrockCeilingProvider; @@ -10,7 +12,6 @@ import com.irtimaled.bbor.client.providers.CustomBeaconProvider; import com.irtimaled.bbor.client.providers.CustomBoxProvider; import com.irtimaled.bbor.client.providers.CustomLineProvider; import com.irtimaled.bbor.client.providers.CustomSphereProvider; -import com.irtimaled.bbor.client.providers.FlowerForestProvider; import com.irtimaled.bbor.client.providers.IBoundingBoxProvider; import com.irtimaled.bbor.client.providers.ICachingProvider; import com.irtimaled.bbor.client.providers.MobSpawnerProvider; @@ -27,14 +28,13 @@ import com.irtimaled.bbor.common.models.AbstractBoundingBox; import com.irtimaled.bbor.common.models.DimensionId; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.fabricmc.api.EnvType; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.util.math.MatrixStack; -import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -66,22 +66,20 @@ public class ClientRenderer { } static { - if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { - registerProvider(new SlimeChunkProvider()); - registerProvider(new WorldSpawnProvider()); - registerProvider(new SpawningSphereProvider()); - registerProvider(new BeaconProvider()); - registerProvider(new CustomBoxProvider()); - registerProvider(new CustomBeaconProvider()); - registerProvider(new BiomeBorderProvider()); - registerProvider(new MobSpawnerProvider()); - registerProvider(new ConduitProvider()); - registerProvider(new SpawnableBlocksProvider()); - registerProvider(new CustomLineProvider()); - registerProvider(new CustomSphereProvider()); - registerProvider(new FlowerForestProvider()); - registerProvider(new BedrockCeilingProvider()); - } + registerProvider(new SlimeChunkProvider()); + registerProvider(new WorldSpawnProvider()); + registerProvider(new SpawningSphereProvider()); + registerProvider(new BeaconProvider()); + registerProvider(new CustomBoxProvider()); + registerProvider(new CustomBeaconProvider()); + registerProvider(new BiomeBorderProvider()); + registerProvider(new MobSpawnerProvider()); + registerProvider(new ConduitProvider()); + registerProvider(new SpawnableBlocksProvider()); + registerProvider(new CustomLineProvider()); + registerProvider(new CustomSphereProvider()); +// registerProvider(new FlowerForestProvider()); + registerProvider(new BedrockCeilingProvider()); } public static void registerProvider(IBoundingBoxProvider provider) { @@ -115,8 +113,11 @@ public class ClientRenderer { long startTime = System.nanoTime(); matrixStack.push(); RenderHelper.beforeRender(); + TileEntitiesHelper.clearCache(); - for (AbstractBoundingBox key : getBoundingBoxes(dimensionId)) { + final List boundingBoxes = getBoundingBoxes(dimensionId); + RenderCulling.flushPreRendering(); + for (AbstractBoundingBox key : boundingBoxes) { AbstractRenderer renderer = key.getRenderer(); if (renderer != null) renderer.render(matrixStack, key); } @@ -124,27 +125,31 @@ public class ClientRenderer { RenderQueue.renderDeferred(); RenderHelper.afterRender(); + RenderCulling.flushRendering(); matrixStack.pop(); lastDurationNanos.set(System.nanoTime() - startTime); } + private static final ObjectArrayList listForRendering = new ObjectArrayList<>(); + public static List getBoundingBoxes(DimensionId dimensionId) { - List tmp = new LinkedList<>(); + listForRendering.clear(); + final boolean doPreCulling = ConfigManager.fastRender.get() >= 2; for (IBoundingBoxProvider provider : providers) { if (provider.canProvide(dimensionId)) { for (AbstractBoundingBox boundingBox : provider.get(dimensionId)) { - if (boundingBox.isVisibleCulling() && isWithinRenderDistance(boundingBox)) { - tmp.add(boundingBox); + if (isWithinRenderDistance(boundingBox)) { + if (doPreCulling && !boundingBox.isVisibleCulling()) continue; + listForRendering.add(boundingBox); } } } } Point point = Player.getPoint(); - final ArrayList result = new ArrayList<>(tmp); - result.sort(Comparator.comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed()); + listForRendering.sort(Comparator.comparingDouble((AbstractBoundingBox boundingBox) -> boundingBox.getDistance(point.getX(), point.getY(), point.getZ())).reversed()); - return result; + return listForRendering; } public static void clear() {