minecraft-src/net/minecraft/client/gui/render/pip/GuiProfilerChartRenderer.java
2025-09-18 12:27:44 +00:00

75 lines
2.7 KiB
Java

package net.minecraft.client.gui.render.pip;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.render.state.pip.GuiProfilerChartRenderState;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.util.ARGB;
import net.minecraft.util.Mth;
import net.minecraft.util.profiling.ResultField;
import org.joml.Matrix4f;
@Environment(EnvType.CLIENT)
public class GuiProfilerChartRenderer extends PictureInPictureRenderer<GuiProfilerChartRenderState> {
public GuiProfilerChartRenderer(MultiBufferSource.BufferSource bufferSource) {
super(bufferSource);
}
@Override
public Class<GuiProfilerChartRenderState> getRenderStateClass() {
return GuiProfilerChartRenderState.class;
}
protected void renderToTexture(GuiProfilerChartRenderState guiProfilerChartRenderState, PoseStack poseStack) {
double d = 0.0;
poseStack.translate(0.0F, -5.0F, 0.0F);
Matrix4f matrix4f = poseStack.last().pose();
for (ResultField resultField : guiProfilerChartRenderState.chartData()) {
int i = Mth.floor(resultField.percentage / 4.0) + 1;
VertexConsumer vertexConsumer = this.bufferSource.getBuffer(RenderType.debugTriangleFan());
int j = ARGB.opaque(resultField.getColor());
int k = ARGB.multiply(j, -8355712);
vertexConsumer.addVertex(matrix4f, 0.0F, 0.0F, 0.0F).setColor(j);
for (int l = i; l >= 0; l--) {
float f = (float)((d + resultField.percentage * l / i) * (float) (Math.PI * 2) / 100.0);
float g = Mth.sin(f) * 105.0F;
float h = Mth.cos(f) * 105.0F * 0.5F;
vertexConsumer.addVertex(matrix4f, g, h, 0.0F).setColor(j);
}
vertexConsumer = this.bufferSource.getBuffer(RenderType.debugQuads());
for (int l = i; l > 0; l--) {
float f = (float)((d + resultField.percentage * l / i) * (float) (Math.PI * 2) / 100.0);
float g = Mth.sin(f) * 105.0F;
float h = Mth.cos(f) * 105.0F * 0.5F;
float m = (float)((d + resultField.percentage * (l - 1) / i) * (float) (Math.PI * 2) / 100.0);
float n = Mth.sin(m) * 105.0F;
float o = Mth.cos(m) * 105.0F * 0.5F;
if (!((h + o) / 2.0F < 0.0F)) {
vertexConsumer.addVertex(matrix4f, g, h, 0.0F).setColor(k);
vertexConsumer.addVertex(matrix4f, g, h + 10.0F, 0.0F).setColor(k);
vertexConsumer.addVertex(matrix4f, n, o + 10.0F, 0.0F).setColor(k);
vertexConsumer.addVertex(matrix4f, n, o, 0.0F).setColor(k);
}
}
d += resultField.percentage;
}
}
@Override
protected float getTranslateY(int height, int guiScale) {
return height / 2.0F;
}
@Override
protected String getTextureLabel() {
return "profiler chart";
}
}