Я знаю, что многопоточный OpenGL — деликатная тема, и я не пытаюсь здесь выполнять рендеринг из нескольких потоков. Я также не пытаюсь создавать несколько контекстов и делиться объектами с помощью списков общего доступа. У меня есть один контекст, и я выдаю команды рисования и изменения состояния gl только из основного потока.
Однако я динамически обновляю части VBO в каждом кадре. Я пишу только в VBO, мне не нужно читать его на стороне процессора. Я использую glMapBufferRange, поэтому я могу вычислять измененные данные на лету и мне не нужна дополнительная копия (которая будет создана блокирующим glBufferSubData).
Это работает, и теперь я хотел бы выполнить многопоточное обновление данных (поскольку ему нужно обновлять много вершин со стабильной скоростью 90 кадров в секунду) и использовать постоянно отображаемый буфер (используя GL_MAP_PERSISTENT_BIT). Это потребует запускать glFlushMappedBufferRange всякий раз, когда рабочий поток завершает обновление частей отображенного буфера.
Можно ли вызывать glFlushMappedBufferRange в отдельном потоке? Диапазоны, с которыми работают разные потоки, не перекрываются. Есть ли при этом накладные расходы или неявная синхронизация?
glFlushMappedBufferRange()
. - person Reto Koradi   schedule 23.10.2015glFlushMappedBufferRange()
. - person genpfault   schedule 23.10.2015