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