Realized that the OpenGL library I'm using looks up the size of the elements in the array for every access when writing to a vertex attribute array. Wrote my own version of this that caches the size and now my renderer is cooking (I have a large vertex attribute array that I use for instancing).
This is definitely good enough for me for now, as I'm now drawing millions of entities per second, which is Just Fine™️ for 2D rendering. 🔥
@noneuclideandreamer ohhhhh it's a sphere packing! And you're slicing it from far to near (or something). Now I get it. For some reason it didn't click before. Nice!