Возможно ли сохранить ссылку на фактические изображения, а не называть getImageData для каждого кадра?сохранить ссылку на javascript canvas imageData
Проблема в том, что я получаю fps-капли в равных интервалах при вызове getImageData в контексте холста, который мне нужно прочитать фактические данные.
Когда страница загружается, я сначала создаю массив, который достаточно велик для хранения данных imageData.data, так что память не выделяется каждый кадр. Чтобы обновить этот массив, я должен вызвать getImageData в контексте холста. Если я запускаю javascript, как это, каждые пару секунд есть падение в fps от 60 до 20-30.
Когда я закомментировать строку, вызывающую getImageData, сценарий проходит гладко около 60fps
, например, этот код вызовет падение кадров
// initialize m_canvasData
var m_canvasData = m_canvasContext.getImageData(0, 0, m_width, m_height).data;
// called every frame
function loop()
{
m_canvasData = m_canvasContext.getImageData(0, 0, m_width, m_height).data;
}
этот код не вызовет падение в кадре
var m_canvasData = m_canvasContext.getImageData(0, 0, m_width, m_height).data;
// called every frame
function loop()
{
// m_canvasData = m_canvasContext.getImageData(0, 0, m_width, m_height).data;
}
Я хотел бы просто сохранить ссылку на данные холст вместо вызова getImageData каждого кадра, если тот возможно.
Я не эксперт, но я знаю, что DOM где-то встает, поэтому, если невозможно сохранить ссылку на адрес данных холста, то какой из них наиболее эффективный способ получить данные?
Three.js как-то в состоянии получить 60fps, когда я дать ему холст, чтобы использовать в качестве текстуры, так что я знаю, что есть какой-то способ вокруг получения капли в кадре при получении данных холста
Существует только один нить в коде, поэтому я не верю, что это должна быть проблема с несколькими потоками, где getImageData должен ждать другой поток javascript (хотя, может быть, его ждет, когда браузер завершит рисование холста, но браузер освежает 60-61 fps, поэтому я не думаю, что это проблема)
это отвечает на мой вопрос о том, возможно ли сохранить адрес для данных холста. это не. Я вынужден использовать холст, потому что кадры поступают из тега html5, единственный способ доступа к данным с камеры - рисовать на холсте, а затем вызвать getImageData. – iedoc
Откат fps из-за многомерного массива, который я обновил позже в коде с новыми данными с холста. Несмотря на то, что массив был «назначен» при запуске, javascript, по-видимому, перераспределяет память, когда некоторые данные в многомерном массиве изменяются, но не означает, что значения не меняются или, как кажется.изменение многомерного массива в одномерном массиве позволило решить проблему капли fps. Я привык управлять своей собственной памятью на других языках, поэтому не знал, что javascript автоматически перераспределяет память в многомерных массивах – iedoc