Vertex Buffer Objects are GPU stored yes. Benefit of them is especially if you want:
1. Have static geometry as they don't need to be resent on every usage
2. Have objects transformed by vertex shaders
But as with any stream, you can not just alter a value within it, you must replace the stream ie replace the VBO on the GPU -> if you do that every frame there is no reason to use VBOs, it will most likely have lower performance than with a non VBO (unless the GPU driver realizes what you do and opts it on its own to a vertex array)
Vertex Array and VBOs are the two most performant solutions. The other possibilities are nice but not that performant.
As you target low end machines, Vertex Arrays are clearly the way to go.
1. Have static geometry as they don't need to be resent on every usage
2. Have objects transformed by vertex shaders
But as with any stream, you can not just alter a value within it, you must replace the stream ie replace the VBO on the GPU -> if you do that every frame there is no reason to use VBOs, it will most likely have lower performance than with a non VBO (unless the GPU driver realizes what you do and opts it on its own to a vertex array)
Vertex Array and VBOs are the two most performant solutions. The other possibilities are nice but not that performant.
As you target low end machines, Vertex Arrays are clearly the way to go.