AKA : Canvas requestPaint()가 너무 느립니다. requestAnimationFrame() 너무 빠름Canvas onPaint를 업데이트마다 정확히 한 번 호출 하시겠습니까?
FPS 타이머를 만들기 위해 기본 UI 렌더 루프에서 업데이트 당 한 번 가능한 다시 칠하는 QML Canvas를 만들려고합니다.
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
visible:true; width:100; height:100
Canvas {
anchors.fill:parent
onPaint: console.log(+new Date)
}
}
내가 한 번만 콜백을 얻을 :
나는 처음에이 간단한 테스트를 썼다. 그래서requestPaint()
를 추가하지 :
onPaint: {
console.log(+new Date)
requestPaint()
}
변화 없음 : 난 아직 하나의 콜백을 얻는다. markDirty()
을 사용하는 경우와 동일합니다. 실제로 각 콜백 캔버스에 무언가를 칠해도 마찬가지입니다.
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
visible:true; width:100; height:100
Canvas {
anchors.fill:parent
Component.onCompleted: crank()
function crank(){
console.log(+new Date)
requestAnimationFrame(crank)
}
}
}
가 지금은 콜백을 얻을 수 있지만, 너무 많은 :
그래서 requestAnimationFrame()
로 이동. 평균적으로 밀리 초당 77 콜백, 1 밀리 초 내에 127 콜백의 몇 배가 발생합니다. 처음에는 응용 프로그램에 표시되지 않는 수많은 콜백이 있습니다. 비록 내가 console.log()
을 제거하더라도, 나는 내가/내가 묶지 않는다는 것을 증명합니다.)
"프레임 당"한 번 캔버스를 다시 칠하는 방법을 알려면 FPS를 반정도 측정 할 수 있습니까? 어떤 이유로 requestPaint()
이 실제로 작동하지 않습니까? 그리고 왜 requestAnimationFrame()
은 분명히 쓸모가 없습니까?
아, 그리고 FWIW : [웹 브라우저가 하나] (HTTPS와 동일하게 작동 requestAnimationFrame' QML': 계속 다시 그리는 캔버스를 유지 할 것으로 예상하고 원하는대로
다음 코드는 작동 // developer.mozilla.org/en/US/docs/Web/API/window/requestAnimationFrame) : 계속 호출하지 않으면 콜백이 중지됩니다. 이것은 일종의 기하 급수적 인'setInterval()'실수가 아닙니다. – Phrogz