This feature would be extremely useful to me, in fact this increased # of batches due to texture switching is the last real bottleneck in my renderer.
So how do you know that this is a bottleneck? Namely, how do you know that you aren’t simply bumping into the fastest your hardware will go?
OP’s suggestion though, would let me collapse almost everything into 1 draw call - that’s perfection!
I think people have taken this “minimize batch count” thing a bit too far to be honest. Actual high-end games, products that cost millions of dollars to product who’s success partially depends on getting as much performance as possible from hardware, do not take some of the steps that people often talk about.
Taking one draw call to render is not “perfection”. It’s simply taking one draw call to render. Everything has costs, and nothing is free.
Texture atlases have costs. You have to make textures bigger, mipmaps are more difficult to make workable, you may waste texture space, etc.
Texture arrays have costs. The entire texture must be small enough to fit into GPU memory all at once. So you can’t have a working set of textures that are in GPU memory; it’s all or nothing for any particular array.
I don’t know what you have done that removes all state changes except texture changes. But I highly doubt that it was “free”. Your particular applications might be able to live within its limitations, but that doesn’t make it free.
The OP’s suggestion might allow you the user to have only one draw call. But that doesn’t mean any of the state change overhead has vanished. What the OP suggests is not possible on current hardware, and unless there is a pretty fundamental change in how textures are implemented, it will not be available on hardware in the near future.
Changing textures requires state changes. Either you are going to ask OpenGL to change that state, or OpenGL is going to change that state internally. But the state change, and all of the associated performance issues therein, will still be there.