Canvas使用了大量的CPU

时间:2013-11-04 09:21:04

标签: qt opengl qml qtquick2

我在QML中使用Canvas来使用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);
    }
}

c ++代码中有4个点,每隔30ms发送到qml。问题是,在MinGW下编译时,此绘制操作需要50%的CPU使用率,而在MSVC2010下编译时,占用CPU的17%,这仍然很多。这是一些错误或什么是坏的?

1 个答案:

答案 0 :(得分:4)

如果性能至关重要,请考虑使用new scene graph classes代替Canvas。特别是,你对QSGGeometryNode课感兴趣。如果您更喜欢Canvas API的简单性,您必须了解它的最佳使用方式。 This article让您对此有所了解。

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