From da960ac8bd53075d98086ea450d905980713d6f7 Mon Sep 17 00:00:00 2001 From: TheJackiMonster <thejackimonster@gmail.com> Date: Thu, 21 Jul 2022 21:50:13 +0200 Subject: [PATCH] Buggy geometry invocations Signed-off-by: TheJackiMonster <thejackimonster@gmail.com> --- projects/fire_works/shaders/generation.comp | 2 +- projects/fire_works/shaders/trail.geom | 29 ++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/projects/fire_works/shaders/generation.comp b/projects/fire_works/shaders/generation.comp index 83b01677..445c8f49 100644 --- a/projects/fire_works/shaders/generation.comp +++ b/projects/fire_works/shaders/generation.comp @@ -148,7 +148,7 @@ void main() { { const uint tid = atomicAdd(trailIndex, 1) % trails.length(); - const uint trailLen = 16; // 64 + int(randomData[(tid + id) % randomData.length()] * 32); + const uint trailLen = 64 + int(randomData[(tid + id) % randomData.length()] * 32); const uint startIndex = atomicAdd(pointIndex, trailLen) % points.length(); diff --git a/projects/fire_works/shaders/trail.geom b/projects/fire_works/shaders/trail.geom index ce0c66ac..39ab595a 100644 --- a/projects/fire_works/shaders/trail.geom +++ b/projects/fire_works/shaders/trail.geom @@ -2,8 +2,11 @@ #extension GL_ARB_separate_shader_objects : enable #extension GL_GOOGLE_include_directive : enable +#define INSTANCE_LEN (16) + layout(points) in; -layout (triangle_strip, max_vertices = 32) out; +layout (triangle_strip, max_vertices = (INSTANCE_LEN * 2)) out; +layout(invocations = 32) in; #include "physics.inc" #include "point.inc" @@ -38,14 +41,24 @@ void main() { const uint startIndex = geomStartIndex[0]; const uint useCount = geomUseCount[0]; - if (useCount <= 1) { + const uint indexOffset = (gl_InvocationID * (INSTANCE_LEN - 1)); + const uint instanceIndex = startIndex + indexOffset; + + uint count = INSTANCE_LEN; + + if (indexOffset + INSTANCE_LEN > useCount) { + count = indexOffset - useCount; + } + + if (count <= 1) { return; } vec4 viewPositions [2]; for (uint i = 0; i < 2; i++) { - const vec3 position = points[startIndex + i].position; + const uint index = (instanceIndex + i) % points.length(); + const vec3 position = points[index].position; viewPositions[i] = view * vec4(position, 1); } @@ -55,11 +68,13 @@ void main() { const float trailFactor = mediumDensity / friction; - for (uint i = 0; i < useCount; i++) { - const float u = float(i + 1) / float(useCount); + for (uint i = 0; i < count; i++) { + const float u = float(indexOffset + i + 1) / float(useCount); + + const uint index = (instanceIndex + i) % points.length(); - const vec3 position = points[startIndex + i].position; - const float size = points[startIndex + i].size; + const vec3 position = points[index].position; + const float size = points[index].size; vec4 viewPos = view * vec4(position, 1); -- GitLab