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