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
This commit is contained in:
Jozufozu 2024-02-16 13:34:34 -08:00
parent dc928b7b7e
commit 51458c2768
5 changed files with 17 additions and 21 deletions

View File

@ -19,8 +19,7 @@ public final class InternalVertex {
.vector("position", FloatRepr.FLOAT, 3) .vector("position", FloatRepr.FLOAT, 3)
.vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4)
.vector("tex", FloatRepr.FLOAT, 2) .vector("tex", FloatRepr.FLOAT, 2)
.vector("overlay", UnsignedIntegerRepr.UNSIGNED_SHORT, 2) .vector("overlay_light", UnsignedIntegerRepr.UNSIGNED_SHORT, 4)
.vector("light", UnsignedIntegerRepr.UNSIGNED_SHORT, 2)
.vector("normal", FloatRepr.NORMALIZED_BYTE, 3) .vector("normal", FloatRepr.NORMALIZED_BYTE, 3)
.build(); .build();

View File

@ -14,8 +14,7 @@ public final class InstanceTypes {
public static final InstanceType<TransformedInstance> TRANSFORMED = SimpleInstanceType.builder(TransformedInstance::new) public static final InstanceType<TransformedInstance> TRANSFORMED = SimpleInstanceType.builder(TransformedInstance::new)
.layout(LayoutBuilder.create() .layout(LayoutBuilder.create()
.vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4)
.vector("light", IntegerRepr.SHORT, 2) .vector("overlay_light", IntegerRepr.SHORT, 4)
.vector("overlay", IntegerRepr.SHORT, 2)
.matrix("pose", FloatRepr.FLOAT, 4) .matrix("pose", FloatRepr.FLOAT, 4)
.matrix("normal", FloatRepr.FLOAT, 3) .matrix("normal", FloatRepr.FLOAT, 3)
.build()) .build())
@ -24,9 +23,9 @@ public final class InstanceTypes {
MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 1, instance.g);
MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 2, instance.b);
MemoryUtil.memPutByte(ptr + 3, instance.a); MemoryUtil.memPutByte(ptr + 3, instance.a);
MemoryUtil.memPutShort(ptr + 4, instance.blockLight); MemoryUtil.memPutInt(ptr + 4, instance.overlay);
MemoryUtil.memPutShort(ptr + 6, instance.skyLight); MemoryUtil.memPutShort(ptr + 8, instance.blockLight);
MemoryUtil.memPutInt(ptr + 8, instance.overlay); MemoryUtil.memPutShort(ptr + 10, instance.skyLight);
MatrixMath.writeUnsafe(instance.model, ptr + 12); MatrixMath.writeUnsafe(instance.model, ptr + 12);
MatrixMath.writeUnsafe(instance.normal, ptr + 76); MatrixMath.writeUnsafe(instance.normal, ptr + 76);
}) })
@ -37,8 +36,7 @@ public final class InstanceTypes {
public static final InstanceType<OrientedInstance> ORIENTED = SimpleInstanceType.builder(OrientedInstance::new) public static final InstanceType<OrientedInstance> ORIENTED = SimpleInstanceType.builder(OrientedInstance::new)
.layout(LayoutBuilder.create() .layout(LayoutBuilder.create()
.vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4) .vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4)
.vector("light", IntegerRepr.SHORT, 2) .vector("overlay_light", IntegerRepr.SHORT, 4)
.vector("overlay", IntegerRepr.SHORT, 2)
.vector("position", FloatRepr.FLOAT, 3) .vector("position", FloatRepr.FLOAT, 3)
.vector("pivot", FloatRepr.FLOAT, 3) .vector("pivot", FloatRepr.FLOAT, 3)
.vector("rotation", FloatRepr.FLOAT, 4) .vector("rotation", FloatRepr.FLOAT, 4)
@ -48,9 +46,9 @@ public final class InstanceTypes {
MemoryUtil.memPutByte(ptr + 1, instance.g); MemoryUtil.memPutByte(ptr + 1, instance.g);
MemoryUtil.memPutByte(ptr + 2, instance.b); MemoryUtil.memPutByte(ptr + 2, instance.b);
MemoryUtil.memPutByte(ptr + 3, instance.a); MemoryUtil.memPutByte(ptr + 3, instance.a);
MemoryUtil.memPutShort(ptr + 4, instance.blockLight); MemoryUtil.memPutInt(ptr + 4, instance.overlay);
MemoryUtil.memPutShort(ptr + 6, instance.skyLight); MemoryUtil.memPutShort(ptr + 8, instance.blockLight);
MemoryUtil.memPutInt(ptr + 8, instance.overlay); MemoryUtil.memPutShort(ptr + 10, instance.skyLight);
MemoryUtil.memPutFloat(ptr + 12, instance.posX); MemoryUtil.memPutFloat(ptr + 12, instance.posX);
MemoryUtil.memPutFloat(ptr + 16, instance.posY); MemoryUtil.memPutFloat(ptr + 16, instance.posY);
MemoryUtil.memPutFloat(ptr + 20, instance.posZ); MemoryUtil.memPutFloat(ptr + 20, instance.posZ);

View File

@ -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_vertexPos = vec4(rotateByQuaternion(flw_vertexPos.xyz - i.pivot, i.rotation) + i.pivot + i.position, 1.0);
flw_vertexNormal = rotateByQuaternion(flw_vertexNormal, i.rotation); flw_vertexNormal = rotateByQuaternion(flw_vertexNormal, i.rotation);
flw_vertexColor = i.color; flw_vertexColor = i.color;
flw_vertexOverlay = i.overlay; flw_vertexOverlay = i.overlay_light.xy;
flw_vertexLight = i.light / 15.0; flw_vertexLight = i.overlay_light.zw / 15.0;
} }

View File

@ -2,6 +2,6 @@ void flw_instanceVertex(in FlwInstance i) {
flw_vertexPos = i.pose * flw_vertexPos; flw_vertexPos = i.pose * flw_vertexPos;
flw_vertexNormal = i.normal * flw_vertexNormal; flw_vertexNormal = i.normal * flw_vertexNormal;
flw_vertexColor = i.color; flw_vertexColor = i.color;
flw_vertexOverlay = i.overlay; flw_vertexOverlay = i.overlay_light.xy;
flw_vertexLight = i.light / 15.0; flw_vertexLight = i.overlay_light.zw / 15.0;
} }

View File

@ -1,15 +1,14 @@
layout(location = 0) in vec3 _flw_a_pos; layout(location = 0) in vec3 _flw_a_pos;
layout(location = 1) in vec4 _flw_a_color; layout(location = 1) in vec4 _flw_a_color;
layout(location = 2) in vec2 _flw_a_texCoord; layout(location = 2) in vec2 _flw_a_texCoord;
layout(location = 3) in ivec2 _flw_a_overlay; layout(location = 3) in ivec4 _flw_a_overlay_light;
layout(location = 4) in ivec2 _flw_a_light; layout(location = 4) in vec3 _flw_a_normal;
layout(location = 5) in vec3 _flw_a_normal;
void _flw_layoutVertex() { void _flw_layoutVertex() {
flw_vertexPos = vec4(_flw_a_pos, 1.0); flw_vertexPos = vec4(_flw_a_pos, 1.0);
flw_vertexColor = _flw_a_color; flw_vertexColor = _flw_a_color;
flw_vertexTexCoord = _flw_a_texCoord; flw_vertexTexCoord = _flw_a_texCoord;
flw_vertexOverlay = _flw_a_overlay; flw_vertexOverlay = _flw_a_overlay_light.xy;
flw_vertexLight = (_flw_a_light >> 4) / 15.0; flw_vertexLight = (_flw_a_overlay_light.zw >> 4) / 15.0;
flw_vertexNormal = _flw_a_normal; flw_vertexNormal = _flw_a_normal;
} }