Честно говоря, не совсем понимаю, что из себя представляет этот самый массив из вектор с n=2, загруженный в буфер
GLfloat raindrops[] - тут у тебя закодировано 6 вершин. Ты мог бы сделать и такое объявление: glm::vec3 raindrops[], проинициализировав элементы массива должным образом. Разницы было бы никакой.glm::vec2 translations[100] можно объявить как GLfloat translations[300] и разницы будет тоже никакой.translations и память raindrops - это просто память чтобы заполнить буфер. Под вопросом для GPU остается только то, как эту память нужно интерпретировать чтобы получить атрибуты.Вот на примере того же квадрата, я загружаю в VBO 6 вершин, указываю шаг в 3 элемента (3 координаты) и на основе этого opengl отрисовывает мне пресловутый квадрат.
GLfloat raindrops[] - это данные буфера позиций вершин примитива на стороне CPU.glBufferData(GL_ARRAY_BUFFER, sizeof(raindrops), raindrops, GL_STATIC_DRAW); - переносим данные буфера позиций из памяти CPU в память GPU.glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0); - указываем, что каждый атрибут позиции вершины представлен тремя компонентами без нормализации и с типом float в буфере, а смещение между двумя атрибутами в буфере равно 12Б(3 * sizeof(GLfloat) == 12). При этом, базовое смещение внутри буфера до первого атрибута отсутствует.layout (location = 0) in vec3 aPos;, т.е. атрибут на три вещественных компонента.glVertexAttribDivisor.Здесь же я, по сути, делаю то же самое, только aOffset - это какой-то длинный пак данных, в котором я просто указываю шаг через glVertexAttribDivisor(1, 6)?
glVertexAttribDivisor(1, 1);.glVertexAttribDivisor(1, 6); означает что один атрибут обрабатывается за 6 инстансов. Через эту настройку можно управлять группировкой атрибутов между инстансами.glVertexAttribDivisor(1, 1); - выбирать следующий атрибут только для следующего инстанса, а не для следующей вершины.Так же небольшой нюанс возник с VAO, вот, допустим, я передаю те самые 2 (0 и 1) атрибута, т.е. мой VAO будет выглядеть следующим образом
Так же я немного не понял вот эту строчку в шейдере:
vec4(aPos.xy + aOffset, 0.0, 1.0);.vec4(aPos + vec3(aOffset, 0.0), 1.0);И немного ещё не разобрался с вызовом, для подобной схемы вызов тех самых инстансов может производиться следующим образом?
glDrawArraysInstanced. Именно он запускает отрисовку с инстансингом. Все остальное остается как есть, независимо от состояния инстансинга.А насчёт RenderDoc, я, в общем-то, его поставил и вроде как с базовыми механиками подразобрался, но у меня возникло небольшое недопонимание с анализом самого кадра.
можно не рассчитывать даже на удалёнку от переехавших российских компаний?
Успешная молодая бизнес-вумен сорока лет ищет состоявшегося мужчину-девственника 25 лет с 20-летним опытом в сексе.
aPos + offset - размерность надо выровнять.uniform vec2 offsets[100]; - какой размер одного элемента? Думаю - 16Б.glGetUniformLocation(...); - так можно, но загрузка значений для массивов делается иначе.
Первый способ - это написать конструктор шаблона класса в C++17 и дальше, типы параметров которого будут взяты из аргументов шаблона.
Второй способ - это написать шаблон функции, типы параметров которой взяты из аргументов шаблона.
У тебя не сделано ни то, ни это. У тебя нет шансов на автоматический вывод шаблонных аргументов.