Thanks Paul!
Diminishing returns is totally the right english to explain 16 threads reading off a disk
In practice, I’ll probably lower it–but the threads are not just reading off the disk, but also transcoding, and they could be reading a couple dozen large (video) files at the same time, so I think there is a strong argument for threading at that point.
However, doing the actual texture upload on the main thread using PBOs does seem like an interesting approach, and it could greatly simplify the code by not having to manage GL contexts. There’s a couple wrinkles, however: first, the textures themselves may be DXT compressed (Hap). I’ve looked around a bit for examples of using PBOs with DXT and haven’t found anything. Although it seems as though it shouldn’t be an issue. Do you happen to know if that should work, and be cross-platform?
The other wrinkle is just that the actual texture upload happens in a non-Cinder C++ lib (for compatibility with OF and others), but I can probably work out how to write the raw OpenGL calls based on the CInder implementation you outlined above.
Thanks for the suggestions. PBOs seem like a much better approach.