В моем коде у меня есть класс-оболочка для объекта, поддерживаемого двумя объектами-буферами и объектом массива вершин. Я генерировать их, используя это в конструкторе (немного упрощенным):Сбой на VAO, загруженный из основной темы
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &ibo);
glGenBuffers(1, &vbo);
printf("Ind buffers %d %d %d\n", vao, ibo, vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
Printf дает это на первых творений на главном потоке.
Ind buffers 1 1 2
Ind buffers 3 4 5
Ind buffers 4 6 7
Ind buffers 5 8 9
Ind buffers 6 10 11
Ind buffers 7 12 13
Существует один неиндексированный промежуточный элемент, который принимает VAO # 2 и буфер # 3. Это выглядит хорошо для меня. Каждый объект массива получает два уникальных буфера, прикрепленных к нему.
Я также использую этот код для загрузки фоновых ресурсов (скорее, их создания). Потоки для каждого из них имеют свой собственный контекст, созданный с использованием glfwCreateContext и разделяющий ресурсы с основным окном. Когда эти ресурсы сначала создаются, этот вывод приходит:
Ind buffers 1 14 15
Ind buffers 1 16 17
Ind buffers 1 18 19
Ind buffers 1 20 24
Ind buffers 1 21 23
Ind buffers 1 22 25
Ind buffers 1 26 27
Ind buffers 1 28 29
Ind buffers 2 30 31
Ind buffers 2 32 33
Ind buffers 2 34 35
Ind buffers 2 36 37
Ind buffers 2 39 40
Ind buffers 2 38 41
Ind buffers 2 42 43
Ind buffers 2 44 45
Очень быстро после этого, ВАО # 1 используется для рисования в 9 раз, используя различные количества вершин и неизбежно что-то ошибку сегментации.
Вопрос в том, является ли это ошибкой или я что-то явно не так? Я тестирую это на Linux Ubuntu с ноутбуком Dell с картой Nvidia.