eagler-1-12-4 / src /game /java /net /minecraft /client /renderer /debug /ChunkCullingDebugRenderer.java
soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
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.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.SectionOcclusionGraph;
import net.minecraft.client.renderer.chunk.SectionRenderDispatcher;
import net.minecraft.client.renderer.culling.Frustum;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.Mth;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.joml.Matrix4f;
import org.joml.Vector4f;
@OnlyIn(Dist.CLIENT)
public class ChunkCullingDebugRenderer implements DebugRenderer.SimpleDebugRenderer {
public static final Direction[] DIRECTIONS = Direction.values();
private final Minecraft minecraft;
public ChunkCullingDebugRenderer(Minecraft p_365943_) {
this.minecraft = p_365943_;
}
@Override
public void render(PoseStack p_360717_, MultiBufferSource p_369170_, double p_361626_, double p_369161_, double p_367114_) {
LevelRenderer levelrenderer = this.minecraft.levelRenderer;
if (this.minecraft.sectionPath || this.minecraft.sectionVisibility) {
SectionOcclusionGraph sectionocclusiongraph = levelrenderer.getSectionOcclusionGraph();
for (SectionRenderDispatcher.RenderSection sectionrenderdispatcher$rendersection : levelrenderer.getVisibleSections()) {
SectionOcclusionGraph.Node sectionocclusiongraph$node = sectionocclusiongraph.getNode(sectionrenderdispatcher$rendersection);
if (sectionocclusiongraph$node != null) {
BlockPos blockpos = sectionrenderdispatcher$rendersection.getOrigin();
p_360717_.pushPose();
p_360717_.translate(
(double)blockpos.getX() - p_361626_, (double)blockpos.getY() - p_369161_, (double)blockpos.getZ() - p_367114_
);
Matrix4f matrix4f = p_360717_.last().pose();
if (this.minecraft.sectionPath) {
VertexConsumer vertexconsumer = p_369170_.getBuffer(RenderType.lines());
int i = sectionocclusiongraph$node.step == 0 ? 0 : Mth.hsvToRgb((float)sectionocclusiongraph$node.step / 50.0F, 0.9F, 0.9F);
int j = i >> 16 & 0xFF;
int k = i >> 8 & 0xFF;
int l = i & 0xFF;
for (int i1 = 0; i1 < DIRECTIONS.length; i1++) {
if (sectionocclusiongraph$node.hasSourceDirection(i1)) {
Direction direction = DIRECTIONS[i1];
vertexconsumer.addVertex(matrix4f, 8.0F, 8.0F, 8.0F)
.setColor(j, k, l, 255)
.setNormal((float)direction.getStepX(), (float)direction.getStepY(), (float)direction.getStepZ());
vertexconsumer.addVertex(
matrix4f,
(float)(8 - 16 * direction.getStepX()),
(float)(8 - 16 * direction.getStepY()),
(float)(8 - 16 * direction.getStepZ())
)
.setColor(j, k, l, 255)
.setNormal((float)direction.getStepX(), (float)direction.getStepY(), (float)direction.getStepZ());
}
}
}
if (this.minecraft.sectionVisibility && sectionrenderdispatcher$rendersection.getCompiled().hasRenderableLayers()) {
VertexConsumer vertexconsumer3 = p_369170_.getBuffer(RenderType.lines());
int j1 = 0;
for (Direction direction2 : DIRECTIONS) {
for (Direction direction1 : DIRECTIONS) {
boolean flag = sectionrenderdispatcher$rendersection.getCompiled().facesCanSeeEachother(direction2, direction1);
if (!flag) {
j1++;
vertexconsumer3.addVertex(
matrix4f,
(float)(8 + 8 * direction2.getStepX()),
(float)(8 + 8 * direction2.getStepY()),
(float)(8 + 8 * direction2.getStepZ())
)
.setColor(255, 0, 0, 255)
.setNormal((float)direction2.getStepX(), (float)direction2.getStepY(), (float)direction2.getStepZ());
vertexconsumer3.addVertex(
matrix4f,
(float)(8 + 8 * direction1.getStepX()),
(float)(8 + 8 * direction1.getStepY()),
(float)(8 + 8 * direction1.getStepZ())
)
.setColor(255, 0, 0, 255)
.setNormal((float)direction1.getStepX(), (float)direction1.getStepY(), (float)direction1.getStepZ());
}
}
}
if (j1 > 0) {
VertexConsumer vertexconsumer4 = p_369170_.getBuffer(RenderType.debugQuads());
float f = 0.5F;
float f1 = 0.2F;
vertexconsumer4.addVertex(matrix4f, 0.5F, 15.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 15.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 15.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 15.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 0.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 0.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 0.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 0.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 15.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 15.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 0.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 0.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 0.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 0.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 15.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 15.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 0.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 0.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 15.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 15.5F, 0.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 15.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 15.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 15.5F, 0.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
vertexconsumer4.addVertex(matrix4f, 0.5F, 0.5F, 15.5F).setColor(0.9F, 0.9F, 0.0F, 0.2F);
}
}
p_360717_.popPose();
}
}
}
Frustum frustum = levelrenderer.getCapturedFrustum();
if (frustum != null) {
p_360717_.pushPose();
p_360717_.translate((float)(frustum.getCamX() - p_361626_), (float)(frustum.getCamY() - p_369161_), (float)(frustum.getCamZ() - p_367114_));
Matrix4f matrix4f1 = p_360717_.last().pose();
Vector4f[] avector4f = frustum.getFrustumPoints();
VertexConsumer vertexconsumer1 = p_369170_.getBuffer(RenderType.debugQuads());
this.addFrustumQuad(vertexconsumer1, matrix4f1, avector4f, 0, 1, 2, 3, 0, 1, 1);
this.addFrustumQuad(vertexconsumer1, matrix4f1, avector4f, 4, 5, 6, 7, 1, 0, 0);
this.addFrustumQuad(vertexconsumer1, matrix4f1, avector4f, 0, 1, 5, 4, 1, 1, 0);
this.addFrustumQuad(vertexconsumer1, matrix4f1, avector4f, 2, 3, 7, 6, 0, 0, 1);
this.addFrustumQuad(vertexconsumer1, matrix4f1, avector4f, 0, 4, 7, 3, 0, 1, 0);
this.addFrustumQuad(vertexconsumer1, matrix4f1, avector4f, 1, 5, 6, 2, 1, 0, 1);
VertexConsumer vertexconsumer2 = p_369170_.getBuffer(RenderType.lines());
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[0]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[1]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[1]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[2]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[2]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[3]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[3]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[0]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[4]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[5]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[5]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[6]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[6]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[7]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[7]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[4]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[0]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[4]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[1]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[5]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[2]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[6]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[3]);
this.addFrustumVertex(vertexconsumer2, matrix4f1, avector4f[7]);
p_360717_.popPose();
}
}
private void addFrustumVertex(VertexConsumer p_361872_, Matrix4f p_369368_, Vector4f p_365578_) {
p_361872_.addVertex(p_369368_, p_365578_.x(), p_365578_.y(), p_365578_.z()).setColor(-16777216).setNormal(0.0F, 0.0F, -1.0F);
}
private void addFrustumQuad(
VertexConsumer p_365841_,
Matrix4f p_367573_,
Vector4f[] p_369613_,
int p_360822_,
int p_362980_,
int p_367860_,
int p_360867_,
int p_367084_,
int p_367738_,
int p_367810_
) {
float f = 0.25F;
p_365841_.addVertex(p_367573_, p_369613_[p_360822_].x(), p_369613_[p_360822_].y(), p_369613_[p_360822_].z())
.setColor((float)p_367084_, (float)p_367738_, (float)p_367810_, 0.25F);
p_365841_.addVertex(p_367573_, p_369613_[p_362980_].x(), p_369613_[p_362980_].y(), p_369613_[p_362980_].z())
.setColor((float)p_367084_, (float)p_367738_, (float)p_367810_, 0.25F);
p_365841_.addVertex(p_367573_, p_369613_[p_367860_].x(), p_369613_[p_367860_].y(), p_369613_[p_367860_].z())
.setColor((float)p_367084_, (float)p_367738_, (float)p_367810_, 0.25F);
p_365841_.addVertex(p_367573_, p_369613_[p_360867_].x(), p_369613_[p_360867_].y(), p_369613_[p_360867_].z())
.setColor((float)p_367084_, (float)p_367738_, (float)p_367810_, 0.25F);
}
}