VulkanShader_1.21.10-0.0.4-alpha.jar

Download file
    package net.vulkanmod.mixin.render.vertex;

import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.blaze3d.vertex.VertexFormatElement;
import net.minecraft.class_2382;
import net.minecraft.class_287;
import net.minecraft.class_290;
import net.minecraft.class_4587;
import net.minecraft.class_4588;
import net.minecraft.class_777;
import net.vulkanmod.interfaces.ExtendedVertexBuilder;
import net.vulkanmod.mixin.matrix.PoseAccessor;
import net.vulkanmod.render.util.MathUtil;
import net.vulkanmod.render.vertex.format.I32_SNorm;
import net.vulkanmod.vulkan.util.ColorUtil;
import org.joml.Matrix4f;
import org.lwjgl.system.MemoryUtil;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;

@Mixin({class_287.class})
public abstract class BufferBuilderM implements class_4588, ExtendedVertexBuilder {
   @Shadow
   private boolean field_21594;
   @Shadow
   private boolean field_21595;
   @Shadow
   private VertexFormat field_1565;
   @Shadow
   private int field_52077;
   @Shadow
   @Final
   private int field_52075;
   private long ptr;

   @Shadow
   protected abstract long method_60805();

   @Shadow
   protected abstract long method_60798(VertexFormatElement var1);

   public void vertex(float x, float y, float z, int packedColor, float u, float v, int overlay, int light, int packedNormal) {
      this.ptr = this.method_60805();
      if (this.field_1565 == class_290.field_1580) {
         MemoryUtil.memPutFloat(this.ptr + 0L, x);
         MemoryUtil.memPutFloat(this.ptr + 4L, y);
         MemoryUtil.memPutFloat(this.ptr + 8L, z);
         MemoryUtil.memPutInt(this.ptr + 12L, packedColor);
         MemoryUtil.memPutFloat(this.ptr + 16L, u);
         MemoryUtil.memPutFloat(this.ptr + 20L, v);
         MemoryUtil.memPutInt(this.ptr + 24L, overlay);
         MemoryUtil.memPutInt(this.ptr + 28L, light);
         MemoryUtil.memPutInt(this.ptr + 32L, packedNormal);
      } else {
         this.field_52077 = this.field_52075;
         this.position(x, y, z);
         this.fastColor(packedColor);
         this.fastUv(u, v);
         this.fastOverlay(overlay);
         this.light(light);
         this.fastNormal(packedNormal);
      }

   }

   public void vertex(float x, float y, float z, float u, float v, int packedColor, int light) {
      this.ptr = this.method_60805();
      MemoryUtil.memPutFloat(this.ptr + 0L, x);
      MemoryUtil.memPutFloat(this.ptr + 4L, y);
      MemoryUtil.memPutFloat(this.ptr + 8L, z);
      MemoryUtil.memPutFloat(this.ptr + 12L, u);
      MemoryUtil.memPutFloat(this.ptr + 16L, v);
      MemoryUtil.memPutInt(this.ptr + 20L, packedColor);
      MemoryUtil.memPutInt(this.ptr + 24L, light);
   }

   public void position(float x, float y, float z) {
      MemoryUtil.memPutFloat(this.ptr + 0L, x);
      MemoryUtil.memPutFloat(this.ptr + 4L, y);
      MemoryUtil.memPutFloat(this.ptr + 8L, z);
   }

   public void fastColor(int packedColor) {
      long ptr = this.method_60798(VertexFormatElement.COLOR);
      if (ptr != -1L) {
         MemoryUtil.memPutInt(ptr, packedColor);
      }

   }

   public void fastUv(float u, float v) {
      long ptr = this.method_60798(VertexFormatElement.UV0);
      if (ptr != -1L) {
         MemoryUtil.memPutFloat(ptr, u);
         MemoryUtil.memPutFloat(ptr + 4L, v);
      }

   }

   public void fastOverlay(int o) {
      long ptr = this.method_60798(VertexFormatElement.UV1);
      if (ptr != -1L) {
         MemoryUtil.memPutInt(ptr, o);
      }

   }

   public void light(int l) {
      long ptr = this.method_60798(VertexFormatElement.UV2);
      if (ptr != -1L) {
         MemoryUtil.memPutInt(ptr, l);
      }

   }

   public void fastNormal(int packedNormal) {
      long ptr = this.method_60798(VertexFormatElement.NORMAL);
      if (ptr != -1L) {
         MemoryUtil.memPutInt(ptr, packedNormal);
      }

   }

   @Overwrite
   public void method_23919(float x, float y, float z, int color, float u, float v, int overlay, int light, float normalX, float normalY, float normalZ) {
      if (this.field_21594) {
         long ptr = this.method_60805();
         MemoryUtil.memPutFloat(ptr + 0L, x);
         MemoryUtil.memPutFloat(ptr + 4L, y);
         MemoryUtil.memPutFloat(ptr + 8L, z);
         MemoryUtil.memPutInt(ptr + 12L, color);
         MemoryUtil.memPutFloat(ptr + 16L, u);
         MemoryUtil.memPutFloat(ptr + 20L, v);
         byte i;
         if (this.field_21595) {
            MemoryUtil.memPutInt(ptr + 24L, overlay);
            i = 28;
         } else {
            i = 24;
         }

         MemoryUtil.memPutInt(ptr + (long)i, light);
         int temp = I32_SNorm.packNormal(normalX, normalY, normalZ);
         MemoryUtil.memPutInt(ptr + (long)i + 4L, temp);
      } else {
         super.method_23919(x, y, z, color, u, v, overlay, light, normalX, normalY, normalZ);
      }

   }

   public void method_22920(class_4587.class_4665 matrixEntry, class_777 quad, float[] brightness, float red, float green, float blue, float alpha, int[] lights, int overlay, boolean useQuadColorData) {
      this.putQuadData(matrixEntry, quad, brightness, red, green, blue, alpha, lights, overlay, useQuadColorData);
   }

   @Unique
   private void putQuadData(class_4587.class_4665 matrixEntry, class_777 quad, float[] brightness, float red, float green, float blue, float alpha, int[] lights, int overlay, boolean useQuadColorData) {
      int[] quadData = quad.comp_3721();
      class_2382 vec3i = quad.comp_3723().method_62675();
      Matrix4f matrix4f = matrixEntry.method_23761();
      boolean trustedNormals = ((PoseAccessor)matrixEntry).trustedNormals();
      int normal = MathUtil.packTransformedNorm(matrixEntry.method_23762(), trustedNormals, (float)vec3i.method_10263(), (float)vec3i.method_10264(), (float)vec3i.method_10260());

      for(int k = 0; k < 4; ++k) {
         int i = k * 8;
         float x = Float.intBitsToFloat(quadData[i]);
         float y = Float.intBitsToFloat(quadData[i + 1]);
         float z = Float.intBitsToFloat(quadData[i + 2]);
         float tx = MathUtil.transformX(matrix4f, x, y, z);
         float ty = MathUtil.transformY(matrix4f, x, y, z);
         float tz = MathUtil.transformZ(matrix4f, x, y, z);
         float r;
         float g;
         float b;
         if (useQuadColorData) {
            int color = quadData[i + 3];
            float quadR = ColorUtil.RGBA.unpackR(color);
            float quadG = ColorUtil.RGBA.unpackG(color);
            float quadB = ColorUtil.RGBA.unpackB(color);
            r = quadR * brightness[k] * red;
            g = quadG * brightness[k] * green;
            b = quadB * brightness[k] * blue;
         } else {
            r = brightness[k] * red;
            g = brightness[k] * green;
            b = brightness[k] * blue;
         }

         int color = ColorUtil.RGBA.pack(r, g, b, alpha);
         int light = lights[k];
         float u = Float.intBitsToFloat(quadData[i + 4]);
         float v = Float.intBitsToFloat(quadData[i + 5]);
         this.vertex(tx, ty, tz, color, u, v, overlay, light, normal);
      }

   }
}
    
Download file