Безопасно читать результаты видимости на ЦП после завершения буфера команд, содержащего вызовы отрисовки, которые вы тестируете на видимость. Вы можете добавить завершенный блок обработчика в буфер команд, чтобы получать уведомления об этом:
commandBuffer.addCompletedHandler { completedCommandBuffer in
self.consumeVisibilityResults()
}
Не забудьте вызвать addCompletedHandler(:)
, прежде чем вызывать commit
в буфере команд.
Обратите внимание, что этот обработчик будет вызываться асинхронно после завершения рисования для текущего кадра, поэтому вы не сможете использовать результаты видимости одного кадра в этом же кадре. По этой причине видимость на основе окклюзионных запросов часто имеет одну или две рамки. Вы можете прочитать хороший обзор этой и связанных с ней проблем здесь .