Performance QML:ShaderEffects的最佳性能计时器

Performance QML:ShaderEffects的最佳性能计时器,performance,qt,glsl,qml,shader,Performance,Qt,Glsl,Qml,Shader,我需要将“时间增量”属性推送到名为“iGlobalTime”的动画的像素着色器。哪里 “iGlobalTime”-着色器播放时间(秒) 但不是像这样的循环: UniformAnimator on iGlobalTime { from: 0; to: Math.PI * 2; duration: 1000 } 而我总是需要增值 我找到了两种解决方案,但我认为对于着色器,这种方法没有最好的性能: 1)基于计时器 ShaderEffect { property real iGlobalTim

我需要将“时间增量”属性推送到名为“iGlobalTime”的动画的像素着色器。哪里 “iGlobalTime”-着色器播放时间(秒)

但不是像这样的循环:

UniformAnimator on iGlobalTime { from: 0; to: Math.PI * 2; duration: 1000 }
而我总是需要增值

我找到了两种解决方案,但我认为对于着色器,这种方法没有最好的性能:

1)基于计时器

ShaderEffect
{
    property real iGlobalTime: 0
    property real iTimeDeltaSpeed: 0.01    

    Timer
    {
        id: timer
        running: true
        repeat: true
        interval: 10
        onTriggered:
        {
            iGlobalTime += iTimeDeltaSpeed;
        }
    }

    fragmentShader: "
        uniform lowp float iGlobalTime;

        void main()
        {
            // use 'iGlobalTime' in pixel shader...
        }"
}
2)基于数字信息

ShaderEffect
{
    property real iGlobalTime: 0
    property real iTimeDeltaSpeed: 0.01  
    property real iTimeGear: 0  

    NumberAnimation on iTimeGear 
    { 
       loops: Animation.Infinite; 
       from: 0; to: 1; 
       duration: 1000 
     }

    // Whenever chenged 'iTimeGear' we increase global time counter.
    onITimeGearChanged:
    {
        iGlobalTime += iTimeDeltaSpeed;
    }

    fragmentShader: "
        uniform lowp float iGlobalTime;

        void main()
        {
            // use 'iGlobalTime' in pixel shader...
        }"
}
我认为使用“Timer”的方法比使用“NumberAnimation”的方法性能更好,因为“Timer”只更改一个属性


但对于着色器,我希望使用“UniformAnimator”或专门用于着色器效果的东西,它们具有最好的效率,有什么建议吗?

根据我的经验,如果您希望在每秒的某些时间内更改变量(例如使用间隔100更改),计时器的性能会更好。但是,如果您希望平滑地(在每一帧中)更改
时间
变量,则NumberAnimation的性能更高。如果你在寻找粒子系统,那么有一些内部属性(
qt\u Timestamp
)。QML中的shadertoy是我的主意!