File size: 2,891 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package net.minecraft.client.renderer.debug;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.Octree;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.ShapeRenderer;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.apache.commons.lang3.mutable.MutableInt;

@OnlyIn(Dist.CLIENT)
public class OctreeDebugRenderer {
    private final Minecraft minecraft;

    public OctreeDebugRenderer(Minecraft p_368722_) {
        this.minecraft = p_368722_;
    }

    public void render(PoseStack p_368352_, Frustum p_366121_, MultiBufferSource p_363548_, double p_363763_, double p_367605_, double p_361347_) {
        Octree octree = this.minecraft.levelRenderer.getSectionOcclusionGraph().getOctree();
        MutableInt mutableint = new MutableInt(0);
        octree.visitNodes(
            (p_367461_, p_361624_, p_368817_, p_363024_) -> this.renderNode(
                    p_367461_, p_368352_, p_363548_, p_363763_, p_367605_, p_361347_, p_368817_, p_361624_, mutableint, p_363024_
                ),
            p_366121_,
            32
        );
    }

    private void renderNode(
        Octree.Node p_365618_,
        PoseStack p_361623_,
        MultiBufferSource p_362449_,
        double p_368967_,
        double p_363341_,
        double p_365959_,
        int p_362077_,
        boolean p_364236_,
        MutableInt p_366104_,
        boolean p_362959_
    ) {
        AABB aabb = p_365618_.getAABB();
        double d0 = aabb.getXsize();
        long i = Math.round(d0 / 16.0);
        if (i == 1L) {
            p_366104_.add(1);
            double d1 = aabb.getCenter().x;
            double d2 = aabb.getCenter().y;
            double d3 = aabb.getCenter().z;
            int k = p_362959_ ? -16711936 : -1;
            DebugRenderer.renderFloatingText(p_361623_, p_362449_, String.valueOf(p_366104_.getValue()), d1, d2, d3, k, 0.3F);
        }

        VertexConsumer vertexconsumer = p_362449_.getBuffer(RenderType.lines());
        long j = i + 5L;
        ShapeRenderer.renderLineBox(
            p_361623_,
            vertexconsumer,
            aabb.deflate(0.1 * (double)p_362077_).move(-p_368967_, -p_363341_, -p_365959_),
            getColorComponent(j, 0.3F),
            getColorComponent(j, 0.8F),
            getColorComponent(j, 0.5F),
            p_364236_ ? 0.4F : 1.0F
        );
    }

    private static float getColorComponent(long p_368917_, float p_363248_) {
        float f = 0.1F;
        return Mth.frac(p_363248_ * (float)p_368917_) * 0.9F + 0.1F;
    }
}