Когда вы объявляете vertices как массив float, вы можете использовать sizeof для вычисления его размера. В случае с std::vector — вы получаете таким образом размер объекта класса std::vector. Этим обусловлена разница в определении размера.
А по поводу &vertices[0] и vertices вам лучше почитать первоисточники о работе с массивами и указателями, лучше чем они я вряд ли объясню. Но если вкратце: имя массива является указателем на его первый элемент. Равно как и &vertices[0] — адрес первого элемента. В случае с массивом это равнозначно. А в случае с std::vector нам нужен именно &vertices[0] — поскольку именно он вернет указатель на 1 элемент массива данных, хранящихся в контейнере.
Я думаю вам нужно получше изучить концепцию буфера. Буфер — это некая область в видеопамяти в данном случае. Чтоб GPU обрабатывал данные из буфера их нужно туда поместить. Вы можете каждый фрейм помещать в буфер столько данных сколько вам нужно, вам этого никто не запрещает. Другой вопрос — что копирование операция медленная, поэтому злоупотреблять не стоит. А как вы храните данные до этого — это уже ваше дело. Можно и в векторе, возможен такой вариант:
Спасибо за переводы, надеюсь на продолжение.
Одна деталь — в содержании отсутствует ссылка на 4.6. Да и в предыдущих уроках неплохо бы обновить содержание, хотя это наверное не к вам вопрос.
А по поводу &vertices[0] и vertices вам лучше почитать первоисточники о работе с массивами и указателями, лучше чем они я вряд ли объясню. Но если вкратце: имя массива является указателем на его первый элемент. Равно как и &vertices[0] — адрес первого элемента. В случае с массивом это равнозначно. А в случае с std::vector нам нужен именно &vertices[0] — поскольку именно он вернет указатель на 1 элемент массива данных, хранящихся в контейнере.
Обратите внимание на вычисление размера. Довольно распространена ошибка именно в этом месте.
Одна деталь — в содержании отсутствует ссылка на 4.6. Да и в предыдущих уроках неплохо бы обновить содержание, хотя это наверное не к вам вопрос.