Performance QML:ShaderEffects的最佳性能计时器
我需要将“时间增量”属性推送到名为“iGlobalTime”的动画的像素着色器。哪里 “iGlobalTime”-着色器播放时间(秒) 但不是像这样的循环: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
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是我的主意!