MoonWorksComputeSpriteBatch/shaders/spritebatch.comp

46 lines
794 B
Plaintext

#version 450
struct Vertex
{
vec3 position;
vec2 texcoord;
vec4 color;
};
// Binding 0: vertices
layout(set = 0, binding = 0) buffer Vertices
{
Vertex vertices[ ];
};
// Binding 1: transform matrices
layout(set = 0, binding = 1) buffer Transforms
{
mat4 transforms[ ];
};
layout(set = 2, binding = 0) uniform UBO
{
uint vertexCount;
} ubo;
layout (local_size_x = 256) in;
void main()
{
// Current buffer index
uint index = gl_GlobalInvocationID.x;
// Don't write past particle count
if (index >= ubo.vertexCount)
{
return;
}
uint transformIndex = index / 4;
mat4 transform = transforms[transformIndex];
vec4 position = vec4(vertices[index].position, 1.0);
vertices[index].position = vec3(transform * position);
}