2013-08-28 6 views
4

В моем коде у меня есть класс-оболочка для объекта, поддерживаемого двумя объектами-буферами и объектом массива вершин. Я генерировать их, используя это в конструкторе (немного упрощенным):Сбой на 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.

ответ

4

Спецификация OpenGL явно запрещает совместное использование объектов VAO.

Но VBOs по-прежнему используются совместно. Вам просто нужен легкий VAO в каждой теме.

Смежные вопросы