template<typename T>
bool at(T*& storage, size_t n);
true
только когда заполнил storage
правильным значением.Здравствуйте, господа.
Не кидайте камнями, если похожий вопрос был.
Честно говоря, не совсем понимаю, что из себя представляет этот самый массив из вектор с 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(...);
- так можно, но загрузка значений для массивов делается иначе.
П3.4 регламента работы сервиса. Регламент ты перед написанием вопроса читал, соблюдать его согласился, но не соблюдаешь.
Это взаимоисключающие направления. Сперва тебе надо получить достаточную квалификацию в C++. UE сложен сам по себе, а для тебя с ним работать сейчас вообще невозможно.
П5.12 регламента работы сервиса. Тут так нельзя. Переходи на фриланс, создавай задачу, назначай стоимость.