Несинхронизированная / неблокирующая карта Opengl

Я только что нашел следующую спецификацию OpenGL для ARB_map_buffer_range .

Мне интересно, можно ли выполнять неблокирующие вызовы карты, используя это расширение?

В настоящее время в моем приложении я выполняю рендеринг в FBO, который затем сопоставляю с буфером PBO хоста.

glMapBuffer(target_, GL_READ_ONLY);  

Однако проблема в том, что он блокирует поток рендеринга во время передачи данных.

I может уменьшить эту проблему путем конвейерной обработки рендеринга, но задержка является большой проблемой в моем приложении.

Мой вопрос заключается в том, могу ли я использовать 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();

Я не уверен в том, как я узнаю, что операция карты готова, в спецификации упоминаются только «другие методы синхронизации для обеспечить правильную работу ".

Есть идеи?

-121 --- 1 445908-

IDisposable.Dispose () вызывается автоматически? [дубликат] Возможный дубликат: будет ли сборщик мусора вызывать IDisposable.Dispose для меня? У меня есть класс, у которого есть неуправляемые ресурсы. Мой класс реализует интерфейс IDisposable и освобождает ...

Возможный дубликат:
Будет ли сборщик мусора вызывать для меня IDisposable.Dispose?

У меня есть класс, который имеет некоторые неуправляемые ресурсы. Мой класс реализует интерфейс IDisposable и освобождает неуправляемые ресурсы в методе Dispose () . Обязательно ли мне вызывать метод Dispose () или он будет как-то вызываться автоматически? Будет ли его вызывать сборщик мусора?

54
задан Community 23 May 2017 в 02:26
поделиться