Skip to content

Commit

Permalink
Clean up handling of vertex formats
Browse files Browse the repository at this point in the history
Minecraft 1.21 makes it unnecessary for us to keep track
of our own VertexFormatDescription.

Additionally, it's no longer possible for mods to create
vertex formats with the same element type specified
multiple times, so we can avoid checking for it.
  • Loading branch information
jellysquid3 committed Aug 16, 2024
1 parent acb25b4 commit e58a77e
Show file tree
Hide file tree
Showing 26 changed files with 185 additions and 295 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package net.caffeinemc.mods.sodium.api.vertex.buffer;

import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.memory.MemoryIntrinsics;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.system.MemoryStack;

Expand Down Expand Up @@ -61,7 +61,7 @@ private static RuntimeException createUnsupportedVertexConsumerThrowable(VertexC
* @param count The number of vertices to copy
* @param format The format of the vertices
*/
void push(MemoryStack stack, long ptr, int count, VertexFormatDescription format);
void push(MemoryStack stack, long ptr, int count, VertexFormat format);

/**
* If this {@link VertexBufferWriter} passes through data to nested {@link VertexConsumer} implementations,
Expand All @@ -86,9 +86,9 @@ default boolean canUseIntrinsics() {
*/
static void copyInto(VertexBufferWriter writer,
MemoryStack stack, long ptr, int count,
VertexFormatDescription format)
VertexFormat format)
{
var length = count * format.stride();
var length = count * format.getVertexSize();
var copy = stack.nmalloc(length);

MemoryIntrinsics.copyMemory(ptr, copy, length);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package net.caffeinemc.mods.sodium.api.vertex.format;

public interface VertexFormatExtensions {
/**
* Returns an integer identifier that represents this vertex format in the global namespace. These identifiers
* are valid only for the current process lifetime and should not be saved to disk.
*/
int sodium$getGlobalId();
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ static VertexFormatRegistry instance() {
return INSTANCE;
}

VertexFormatDescription get(VertexFormat format);
int allocateGlobalId(VertexFormat format);
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package net.caffeinemc.mods.sodium.api.vertex.format.common;

import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.math.MatrixHelper;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.ColorAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.PositionAttribute;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatRegistry;
import org.joml.Matrix4f;

public final class ColorVertex {
public static final VertexFormatDescription FORMAT = VertexFormatRegistry.instance()
.get(DefaultVertexFormat.POSITION_COLOR);
public static final VertexFormat FORMAT = DefaultVertexFormat.POSITION_COLOR;

public static final int STRIDE = 16;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package net.caffeinemc.mods.sodium.api.vertex.format.common;

import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.*;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatRegistry;

public final class ModelVertex {
public static final VertexFormatDescription FORMAT = VertexFormatRegistry.instance()
.get(DefaultVertexFormat.NEW_ENTITY);
public final class EntityVertex {
public static final VertexFormat FORMAT = DefaultVertexFormat.NEW_ENTITY;

public static final int STRIDE = 36;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package net.caffeinemc.mods.sodium.api.vertex.format.common;

import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.ColorAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.LightAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.PositionAttribute;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatRegistry;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.TextureAttribute;

public final class GlyphVertex {
public static final VertexFormatDescription FORMAT = VertexFormatRegistry.instance()
.get(DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP);
public static final VertexFormat FORMAT = DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP;

public static final int STRIDE = 28;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package net.caffeinemc.mods.sodium.api.vertex.format.common;

import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.ColorAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.NormalAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.PositionAttribute;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatRegistry;

public final class LineVertex {
public static final VertexFormatDescription FORMAT = VertexFormatRegistry.instance()
.get(DefaultVertexFormat.POSITION_COLOR_NORMAL);
public static final VertexFormat FORMAT = DefaultVertexFormat.POSITION_COLOR_NORMAL;

public static final int STRIDE = 20;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package net.caffeinemc.mods.sodium.api.vertex.format.common;

import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.ColorAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.LightAttribute;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.PositionAttribute;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatRegistry;
import net.caffeinemc.mods.sodium.api.vertex.attributes.common.TextureAttribute;

public final class ParticleVertex {
public static final VertexFormatDescription FORMAT = VertexFormatRegistry.instance()
.get(DefaultVertexFormat.PARTICLE);
public static final VertexFormat FORMAT = DefaultVertexFormat.PARTICLE;

public static final int STRIDE = 28;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.caffeinemc.mods.sodium.api.vertex.serializer;

import com.mojang.blaze3d.vertex.VertexFormat;
import net.caffeinemc.mods.sodium.api.internal.DependencyInjection;
import net.caffeinemc.mods.sodium.api.vertex.format.VertexFormatDescription;

public interface VertexSerializerRegistry {
VertexSerializerRegistry INSTANCE = DependencyInjection.load(VertexSerializerRegistry.class,
Expand All @@ -11,5 +11,5 @@ static VertexSerializerRegistry instance() {
return INSTANCE;
}

VertexSerializer get(VertexFormatDescription srcFormat, VertexFormatDescription dstFormat);
VertexSerializer get(VertexFormat srcFormat, VertexFormat dstFormat);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import net.caffeinemc.mods.sodium.api.util.ColorARGB;
import net.caffeinemc.mods.sodium.api.util.NormI8;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
import net.caffeinemc.mods.sodium.api.vertex.format.common.ModelVertex;
import net.caffeinemc.mods.sodium.api.vertex.format.common.EntityVertex;
import org.joml.Math;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
Expand All @@ -27,7 +27,7 @@ public static void writeQuadVertices(MutableQuadViewImpl quad, VertexConsumer ve

public static void writeQuadVertices(MutableQuadViewImpl quad, VertexBufferWriter writer, int overlay, Matrix4f matPosition, boolean trustedNormals, Matrix3f matNormal) {
try (MemoryStack stack = MemoryStack.stackPush()) {
long buffer = stack.nmalloc(4 * ModelVertex.STRIDE);
long buffer = stack.nmalloc(4 * EntityVertex.STRIDE);
long ptr = buffer;

final boolean useNormals = quad.hasVertexNormals();
Expand Down Expand Up @@ -56,11 +56,11 @@ public static void writeQuadVertices(MutableQuadViewImpl quad, VertexBufferWrite
normal = MatrixHelper.transformNormal(matNormal, trustedNormals, quad.packedNormal(i));
}

ModelVertex.write(ptr, xt, yt, zt, ColorARGB.toABGR(quad.color(i)), quad.u(i), quad.v(i), overlay, quad.lightmap(i), normal);
ptr += ModelVertex.STRIDE;
EntityVertex.write(ptr, xt, yt, zt, ColorARGB.toABGR(quad.color(i)), quad.u(i), quad.v(i), overlay, quad.lightmap(i), normal);
ptr += EntityVertex.STRIDE;
}

writer.push(stack, buffer, 4, ModelVertex.FORMAT);
writer.push(stack, buffer, 4, EntityVertex.FORMAT);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import net.caffeinemc.mods.sodium.api.util.ColorABGR;
import net.caffeinemc.mods.sodium.api.util.ColorU8;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
import net.caffeinemc.mods.sodium.api.vertex.format.common.ModelVertex;
import net.caffeinemc.mods.sodium.api.vertex.format.common.EntityVertex;
import net.caffeinemc.mods.sodium.client.render.frapi.helper.ColorHelper;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
Expand All @@ -26,7 +26,7 @@ public static void writeQuadVertices(VertexBufferWriter writer, PoseStack.Pose m
Matrix4f matPosition = matrices.pose();

try (MemoryStack stack = MemoryStack.stackPush()) {
long buffer = stack.nmalloc(4 * ModelVertex.STRIDE);
long buffer = stack.nmalloc(4 * EntityVertex.STRIDE);
long ptr = buffer;

for (int i = 0; i < 4; i++) {
Expand All @@ -45,11 +45,11 @@ public static void writeQuadVertices(VertexBufferWriter writer, PoseStack.Pose m
float yt = MatrixHelper.transformPositionY(matPosition, x, y, z);
float zt = MatrixHelper.transformPositionZ(matPosition, x, y, z);

ModelVertex.write(ptr, xt, yt, zt, ColorHelper.multiplyColor(color, quad.getColor(i)), quad.getTexU(i), quad.getTexV(i), overlay, newLight, normal);
ptr += ModelVertex.STRIDE;
EntityVertex.write(ptr, xt, yt, zt, ColorHelper.multiplyColor(color, quad.getColor(i)), quad.getTexU(i), quad.getTexV(i), overlay, newLight, normal);
ptr += EntityVertex.STRIDE;
}

writer.push(stack, buffer, 4, ModelVertex.FORMAT);
writer.push(stack, buffer, 4, EntityVertex.FORMAT);
}
}

Expand All @@ -58,7 +58,7 @@ public static void writeQuadVertices(VertexBufferWriter writer, PoseStack.Pose m
Matrix4f matPosition = matrices.pose();

try (MemoryStack stack = MemoryStack.stackPush()) {
long buffer = stack.nmalloc(4 * ModelVertex.STRIDE);
long buffer = stack.nmalloc(4 * EntityVertex.STRIDE);
long ptr = buffer;

for (int i = 0; i < 4; i++) {
Expand Down Expand Up @@ -98,11 +98,11 @@ public static void writeQuadVertices(VertexBufferWriter writer, PoseStack.Pose m

int color = ColorABGR.pack(fR, fG, fB, a);

ModelVertex.write(ptr, xt, yt, zt, color, quad.getTexU(i), quad.getTexV(i), overlay, light[i], normal);
ptr += ModelVertex.STRIDE;
EntityVertex.write(ptr, xt, yt, zt, color, quad.getTexU(i), quad.getTexV(i), overlay, light[i], normal);
ptr += EntityVertex.STRIDE;
}

writer.push(stack, buffer, 4, ModelVertex.FORMAT);
writer.push(stack, buffer, 4, EntityVertex.FORMAT);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.mojang.blaze3d.vertex.PoseStack;
import net.caffeinemc.mods.sodium.api.math.MatrixHelper;
import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter;
import net.caffeinemc.mods.sodium.api.vertex.format.common.ModelVertex;
import net.caffeinemc.mods.sodium.api.vertex.format.common.EntityVertex;
import net.minecraft.core.Direction;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
Expand Down Expand Up @@ -38,7 +38,7 @@ public class EntityRenderer {

private static final Matrix3f lastMatrix = new Matrix3f();

private static final long SCRATCH_BUFFER = MemoryUtil.nmemAlignedAlloc(64, NUM_CUBE_FACES * NUM_FACE_VERTICES * ModelVertex.STRIDE);
private static final long SCRATCH_BUFFER = MemoryUtil.nmemAlignedAlloc(64, NUM_CUBE_FACES * NUM_FACE_VERTICES * EntityVertex.STRIDE);

private static final Vector3f[] CUBE_CORNERS = new Vector3f[NUM_CUBE_VERTICES];
private static final int[][] CUBE_VERTICES = new int[][] {
Expand Down Expand Up @@ -87,7 +87,7 @@ public static void renderCuboid(PoseStack.Pose matrices, VertexBufferWriter writ
var vertexCount = emitQuads(cuboid, color, overlay, light);

try (MemoryStack stack = MemoryStack.stackPush()) {
writer.push(stack, SCRATCH_BUFFER, vertexCount, ModelVertex.FORMAT);
writer.push(stack, SCRATCH_BUFFER, vertexCount, EntityVertex.FORMAT);
}
}

Expand All @@ -106,16 +106,16 @@ private static int emitQuads(ModelCuboid cuboid, int color, int overlay, int lig
}

emitVertex(ptr, positions[quadIndex][0], color, textures[quadIndex][0], overlay, light, normals[quadIndex]);
ptr += ModelVertex.STRIDE;
ptr += EntityVertex.STRIDE;

emitVertex(ptr, positions[quadIndex][1], color, textures[quadIndex][1], overlay, light, normals[quadIndex]);
ptr += ModelVertex.STRIDE;
ptr += EntityVertex.STRIDE;

emitVertex(ptr, positions[quadIndex][2], color, textures[quadIndex][2], overlay, light, normals[quadIndex]);
ptr += ModelVertex.STRIDE;
ptr += EntityVertex.STRIDE;

emitVertex(ptr, positions[quadIndex][3], color, textures[quadIndex][3], overlay, light, normals[quadIndex]);
ptr += ModelVertex.STRIDE;
ptr += EntityVertex.STRIDE;

vertexCount += 4;
}
Expand All @@ -124,7 +124,7 @@ private static int emitQuads(ModelCuboid cuboid, int color, int overlay, int lig
}

private static void emitVertex(long ptr, Vector3f pos, int color, Vector2f tex, int overlay, int light, int normal) {
ModelVertex.write(ptr, pos.x, pos.y, pos.z, color, tex.x, tex.y, overlay, light, normal);
EntityVertex.write(ptr, pos.x, pos.y, pos.z, color, tex.x, tex.y, overlay, light, normal);
}

private static void prepareVertices(PoseStack.Pose matrices, ModelCuboid cuboid) {
Expand Down
Loading

0 comments on commit e58a77e

Please sign in to comment.