All streams
Search
Write a publication
Pull to refresh
13
0

Web-разработчик, gamedev-проходимец

Send message
Когда вы объявляете vertices как массив float, вы можете использовать sizeof для вычисления его размера. В случае с std::vector — вы получаете таким образом размер объекта класса std::vector. Этим обусловлена разница в определении размера.
А по поводу &vertices[0] и vertices вам лучше почитать первоисточники о работе с массивами и указателями, лучше чем они я вряд ли объясню. Но если вкратце: имя массива является указателем на его первый элемент. Равно как и &vertices[0] — адрес первого элемента. В случае с массивом это равнозначно. А в случае с std::vector нам нужен именно &vertices[0] — поскольку именно он вернет указатель на 1 элемент массива данных, хранящихся в контейнере.
Ответил ниже, извиняюсь.
Я думаю вам нужно получше изучить концепцию буфера. Буфер — это некая область в видеопамяти в данном случае. Чтоб GPU обрабатывал данные из буфера их нужно туда поместить. Вы можете каждый фрейм помещать в буфер столько данных сколько вам нужно, вам этого никто не запрещает. Другой вопрос — что копирование операция медленная, поэтому злоупотреблять не стоит. А как вы храните данные до этого — это уже ваше дело. Можно и в векторе, возможен такой вариант:
std::vector<GLfloat> vertices {...}; 
...
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(GLfloat), &vertices[0], GL_STATIC_DRAW);

Обратите внимание на вычисление размера. Довольно распространена ошибка именно в этом месте.
Спасибо за переводы, надеюсь на продолжение.
Одна деталь — в содержании отсутствует ссылка на 4.6. Да и в предыдущих уроках неплохо бы обновить содержание, хотя это наверное не к вам вопрос.

Information

Rating
Does not participate
Location
Нижний Новгород, Нижегородская обл., Россия
Registered
Activity