Canvas 占用大量 CPU

Smi*_*tis 1 opengl qt qml qtquick2

Canvas在 QML 中使用 OpenGL 来绘制旋转Rectangle。这是代码:

//...
property variant points: []

onPointsChanged:{
    canvas.requestPaint();
}

//...

Canvas{
    //...

    onPaint:{
        var ctx = canvas.getContext('2d')

        ctx.clearRect(0,0, width, height);
        ctx.beginPath()
        ctx.strokeStyle = 'red'
        ctx.lineWidth = 3

        for(var i = 0; i < points.length; i++){
            var p1 = convertPoint(points[i])
            if(i == 0){
                ctx.moveTo(p1.x, p1.y)
                continue
            }

            ctx.lineTo(p1.x, p1.y)
        }
        ctx.stroke()
        ctx.restore()
    }

    function convertPoint(p){
        var x = p.x * width;
        var y = p.y * height;
        return Qt.point(x,y);
    }
}
Run Code Online (Sandbox Code Playgroud)

C++代码中计算了4个点,每30ms发送到qml。问题是,在 MinGW 下编译时,此绘制操作占用了 50% 的 CPU 使用率,而在 MSVC2010 下编译时,该绘制操作占用了 17% 的 CPU,这仍然是很多。这是一些错误还是什么不好?

Mit*_*tch 5

如果性能至关重要,请考虑使用新的场景图类。Canvas特别是,您会对QSGGeometryNode类感兴趣。如果您喜欢 API 的简单性Canvas,则必须了解如何最好地使用它。本文将让您对此有所了解。

编辑:我还发现在某些情况下使用QQuickPaintedItem类对嵌入式硬件(特别是 Raspberry Pi)进行了改进。