diff --git a/src/main/java/com/jozufozu/flywheel/Flywheel.java b/src/main/java/com/jozufozu/flywheel/Flywheel.java
index 36d954cc3..86a3c6b9b 100644
--- a/src/main/java/com/jozufozu/flywheel/Flywheel.java
+++ b/src/main/java/com/jozufozu/flywheel/Flywheel.java
@@ -10,7 +10,6 @@ import com.jozufozu.flywheel.api.visualization.VisualizationManager;
import com.jozufozu.flywheel.backend.Backends;
import com.jozufozu.flywheel.backend.MaterialShaderIndices;
import com.jozufozu.flywheel.backend.compile.FlwPrograms;
-import com.jozufozu.flywheel.backend.compile.Pipelines;
import com.jozufozu.flywheel.backend.engine.UniformBuffer;
import com.jozufozu.flywheel.backend.engine.batching.DrawBuffer;
import com.jozufozu.flywheel.config.BackendArgument;
@@ -120,7 +119,6 @@ public class Flywheel {
ShadersModHandler.init();
- Pipelines.init();
Backends.init();
}
diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java b/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java
index 440ae600d..0563de5ac 100644
--- a/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java
+++ b/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java
@@ -104,6 +104,6 @@ public class IndirectPrograms {
}
private static final class Files {
- public static final ResourceLocation INDIRECT_CULL = Flywheel.rl("internal/indirect_cull.glsl");
+ public static final ResourceLocation INDIRECT_CULL = Flywheel.rl("internal/indirect/cull.glsl");
}
}
diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java b/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java
index 6f1736424..b8839ad00 100644
--- a/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java
+++ b/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java
@@ -1,5 +1,7 @@
package com.jozufozu.flywheel.backend.compile;
+import java.util.Objects;
+
import com.jozufozu.flywheel.api.instance.InstanceType;
import com.jozufozu.flywheel.api.vertex.VertexType;
import com.jozufozu.flywheel.glsl.GLSLVersion;
@@ -7,8 +9,8 @@ import com.jozufozu.flywheel.glsl.SourceComponent;
import net.minecraft.resources.ResourceLocation;
-// TODO: move shader api redefinition to a separate file?
-public record Pipeline(GLSLVersion glslVersion, ResourceLocation vertexShader, ResourceLocation fragmentShader, InstanceAssembler assembler) {
+public record Pipeline(GLSLVersion glslVersion, ResourceLocation vertexShader, ResourceLocation fragmentShader,
+ ResourceLocation vertexAPI, ResourceLocation fragmentAPI, InstanceAssembler assembler) {
@FunctionalInterface
public interface InstanceAssembler {
/**
@@ -30,6 +32,8 @@ public record Pipeline(GLSLVersion glslVersion, ResourceLocation vertexShader, R
private GLSLVersion glslVersion;
private ResourceLocation vertex;
private ResourceLocation fragment;
+ private ResourceLocation vertexAPI;
+ private ResourceLocation fragmentAPI;
private InstanceAssembler assembler;
public Builder glslVersion(GLSLVersion glslVersion) {
@@ -47,13 +51,29 @@ public record Pipeline(GLSLVersion glslVersion, ResourceLocation vertexShader, R
return this;
}
+ public Builder vertexAPI(ResourceLocation vertex) {
+ this.vertexAPI = vertex;
+ return this;
+ }
+
+ public Builder fragmentAPI(ResourceLocation fragment) {
+ this.fragmentAPI = fragment;
+ return this;
+ }
+
public Builder assembler(InstanceAssembler assembler) {
this.assembler = assembler;
return this;
}
public Pipeline build() {
- return new Pipeline(glslVersion, vertex, fragment, assembler);
+ Objects.requireNonNull(glslVersion);
+ Objects.requireNonNull(vertex);
+ Objects.requireNonNull(fragment);
+ Objects.requireNonNull(vertexAPI);
+ Objects.requireNonNull(fragmentAPI);
+ Objects.requireNonNull(assembler);
+ return new Pipeline(glslVersion, vertex, fragment, vertexAPI, fragmentAPI, assembler);
}
}
}
diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java b/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java
index 4737ca44d..89baf2302 100644
--- a/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java
+++ b/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java
@@ -17,21 +17,23 @@ public class PipelineCompiler {
.withComponent(uniformComponent)
.withComponent(key -> pipeline.assembler()
.assemble(new Pipeline.InstanceAssemblerContext(key.vertexType(), key.instanceType())))
- .withResource(pipeline.vertexShader())
+ .withResource(pipeline.vertexAPI())
.withComponent(vertexMaterialComponent)
.withResource(key -> key.vertexType()
.layoutShader())
.withResource(key -> key.instanceType()
.instanceShader())
.withResource(key -> key.contextShader()
- .vertexShader()))
+ .vertexShader())
+ .withResource(pipeline.vertexShader()))
.link(PIPELINE.shader(pipeline.glslVersion(), ShaderType.FRAGMENT)
.enableExtension("GL_ARB_conservative_depth")
.withComponent(uniformComponent)
- .withResource(pipeline.fragmentShader())
+ .withResource(pipeline.fragmentAPI())
.withComponent(fragmentMaterialComponent)
.withResource(key -> key.contextShader()
- .fragmentShader()))
+ .fragmentShader())
+ .withResource(pipeline.fragmentShader()))
.then((key, program) -> {
key.contextShader()
.onProgramLink(program);
diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java b/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java
index 04ad2d099..a9aa7c8e7 100644
--- a/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java
+++ b/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java
@@ -5,28 +5,21 @@ import com.jozufozu.flywheel.backend.compile.component.IndirectComponent;
import com.jozufozu.flywheel.backend.compile.component.InstancedArraysComponent;
import com.jozufozu.flywheel.glsl.GLSLVersion;
-import net.minecraft.resources.ResourceLocation;
-
public final class Pipelines {
public static final Pipeline INSTANCED_ARRAYS = Pipeline.builder()
.glslVersion(GLSLVersion.V330)
- .vertex(Files.INSTANCED_ARRAYS_DRAW)
- .fragment(Files.DRAW_FRAGMENT)
+ .vertex(Flywheel.rl("internal/instancing/draw.vert"))
+ .fragment(Flywheel.rl("internal/instancing/draw.frag"))
+ .vertexAPI(Flywheel.rl("internal/instancing/api/vertex.glsl"))
+ .fragmentAPI(Flywheel.rl("internal/instancing/api/fragment.glsl"))
.assembler(InstancedArraysComponent::new)
.build();
public static final Pipeline INDIRECT = Pipeline.builder()
.glslVersion(GLSLVersion.V460)
- .vertex(Files.INDIRECT_DRAW)
- .fragment(Files.DRAW_FRAGMENT)
+ .vertex(Flywheel.rl("internal/indirect/draw.vert"))
+ .fragment(Flywheel.rl("internal/indirect/draw.frag"))
+ .vertexAPI(Flywheel.rl("internal/indirect/api/vertex.glsl"))
+ .fragmentAPI(Flywheel.rl("internal/indirect/api/fragment.glsl"))
.assembler(IndirectComponent::create)
.build();
-
- public static void init() {
- }
-
- public static final class Files {
- public static final ResourceLocation INSTANCED_ARRAYS_DRAW = Flywheel.rl("internal/instanced_arrays_draw.vert");
- public static final ResourceLocation INDIRECT_DRAW = Flywheel.rl("internal/indirect_draw.vert");
- public static final ResourceLocation DRAW_FRAGMENT = Flywheel.rl("internal/draw.frag");
- }
}
diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java b/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java
index e7b1b8bfd..686dd17e0 100644
--- a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java
+++ b/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java
@@ -29,7 +29,7 @@ public class IndirectBuffers {
public static final long PTR_SIZE = Pointer.POINTER_SIZE;
// DRAW COMMAND
- public static final long DRAW_COMMAND_STRIDE = 44;
+ public static final long DRAW_COMMAND_STRIDE = 48;
public static final long DRAW_COMMAND_OFFSET = 0;
// BITS
@@ -39,6 +39,9 @@ public class IndirectBuffers {
private static final int GPU_ONLY_BITS = 0;
// OFFSETS
+ private static final long OBJECT_OFFSET = 0;
+ private static final long TARGET_OFFSET = INT_SIZE;
+ private static final long DRAW_OFFSET = INT_SIZE * 2;
private static final long OFFSET_OFFSET = BUFFER_COUNT * INT_SIZE;
private static final long SIZE_OFFSET = OFFSET_OFFSET + BUFFER_COUNT * PTR_SIZE;
private static final long BUFFERS_SIZE_BYTES = SIZE_OFFSET + BUFFER_COUNT * PTR_SIZE;
@@ -47,6 +50,18 @@ public class IndirectBuffers {
private static final long TARGET_SIZE_OFFSET = OBJECT_SIZE_OFFSET + PTR_SIZE;
private static final long DRAW_SIZE_OFFSET = TARGET_SIZE_OFFSET + PTR_SIZE;
+ /**
+ * A small block of memory divided into 3 contiguous segments:
+ *
+ * {@code buffers}: an array of {@link IndirectBuffers#INT_SIZE} buffer handles.
+ *
+ * {@code offsets}: an array of {@link IndirectBuffers#PTR_SIZE} offsets into the buffers, currently just zeroed.
+ *
+ * {@code sizes}: an array of {@link IndirectBuffers#PTR_SIZE} byte lengths of the buffers.
+ *
+ * Each segment stores {@link IndirectBuffers#BUFFER_COUNT} elements,
+ * one for the object buffer, one for the target buffer, and one for the draw buffer.
+ */
private final MemoryBlock buffers;
private final long objectStride;
private int object;
@@ -70,9 +85,9 @@ public class IndirectBuffers {
void createBuffers() {
final long ptr = buffers.ptr();
nglCreateBuffers(BUFFER_COUNT, ptr);
- object = MemoryUtil.memGetInt(ptr);
- target = MemoryUtil.memGetInt(ptr + 4);
- draw = MemoryUtil.memGetInt(ptr + 8);
+ object = MemoryUtil.memGetInt(ptr + OBJECT_OFFSET);
+ target = MemoryUtil.memGetInt(ptr + TARGET_OFFSET);
+ draw = MemoryUtil.memGetInt(ptr + DRAW_OFFSET);
}
void updateCounts(int objectCount, int drawCount) {
@@ -102,8 +117,8 @@ public class IndirectBuffers {
final long ptr = buffers.ptr();
nglCreateBuffers(BUFFER_COUNT - 1, ptr);
- int objectNew = MemoryUtil.memGetInt(ptr);
- int targetNew = MemoryUtil.memGetInt(ptr + 4);
+ int objectNew = MemoryUtil.memGetInt(ptr + OBJECT_OFFSET);
+ int targetNew = MemoryUtil.memGetInt(ptr + TARGET_OFFSET);
glNamedBufferStorage(objectNew, objectSize, PERSISTENT_BITS);
glNamedBufferStorage(targetNew, targetSize, GPU_ONLY_BITS);
@@ -138,7 +153,7 @@ public class IndirectBuffers {
glDeleteBuffers(draw);
- MemoryUtil.memPutInt(buffers.ptr() + INT_SIZE * 2, drawNew);
+ MemoryUtil.memPutInt(buffers.ptr() + DRAW_OFFSET, drawNew);
draw = drawNew;
drawPtr = MemoryUtil.nmemRealloc(drawPtr, drawSize);
} else {
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/draw.frag b/src/main/resources/assets/flywheel/flywheel/internal/indirect/api/fragment.glsl
similarity index 65%
rename from src/main/resources/assets/flywheel/flywheel/internal/draw.frag
rename to src/main/resources/assets/flywheel/flywheel/internal/indirect/api/fragment.glsl
index 8211e3975..707383754 100644
--- a/src/main/resources/assets/flywheel/flywheel/internal/draw.frag
+++ b/src/main/resources/assets/flywheel/flywheel/internal/indirect/api/fragment.glsl
@@ -1,3 +1,6 @@
+// API
+// ------------------------------------------
+
in vec4 flw_vertexPos;
in vec4 flw_vertexColor;
in vec2 flw_vertexTexCoord;
@@ -12,9 +15,6 @@ in vec4 flw_var1;
in vec4 flw_var2;
in vec4 flw_var3;
-flat in uint _flw_materialFragmentID;
-flat in uint _flw_packedMaterialProperties;
-
vec4 flw_sampleColor;
vec4 flw_fragColor;
@@ -29,8 +29,11 @@ void flw_initFragment();
void flw_materialFragment();
void flw_contextFragment();
-void main() {
- flw_initFragment();
- flw_materialFragment();
- flw_contextFragment();
-}
+// ------------------------------------------
+// INTERNAL
+// ------------------------------------------
+
+uint _flw_materialFragmentID;
+uint _flw_packedMaterialProperties;
+
+// ------------------------------------------
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/api/vertex.glsl b/src/main/resources/assets/flywheel/flywheel/internal/indirect/api/vertex.glsl
new file mode 100644
index 000000000..236f82666
--- /dev/null
+++ b/src/main/resources/assets/flywheel/flywheel/internal/indirect/api/vertex.glsl
@@ -0,0 +1,34 @@
+// API
+// ------------------------------------------
+
+out vec4 flw_vertexPos;
+out vec4 flw_vertexColor;
+out vec2 flw_vertexTexCoord;
+flat out ivec2 flw_vertexOverlay;
+out vec2 flw_vertexLight;
+out vec3 flw_vertexNormal;
+
+out float flw_distance;
+
+out vec4 flw_var0;
+out vec4 flw_var1;
+out vec4 flw_var2;
+out vec4 flw_var3;
+
+void flw_layoutVertex();
+void flw_initVertex();
+void flw_instanceVertex(FlwInstance i);
+void flw_materialVertex();
+void flw_contextVertex();
+
+// ------------------------------------------
+// INTERNAL
+// ------------------------------------------
+
+uint _flw_materialVertexID;
+uint _flw_materialFragmentID;
+uint _flw_packedMaterialProperties;
+
+FlwInstance _flw_unpackInstance(FlwPackedInstance i);
+
+// ------------------------------------------
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect_cull.glsl b/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl
similarity index 97%
rename from src/main/resources/assets/flywheel/flywheel/internal/indirect_cull.glsl
rename to src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl
index a7eb47433..a9f7e2ca2 100644
--- a/src/main/resources/assets/flywheel/flywheel/internal/indirect_cull.glsl
+++ b/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl
@@ -1,6 +1,6 @@
layout(local_size_x = FLW_SUBGROUP_SIZE) in;
-#include "flywheel:internal/indirect_draw_command.glsl"
+#include "flywheel:internal/indirect/mesh.glsl"
// need to add stubs so the instance shader compiles.
vec4 flw_vertexPos;
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.frag b/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.frag
new file mode 100644
index 000000000..c1b735732
--- /dev/null
+++ b/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.frag
@@ -0,0 +1,12 @@
+#include "flywheel:internal/indirect/api/fragment.glsl"
+
+flat in uvec2 _flw_material;
+
+void main() {
+ _flw_materialFragmentID = _flw_material.x;
+ _flw_packedMaterialProperties = _flw_material.y;
+
+ flw_initFragment();
+ flw_materialFragment();
+ flw_contextFragment();
+}
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect_draw.vert b/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.vert
similarity index 59%
rename from src/main/resources/assets/flywheel/flywheel/internal/indirect_draw.vert
rename to src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.vert
index 7401e8baa..006ee3370 100644
--- a/src/main/resources/assets/flywheel/flywheel/internal/indirect_draw.vert
+++ b/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.vert
@@ -1,29 +1,13 @@
-#include "flywheel:internal/indirect_draw_command.glsl"
+#include "flywheel:internal/indirect/api/vertex.glsl"
+#include "flywheel:internal/indirect/mesh.glsl"
-out vec4 flw_vertexPos;
-out vec4 flw_vertexColor;
-out vec2 flw_vertexTexCoord;
-flat out ivec2 flw_vertexOverlay;
-out vec2 flw_vertexLight;
-out vec3 flw_vertexNormal;
-
-out float flw_distance;
-
-out vec4 flw_var0;
-out vec4 flw_var1;
-out vec4 flw_var2;
-out vec4 flw_var3;
-
-uint _flw_materialVertexID;
-flat out uint _flw_materialFragmentID;
-flat out uint _flw_packedMaterialProperties;
+flat out uvec2 _flw_material;
struct Object {
uint batchID;
FlwPackedInstance instance;
};
-
layout(std430, binding = 0) restrict readonly buffer ObjectBuffer {
Object objects[];
};
@@ -36,14 +20,6 @@ layout(std430, binding = 2) restrict readonly buffer DrawCommands {
MeshDrawCommand drawCommands[];
};
-FlwInstance _flw_unpackInstance(FlwPackedInstance i);
-
-void flw_layoutVertex();
-void flw_initVertex();
-void flw_instanceVertex(FlwInstance i);
-void flw_materialVertex();
-void flw_contextVertex();
-
void main() {
uint instanceIndex = objectIDs[gl_BaseInstance + gl_InstanceID];
uint batchID = objects[instanceIndex].batchID;
@@ -53,6 +29,8 @@ void main() {
_flw_materialFragmentID = drawCommands[batchID].fragmentMaterialID;
_flw_packedMaterialProperties = drawCommands[batchID].packedMaterialProperties;
+ _flw_material = uvec2(_flw_materialFragmentID, _flw_packedMaterialProperties);
+
flw_layoutVertex();
flw_initVertex();
flw_instanceVertex(i);
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect_draw_command.glsl b/src/main/resources/assets/flywheel/flywheel/internal/indirect/mesh.glsl
similarity index 100%
rename from src/main/resources/assets/flywheel/flywheel/internal/indirect_draw_command.glsl
rename to src/main/resources/assets/flywheel/flywheel/internal/indirect/mesh.glsl
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/instancing/api/fragment.glsl b/src/main/resources/assets/flywheel/flywheel/internal/instancing/api/fragment.glsl
new file mode 100644
index 000000000..796891579
--- /dev/null
+++ b/src/main/resources/assets/flywheel/flywheel/internal/instancing/api/fragment.glsl
@@ -0,0 +1,41 @@
+// API
+// -----------------------------------------
+in vec4 flw_vertexPos;
+in vec4 flw_vertexColor;
+in vec2 flw_vertexTexCoord;
+flat in ivec2 flw_vertexOverlay;
+in vec2 flw_vertexLight;
+in vec3 flw_vertexNormal;
+
+in float flw_distance;
+
+in vec4 flw_var0;
+in vec4 flw_var1;
+in vec4 flw_var2;
+in vec4 flw_var3;
+
+vec4 flw_sampleColor;
+
+vec4 flw_fragColor;
+ivec2 flw_fragOverlay;
+vec2 flw_fragLight;
+
+vec4 flw_fogFilter(vec4 color);
+
+bool flw_discardPredicate(vec4 finalColor);
+
+void flw_initFragment();
+void flw_materialFragment();
+void flw_contextFragment();
+
+// -----------------------------------------
+// INTERNAL
+// -----------------------------------------
+
+uint _flw_materialVertexID;
+uint _flw_materialFragmentID;
+uint _flw_packedMaterialProperties;
+
+uniform uvec3 _flw_material_instancing;
+
+// -----------------------------------------
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/instanced_arrays_draw.vert b/src/main/resources/assets/flywheel/flywheel/internal/instancing/api/vertex.glsl
similarity index 51%
rename from src/main/resources/assets/flywheel/flywheel/internal/instanced_arrays_draw.vert
rename to src/main/resources/assets/flywheel/flywheel/internal/instancing/api/vertex.glsl
index 784f043ac..5f56bf704 100644
--- a/src/main/resources/assets/flywheel/flywheel/internal/instanced_arrays_draw.vert
+++ b/src/main/resources/assets/flywheel/flywheel/internal/instancing/api/vertex.glsl
@@ -1,3 +1,5 @@
+// API
+// ------------------------------------
out vec4 flw_vertexPos;
out vec4 flw_vertexColor;
out vec2 flw_vertexTexCoord;
@@ -12,29 +14,22 @@ out vec4 flw_var1;
out vec4 flw_var2;
out vec4 flw_var3;
-uint _flw_materialVertexID;
-flat out uint _flw_materialFragmentID;
-flat out uint _flw_packedMaterialProperties;
-
-
-uniform uvec3 _flw_material_instancing;
-
void flw_layoutVertex();
void flw_initVertex();
void flw_instanceVertex(FlwInstance i);
void flw_materialVertex();
void flw_contextVertex();
-void main() {
- _flw_materialVertexID = _flw_material_instancing.x;
- _flw_materialFragmentID = _flw_material_instancing.y;
- _flw_packedMaterialProperties = _flw_material_instancing.z;
+// ------------------------------------
+// INTERNAL
+// ------------------------------------
- FlwInstance i = _flw_unpackInstance();
+uint _flw_materialVertexID;
+uint _flw_materialFragmentID;
+uint _flw_packedMaterialProperties;
- flw_layoutVertex();
- flw_initVertex();
- flw_instanceVertex(i);
- flw_materialVertex();
- flw_contextVertex();
-}
+FlwInstance _flw_unpackInstance();
+
+uniform uvec3 _flw_material_instancing;
+
+// ------------------------------------
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/instancing/draw.frag b/src/main/resources/assets/flywheel/flywheel/internal/instancing/draw.frag
new file mode 100644
index 000000000..0432299f3
--- /dev/null
+++ b/src/main/resources/assets/flywheel/flywheel/internal/instancing/draw.frag
@@ -0,0 +1,11 @@
+#include "flywheel:internal/instancing/api/fragment.glsl"
+
+void main() {
+ _flw_materialVertexID = _flw_material_instancing.x;
+ _flw_materialFragmentID = _flw_material_instancing.y;
+ _flw_packedMaterialProperties = _flw_material_instancing.z;
+
+ flw_initFragment();
+ flw_materialFragment();
+ flw_contextFragment();
+}
diff --git a/src/main/resources/assets/flywheel/flywheel/internal/instancing/draw.vert b/src/main/resources/assets/flywheel/flywheel/internal/instancing/draw.vert
new file mode 100644
index 000000000..21923825e
--- /dev/null
+++ b/src/main/resources/assets/flywheel/flywheel/internal/instancing/draw.vert
@@ -0,0 +1,15 @@
+#include "flywheel:internal/instancing/api/vertex.glsl"
+
+void main() {
+ _flw_materialVertexID = _flw_material_instancing.x;
+ _flw_materialFragmentID = _flw_material_instancing.y;
+ _flw_packedMaterialProperties = _flw_material_instancing.z;
+
+ FlwInstance i = _flw_unpackInstance();
+
+ flw_layoutVertex();
+ flw_initVertex();
+ flw_instanceVertex(i);
+ flw_materialVertex();
+ flw_contextVertex();
+}