WebGL хорош и асинхронен тем, что вы можете отправить длинный список команд рендеринга, не дожидаясь их завершения. Однако, если по какой-то причине вам нужно дождаться завершения рендеринга, вы должны сделать это синхронно с gl.finish()
. Конечно, было бы лучше, если бы gl.finish
принял обратный вызов и немедленно вернулся?
Вопрос: Есть ли способ подражать этому надежно?
Случай использования: Я передаю большое количество вершин большому затененному холсту, а затем используя drawImage
, чтобы скопировать разделы этого большого холста на небольшие холсты на странице. Я фактически не использую gl.finish()
, но drawImage()
, похоже, имеет тот же эффект. В моем приложении повторная рендеринг запускается только тогда, когда пользователь выполняет действие (например, нажатие кнопки), и может занять несколько сотен миллисекунд. Было бы неплохо, если бы во время рендеринга браузер все еще реагировал, позволяя прокручивать и т.д. Я смотрю, в частности, на решение для Chrome, хотя что-то, что также работает в Firefox и Safari, было бы хорошо.
Возможный (плохой) ответ:. Вы можете попытаться оценить, как долго будет выполняться рендеринг, а затем установить тайм-аут, начинающийся с вызова gl.finish()
. Однако надежно делать эту оценку для всех размеров буфера вершин и всех пользователей будет довольно сложно и неточно.
Возможный (не) ответ: requestAnimationFrame
выполняет то, что я ищу... это не так, не так ли?