minecraft-src/com/mojang/blaze3d/vertex/BufferUploader.java
2025-07-04 02:00:41 +03:00

54 lines
1.5 KiB
Java

package com.mojang.blaze3d.vertex;
import com.mojang.blaze3d.systems.RenderSystem;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public class BufferUploader {
@Nullable
private static VertexBuffer lastImmediateBuffer;
public static void reset() {
if (lastImmediateBuffer != null) {
invalidate();
VertexBuffer.unbind();
}
}
public static void invalidate() {
lastImmediateBuffer = null;
}
public static void drawWithShader(MeshData meshData) {
RenderSystem.assertOnRenderThread();
VertexBuffer vertexBuffer = upload(meshData);
vertexBuffer.drawWithShader(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader());
}
public static void draw(MeshData meshData) {
RenderSystem.assertOnRenderThread();
VertexBuffer vertexBuffer = upload(meshData);
vertexBuffer.draw();
}
private static VertexBuffer upload(MeshData meshData) {
VertexBuffer vertexBuffer = bindImmediateBuffer(meshData.drawState().format());
vertexBuffer.upload(meshData);
return vertexBuffer;
}
private static VertexBuffer bindImmediateBuffer(VertexFormat format) {
VertexBuffer vertexBuffer = format.getImmediateDrawVertexBuffer();
bindImmediateBuffer(vertexBuffer);
return vertexBuffer;
}
private static void bindImmediateBuffer(VertexBuffer buffer) {
if (buffer != lastImmediateBuffer) {
buffer.bind();
lastImmediateBuffer = buffer;
}
}
}