VulkanShader_1.21.10-0.0.4-alpha.jar
Download file
package net.vulkanmod.mixin.render.entity.model;
import java.util.List;
import net.minecraft.class_4587;
import net.minecraft.class_4588;
import net.minecraft.class_630;
import net.vulkanmod.interfaces.ExtendedVertexBuilder;
import net.vulkanmod.interfaces.ModelPartCubeMixed;
import net.vulkanmod.render.model.CubeModel;
import net.vulkanmod.render.vertex.format.I32_SNorm;
import net.vulkanmod.vulkan.util.ColorUtil;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import org.joml.Vector3f;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin({class_630.class})
public abstract class ModelPartM {
@Shadow
@Final
private List<class_630.class_628> field_3663;
@Unique
Vector3f normal = new Vector3f();
@Inject(
method = {"method_22702"},
at = {@At("HEAD")},
cancellable = true
)
private void injCompile(class_4587.class_4665 pose, class_4588 vertexConsumer, int light, int overlay, int color, CallbackInfo ci) {
this.renderCubes(pose, vertexConsumer, light, overlay, color);
ci.cancel();
}
@Unique
public void renderCubes(class_4587.class_4665 pose, class_4588 vertexConsumer, int light, int overlay, int color) {
Matrix4f matrix4f = pose.method_23761();
Matrix3f matrix3f = pose.method_23762();
ExtendedVertexBuilder vertexBuilder = ExtendedVertexBuilder.of(vertexConsumer);
boolean useFastFormat = vertexBuilder != null && vertexBuilder.canUseFastVertex();
if (useFastFormat) {
color = ColorUtil.RGBA.fromArgb32(color);
for(class_630.class_628 cube : this.field_3663) {
ModelPartCubeMixed cubeMixed = (ModelPartCubeMixed)cube;
CubeModel cubeModel = cubeMixed.getCubeModel();
CubeModel.Polygon[] polygons = cubeModel.getPolygons();
cubeModel.transformVertices(matrix4f);
for(CubeModel.Polygon polygon : polygons) {
matrix3f.transform(this.normal.set(polygon.normal()));
this.normal.normalize();
int packedNormal = I32_SNorm.packNormal(this.normal.x(), this.normal.y(), this.normal.z());
CubeModel.Vertex[] vertices = polygon.vertices();
for(CubeModel.Vertex vertex : vertices) {
Vector3f pos = vertex.pos();
vertexBuilder.vertex(pos.x(), pos.y(), pos.z(), color, vertex.u(), vertex.v(), overlay, light, packedNormal);
}
}
}
} else {
for(class_630.class_628 cube : this.field_3663) {
ModelPartCubeMixed cubeMixed = (ModelPartCubeMixed)cube;
CubeModel cubeModel = cubeMixed.getCubeModel();
CubeModel.Polygon[] polygons = cubeModel.getPolygons();
cubeModel.transformVertices(matrix4f);
for(CubeModel.Polygon polygon : polygons) {
matrix3f.transform(this.normal.set(polygon.normal()));
this.normal.normalize();
CubeModel.Vertex[] vertices = polygon.vertices();
for(CubeModel.Vertex vertex : vertices) {
Vector3f pos = vertex.pos();
vertexConsumer.method_23919(pos.x(), pos.y(), pos.z(), color, vertex.u(), vertex.v(), overlay, light, this.normal.x(), this.normal.y(), this.normal.z());
}
}
}
}
}
}
Download file