VulkanShader_1.21.10-0.0.4-alpha.jar

Download file
    package net.vulkanmod.render;

import com.mojang.blaze3d.vertex.VertexFormat;
import java.nio.ByteBuffer;
import net.minecraft.class_9801;
import net.vulkanmod.vulkan.Renderer;
import net.vulkanmod.vulkan.memory.MemoryType;
import net.vulkanmod.vulkan.memory.MemoryTypes;
import net.vulkanmod.vulkan.memory.buffer.IndexBuffer;
import net.vulkanmod.vulkan.memory.buffer.VertexBuffer;
import net.vulkanmod.vulkan.memory.buffer.index.AutoIndexBuffer;
import net.vulkanmod.vulkan.shader.GraphicsPipeline;
import net.vulkanmod.vulkan.shader.Pipeline;
import net.vulkanmod.vulkan.texture.VTextureSelector;

public class VBO {
   private final MemoryType memoryType;
   private VertexBuffer vertexBuffer;
   private IndexBuffer indexBuffer;
   private VertexFormat.class_5596 mode;
   private boolean autoIndexed = false;
   private int indexCount;
   private int vertexCount;

   public VBO(boolean useGpuMem) {
      this.memoryType = useGpuMem ? MemoryTypes.GPU_MEM : MemoryTypes.HOST_MEM;
   }

   public void upload(class_9801 meshData) {
      class_9801.class_4574 parameters = meshData.method_60822();
      this.indexCount = parameters.comp_751();
      this.vertexCount = parameters.comp_750();
      this.mode = parameters.comp_752();
      this.uploadVertexBuffer(parameters, meshData.method_60818());
      this.uploadIndexBuffer(meshData.method_60821());
      meshData.close();
   }

   private void uploadVertexBuffer(class_9801.class_4574 parameters, ByteBuffer data) {
      if (data != null) {
         if (this.vertexBuffer != null) {
            this.vertexBuffer.scheduleFree();
         }

         int size = parameters.comp_749().getVertexSize() * parameters.comp_750();
         this.vertexBuffer = new VertexBuffer(size, this.memoryType);
         this.vertexBuffer.copyBuffer(data, size);
      }

   }

   public void uploadIndexBuffer(ByteBuffer data) {
      if (data == null) {
         AutoIndexBuffer autoIndexBuffer;
         switch (this.mode) {
            case field_27381:
               autoIndexBuffer = Renderer.getDrawer().getTriangleFanIndexBuffer();
               this.indexCount = AutoIndexBuffer.DrawType.getTriangleStripIndexCount(this.vertexCount);
               break;
            case field_27380:
            case field_27378:
               autoIndexBuffer = Renderer.getDrawer().getTriangleStripIndexBuffer();
               this.indexCount = AutoIndexBuffer.DrawType.getTriangleStripIndexCount(this.vertexCount);
               break;
            case field_27382:
               autoIndexBuffer = Renderer.getDrawer().getQuadsIndexBuffer();
               break;
            case field_27377:
               autoIndexBuffer = Renderer.getDrawer().getLinesIndexBuffer();
               break;
            case field_29345:
               autoIndexBuffer = Renderer.getDrawer().getDebugLineStripIndexBuffer();
               break;
            case field_27379:
            case field_29344:
               autoIndexBuffer = null;
               break;
            default:
               throw new IllegalStateException("Unexpected draw mode: %s".formatted(this.mode));
         }

         if (this.indexBuffer != null && !this.autoIndexed) {
            this.indexBuffer.scheduleFree();
         }

         if (autoIndexBuffer != null) {
            autoIndexBuffer.checkCapacity(this.vertexCount);
            this.indexBuffer = autoIndexBuffer.getIndexBuffer();
         }

         this.autoIndexed = true;
      } else {
         if (this.indexBuffer != null && !this.autoIndexed) {
            this.indexBuffer.scheduleFree();
         }

         this.indexBuffer = new IndexBuffer(data.remaining(), MemoryTypes.GPU_MEM);
         this.indexBuffer.copyBuffer(data, data.remaining());
      }

   }

   public void bind(GraphicsPipeline pipeline) {
      Renderer renderer = Renderer.getInstance();
      renderer.bindGraphicsPipeline(pipeline);
      VTextureSelector.bindShaderTextures(pipeline);
      renderer.uploadAndBindUBOs(pipeline);
   }

   public void draw() {
      if (this.indexCount != 0) {
         Renderer renderer = Renderer.getInstance();
         Pipeline pipeline = renderer.getBoundPipeline();
         renderer.uploadAndBindUBOs(pipeline);
         if (this.indexBuffer != null) {
            Renderer.getDrawer().drawIndexed(this.vertexBuffer, this.indexBuffer, this.indexCount);
         } else {
            Renderer.getDrawer().draw(this.vertexBuffer, this.vertexCount);
         }
      }

   }

   public void close() {
      if (this.vertexCount > 0) {
         this.vertexBuffer.scheduleFree();
         this.vertexBuffer = null;
         if (!this.autoIndexed) {
            this.indexBuffer.scheduleFree();
            this.indexBuffer = null;
         }

         this.vertexCount = 0;
         this.indexCount = 0;
      }
   }
}
    
Download file