Same shader, same texture, same blend mode, same viewport. Then what?
Then they will belong to the same batch.
////////////////////////////////////////////////////////////
// Member data
////////////////////////////////////////////////////////////
std::vector<Point> myPoints; ///< Points composing the shape
This is sf::Shape. Shapes are custom geometrical shapes, there's no higher-level way of storing their geometry. sf::Sprite and sf::Text however don't store their geometry, it is deduced from their parameters when they are rendered, which makes them lightweight.
I believe that filling up a giant VBO with all the objects every frame is not efficient.
Well, it's obviously a lot more efficient than immediate mode rendering. I didn't say that it was the best technique ever, it's just the best that I found that matches all the requirements of low-level 2D rendering.
I'd love to see your profiling results that say otherwise.
I didn't write a profiling log, sorry. But in worst case (every drawable uses a completely different set of states, thus no batching happens) it performed the same as the old implementation based on immediate mode, and in the best case (like a tilemap, a particle system, a GUI, etc. ie. many sprites using all the same states) I got an average speed increase of 5x.
You shouldn't bother with this discussion, automatic batching will probably be removed soon, I'm currently working on it.