@quad69

Как построить вершинный буфер в отдельном потоке?

Изучаю C++, решил написать игру (OpenGL + GLFW). По ходу игры постоянно приходится перестраивать некоторые части уровней, сейчас это происходит в основном потоке и очень часто игра на этих моментах фризит.

И вот значит вопрос, как можно вынести это всё в отдельный поток? Проблема в том что gl функции отказываются работать в другом потоке, glGetError возвращает код 1282 (невалидная операция) ещё до каких либо действий с самим буфером. Сейчас в новом потоке я строю сам буфер (это массив из float) и в нем же вызываю glBindVertexArray, glBindBuffer, glBufferData... и игра на этом моменте крашит.

Как вариант, можно собирать массив из точек в отдельном потоке, и по его готовности вызывать glBufferData уже в основном, но правильно ли это? В общем, хотелось бы от знающих людей услышать верный алгоритм.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Сначала стоит подумать над тем, чтобы строительством буфера занимался GPU
Если с этим напряжно, у вас есть вариант использовать DMA (glMapBuffer), (я бы сделал этот вариант), использовать два контекста, или делать как вы хотите - по сигналу дочернего потока вызывать glBufferData

Полезное на почитать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы