The more modern way to do this is using a compute shader since then you can use floats directly and don’t have four fragment shaders duplicating work, but then you have to peel back Processing’s covers to use OpenGL directly.
https://discourse.processing.org/t/compute-shader-particle-system-in-processing/26611 shows how to use compute shaders from Processing.