Я только что нашел следующую спецификацию OpenGL для ARB_map_buffer_range
.
Мне интересно, можно ли с помощью этого расширения выполнять неблокирующие вызовы карты?
В настоящее время в моем приложении выполняется рендеринг в FBO, который затем отображается в буфер PBO хоста.
glMapBuffer(target_, GL_READ_ONLY);
Однако проблема заключается в том, что он блокирует поток рендеринга при передаче данных.
Я мог бы уменьшить эту проблему, используя конвейерную обработку рендеринга, но задержка является большой проблемой в моем приложении.
Мой вопрос заключается в том, могу ли я использовать map_buffer_range с MAP_UNSYNCHRONIZED_BIT и дождаться завершения операции карты в другом потоке или отложить операцию карты в том же потоке, пока поток рендеринга визуализирует следующий кадр.
например.
thread 1:
map();
render_next_frame();
thread 2:
wait_for_map
или
thread 1:
map();
while(!is_map_ready())
do_some_rendering_for_next_frame();
Я не уверен, как я узнаю, что операция карты готова, в спецификации упоминаются только «другие методы синхронизации для обеспечения правильной работы».
Есть идеи?