Method to use large photo set as particle textures?

I’m trying to create a particle system with photos like this. I am a a little familiar with general particle systems, but I would like to take my understanding further. Any suggestions, insights and direction with this would be greatly appreciated.

In the past, I’ve worked with GL array buffers and other billboard examples, but they only allow you to use 1 texture and you can select which portion of that texture you want your particle to show. What would be the most efficient way to load unique photos for each particle?

Particle class with its own ofImage? This seems like it would be very inefficient with large numbers of particles (1000+).

Particle class with ofMesh and loading each photo into it’s own texture?

I got a response from the Processing forum that might be helpful if anyone here is wondering the same thing:

You can load them individually, just don’t render them individually. Render them in batches (render all quads with texture one, render all quads with texture two and so on). Or even better: Combine all textures to an texture atlas (using the U/V coordinates to render single images/(parts of the atlas)). Furthermore, avoid too many draw calls, try (display lists)/VBOs/VAOs. If you are familiar with shaders, writing a custom point shader and passing it just the XYZ/UV coordinates and your texture atlas should maximize your performance.

  1. Load all images into a texture atlas (1 large texture) 2) use either display lists or VBOs/VAOs for positioning of quads, designating their texture within the texture atlas, and then drawing to the screen once (call a draw of the list/vbo/vao once).

Is this correct? Does it matter how big the images are and how large that texture atlas is? Am I able to scale these images up and still keep a good quality texture?

The maximum texture- and therefore atlas-size is hardware dependent, it ranges from 2048x2048, over 8192x8192 and 16384x16384 to even higher resolutions. Just look up what your hardware can handle. I think 8192x8192 is a reasonable atlas size, if you really need more space, try the maximum supportet texture size or create multiple atlasses and create particle batches.