Использование объектов синхронизации ограждения в OpenGL

Я пытаюсь найти сценарии, в которых объекты синхронизации можно использовать в OpenGL. Насколько я понимаю, объект синхронизации, однажды помещенный в поток команд GL (с использованием glFenceSync()), будет сигнализирован после того, как все команды GL будут выполнены и реализованы. Если объекты синхронизации являются примитивами синхронизации, почему мы не можем сигнализировать им ВРУЧНУЮ? Где именно эта функциональность может помочь программисту GL?

Верен ли следующий сценарий?

Thread 1 :

Load model
Draw()
glFenceSync()

Thread 2 :

glWaitSync();
ReadPixels
Use data for subsequent operation.

Означает ли это, что я не могу запустить поток 2, если glFenceSync() не вызывается в потоке 1?


person maverick9888    schedule 28.02.2013    source источник
comment
Означает ли это, что я не могу запустить поток 2, пока glFenceSync() не будет вызвана в потоке 1? Итак, пока вы не вызовете glFenceSync, объект синхронизации еще не существует. Нельзя ждать того, чего не существует.   -  person Nicol Bolas    schedule 28.02.2013


Ответы (1)


Заборы предназначены не столько для синхронизации потоков, сколько для того, чтобы знать, когда асинхронные операции завершены. Например, если вы делаете glReadPixels в объект пиксельного буфера (PBO), вы можете захотеть знать, что чтение было завершено, прежде чем вы даже попытаетесь прочитать или сопоставить PBO с клиентским адресным пространством.

Если вы сделаете glReadPixels с PBO, являющимся целью, вызов вернется немедленно, но передача данных действительно может занять некоторое время. Вот где заборы пригодятся.

person datenwolf    schedule 28.02.2013
comment
У меня есть ситуация, когда я рисую в FBO в одном потоке, а затем визуализирую текстуру прикрепления цвета на экран в другом потоке (и создаю забор, чтобы знать, когда рендеринг завершен). Когда доступен новый FBO, я передаю старый FBO и блокировку обратно менеджеру FBO, чтобы он мог запросить блок и узнать, что FBO снова доступен для записи. - person Jherico; 07.05.2015