С вершинами на стороне клиента драйвер в лучшем случае должен выделять некоторое пространство и копировать вершины, потому что он должен допускать возможность того, что клиент изменит данные до того, как GPU использует вершины.
С VBO в лучшем случае эту копию можно пропустить, а для VBO, которые никогда не меняются, можно предположить, что вы получите повышение производительности (хотя, возможно, и небольшое).
Однако для вершин, которые постоянно меняются (например, система частиц, управляемая процессором, или динамически генерируемые квадраты для шрифтов / huds), может быть немного сложно эффективно использовать VBO. Вам нужно использовать какую-то стратегию для повторного использования буферов (потеря сирот, двойная буферизация, тройная буферизация, GL_MAP_INVALIDATE_BUFFER_BIT), и любой вариант, который вы выберете, на удивление плохо работает на некоторых подмножествах устройств Android. Для постоянно меняющихся вершин клиентские вершины могут быть не самыми лучшими, но, по крайней мере, они редко представляют собой черную дыру в производительности.