From 51458c276824252560c0aec6fc43c86e06f94c5c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 16 Feb 2024 13:34:34 -0800 Subject: [PATCH] NEA: Not Enough Attributes - Transformed had snuck up to attribute location 17 - Combine overlay and light attributes into one - Flip order of overlay and light in instances to be consistent with the internal vertex layout --- .../flywheel/backend/InternalVertex.java | 3 +-- .../flywheel/lib/instance/InstanceTypes.java | 18 ++++++++---------- .../flywheel/flywheel/instance/oriented.vert | 4 ++-- .../flywheel/instance/transformed.vert | 4 ++-- .../flywheel/internal/vertex_input.vert | 9 ++++----- 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java b/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java index 106354dda..f95e9d431 100644 --- a/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java +++ b/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java @@ -19,8 +19,7 @@ public final class InternalVertex { .vector("position", FloatRepr.FLOAT, 3) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) .vector("tex", FloatRepr.FLOAT, 2) - .vector("overlay", UnsignedIntegerRepr.UNSIGNED_SHORT, 2) - .vector("light", UnsignedIntegerRepr.UNSIGNED_SHORT, 2) + .vector("overlay_light", UnsignedIntegerRepr.UNSIGNED_SHORT, 4) .vector("normal", FloatRepr.NORMALIZED_BYTE, 3) .build(); diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java b/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java index b89aea074..cfb69cbb5 100644 --- a/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java +++ b/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java @@ -14,8 +14,7 @@ public final class InstanceTypes { public static final InstanceType TRANSFORMED = SimpleInstanceType.builder(TransformedInstance::new) .layout(LayoutBuilder.create() .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) - .vector("light", IntegerRepr.SHORT, 2) - .vector("overlay", IntegerRepr.SHORT, 2) + .vector("overlay_light", IntegerRepr.SHORT, 4) .matrix("pose", FloatRepr.FLOAT, 4) .matrix("normal", FloatRepr.FLOAT, 3) .build()) @@ -24,9 +23,9 @@ public final class InstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, instance.blockLight); - MemoryUtil.memPutShort(ptr + 6, instance.skyLight); - MemoryUtil.memPutInt(ptr + 8, instance.overlay); + MemoryUtil.memPutInt(ptr + 4, instance.overlay); + MemoryUtil.memPutShort(ptr + 8, instance.blockLight); + MemoryUtil.memPutShort(ptr + 10, instance.skyLight); MatrixMath.writeUnsafe(instance.model, ptr + 12); MatrixMath.writeUnsafe(instance.normal, ptr + 76); }) @@ -37,8 +36,7 @@ public final class InstanceTypes { public static final InstanceType ORIENTED = SimpleInstanceType.builder(OrientedInstance::new) .layout(LayoutBuilder.create() .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) - .vector("light", IntegerRepr.SHORT, 2) - .vector("overlay", IntegerRepr.SHORT, 2) + .vector("overlay_light", IntegerRepr.SHORT, 4) .vector("position", FloatRepr.FLOAT, 3) .vector("pivot", FloatRepr.FLOAT, 3) .vector("rotation", FloatRepr.FLOAT, 4) @@ -48,9 +46,9 @@ public final class InstanceTypes { MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 3, instance.a); - MemoryUtil.memPutShort(ptr + 4, instance.blockLight); - MemoryUtil.memPutShort(ptr + 6, instance.skyLight); - MemoryUtil.memPutInt(ptr + 8, instance.overlay); + MemoryUtil.memPutInt(ptr + 4, instance.overlay); + MemoryUtil.memPutShort(ptr + 8, instance.blockLight); + MemoryUtil.memPutShort(ptr + 10, instance.skyLight); MemoryUtil.memPutFloat(ptr + 12, instance.posX); MemoryUtil.memPutFloat(ptr + 16, instance.posY); MemoryUtil.memPutFloat(ptr + 20, instance.posZ); diff --git a/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert b/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert index 7428deafb..a6905deb3 100644 --- a/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert +++ b/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert @@ -4,6 +4,6 @@ void flw_instanceVertex(in FlwInstance i) { flw_vertexPos = vec4(rotateByQuaternion(flw_vertexPos.xyz - i.pivot, i.rotation) + i.pivot + i.position, 1.0); flw_vertexNormal = rotateByQuaternion(flw_vertexNormal, i.rotation); flw_vertexColor = i.color; - flw_vertexOverlay = i.overlay; - flw_vertexLight = i.light / 15.0; + flw_vertexOverlay = i.overlay_light.xy; + flw_vertexLight = i.overlay_light.zw / 15.0; } diff --git a/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert b/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert index 2051811d4..f4a94bd0f 100644 --- a/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert +++ b/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert @@ -2,6 +2,6 @@ void flw_instanceVertex(in FlwInstance i) { flw_vertexPos = i.pose * flw_vertexPos; flw_vertexNormal = i.normal * flw_vertexNormal; flw_vertexColor = i.color; - flw_vertexOverlay = i.overlay; - flw_vertexLight = i.light / 15.0; + flw_vertexOverlay = i.overlay_light.xy; + flw_vertexLight = i.overlay_light.zw / 15.0; } diff --git a/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert b/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert index b4f0f5555..c33509634 100644 --- a/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert +++ b/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert @@ -1,15 +1,14 @@ layout(location = 0) in vec3 _flw_a_pos; layout(location = 1) in vec4 _flw_a_color; layout(location = 2) in vec2 _flw_a_texCoord; -layout(location = 3) in ivec2 _flw_a_overlay; -layout(location = 4) in ivec2 _flw_a_light; -layout(location = 5) in vec3 _flw_a_normal; +layout(location = 3) in ivec4 _flw_a_overlay_light; +layout(location = 4) in vec3 _flw_a_normal; void _flw_layoutVertex() { flw_vertexPos = vec4(_flw_a_pos, 1.0); flw_vertexColor = _flw_a_color; flw_vertexTexCoord = _flw_a_texCoord; - flw_vertexOverlay = _flw_a_overlay; - flw_vertexLight = (_flw_a_light >> 4) / 15.0; + flw_vertexOverlay = _flw_a_overlay_light.xy; + flw_vertexLight = (_flw_a_overlay_light.zw >> 4) / 15.0; flw_vertexNormal = _flw_a_normal; }