Как вызвать функцию после обновления кадра?
28 сентября 2017 12:04
Есть следующий код (упрощенно):
Проблема в том, что canvas не успевает обновиться после поворота. Как сделать колбек на обновление кадра? Т.е. запустить .toDataURL(); уже после того, как новый кадр прорисован?
var cam_obj = m_scenes.get_active_camera();
m_cam.rotate_camera(cam_obj, 0, 0, true);
var dataURL = $('#main_canvas_container canvas')[0].toDataURL(); //получаем содержимое canvas.
Проблема в том, что canvas не успевает обновиться после поворота. Как сделать колбек на обновление кадра? Т.е. запустить .toDataURL(); уже после того, как новый кадр прорисован?
29 сентября 2017 19:08
Можно воспользоваться методами set_render_callback/clear_render_callback, чтобы выставить колбек на ближайший кадр, а потом после отработки сразу удалить его:
- но он выполняется прямо перед отрисовкой, поэтому изменения, скорее всего, ещё не будут видны, только если делать его не на следующий, а через один кадр.
Также можно использовать метод canvas_data_url, который снимет ближайший кадр и вернет его, правда в виде урла Blob-объекта, а не dataURL. Пример использования есть во внешнем модуле screen.js в функции взятия скриншота: https://github.com/TriumphLLC/Blend4Web/blob/17.08/src/ext/screen.js#L434-L450
var cam_obj = m_scenes.get_active_camera();
m_cam.rotate_camera(cam_obj, 0, 0, true);
m_main.set_render_callback(function() {
var dataURL = $('#main_canvas_container canvas')[0].toDataURL();
m_main.clear_render_callback();
});
- но он выполняется прямо перед отрисовкой, поэтому изменения, скорее всего, ещё не будут видны, только если делать его не на следующий, а через один кадр.
Также можно использовать метод canvas_data_url, который снимет ближайший кадр и вернет его, правда в виде урла Blob-объекта, а не dataURL. Пример использования есть во внешнем модуле screen.js в функции взятия скриншота: https://github.com/TriumphLLC/Blend4Web/blob/17.08/src/ext/screen.js#L434-L450
09 октября 2017 10:56