【Qt】 关于垂直同步 以及在Window 下的一个关闭垂直同步动画过快的问题-暂未找到解决方案

12 篇文章 1 订阅

刷新率

一般来说 刷新率是相对于显示器来说的参数,就是我们常说的60HZ 或者 144HZ。对于其意义就是代表在1秒钟之内刷新的次数,所以通常来说 刷新率越高的屏幕用起来越舒服,个人比较喜欢144HZ 刷新率的屏幕 因为真的看起来比 60HZ的舒服多了,用过一次144HZ就再也不想用60HZ的屏幕了,当然屏幕价格也客观上来讲 刷新率越高 也越贵。

FPS

当然这个代表的是应用程序每秒可以提供多少帧的数据啊,一般是由渲染算法,和CPU GPU等各种因素决定的,总而言之凡是能影响计算一个画面所需要的时间的因素都会影响FPS的值,第一次知道这个值是在打LOL的时候,那时候只有一个浅显的概念,FPS的数值越大打游戏就越流畅。其实就是这样,当FPS越大 ,在显示器刷新率的支持的前提下,一秒钟可以计算的画面越多,那么对于人眼来看,一秒中帧数越多自然就是越流畅啦

那么既然存在 应用程序的每秒钟能计算的画面的次数,还有显示器的每秒的刷新的次数俩个参数,那么这俩个值如果配合不好就会存在各种各样的问题。

画面撕裂 跳帧

当应用程序每秒钟的帧数大于屏幕的刷新速率的时候,那么此时就会存在于 当显示器还在刷新前一帧的时候,应用程序程序就已经计算好第二桢了,所以就会出现,画面中间存在一条或者多条明显的"线段" 把每一帧隔开来。
当然还会有一些问题比如跳帧 ,也还是画面撕裂的原因,应用程序计算画面的速度太快了, 比如AMD 3600X CPU 6核12线程每秒钟可以执行38亿条指令。导致显示器对于某些桢来不及刷新。

输出延迟

除了 应用成刷新画面的速度快于显示器的刷新速率,那当然还有显示器的刷新速率高于应用程序计算桢的速度这种情况,那么由于应用程序第二桢没计算完成,所以导致显示器只能一直显示第一桢的画面,导致了延迟。那如果第二次在刷新第一桢的一半的时候 第二桢计算出来了,那么又会出现画面撕裂的现象了。

垂直同步

于是为了让FPS和刷新率 达到一致就会出现了垂直同步这种手段。早期由于无法控制显示器的刷新率 所以只能通过控制应用程序来同步FPS和刷新率。
它应用的场景就在于FPS高于刷新率的时候去起作用。
当然现在很多显示器也支持调整刷新率的接口,也可以通过改它来同步。

书写速度

在书写软件中,有关于书写速度一直都是软件的核心技术点,所以一般来说为了让用户在软件中书写的效果尽可能的接近于真实书写感觉,书写软件必须尽最大的努力来降低书写延迟。于是呢,一种做法就是关闭应用程序的垂直同步来尽可能让书写速度降低。

在QT中关闭垂直同步的办法是
在主函数中

QSurfaceFormat format = QSurfaceFormat::defaultFormat();
format.setSwapInterval(0);
QSurfaceFormat::setDefaultFormat(format);

但是呢关闭垂直同步之后就会有一个很严重的问题在Window 平台上。
此时我们再去在QML写动画或的时候,效果会变快, 会快于我们的设置的时间
比如在qml中写一个

   Rectangle{
        id: rect
        width: 200
        height: 200
        color: "red"

    }

    PropertyAnimation{
        id: animation;
        target: rect;
        property: "width";
        to: 30;
        duration: 5000

        onRunningChanged: {
            console.info(running,"xxxx\n\n")
        }
    }
    Component.onCompleted: {
        animation.start()
    }

我们本意是让rect 这个Rectangle 的 width 在 5秒内 从200 变为30 但是呢 运行程序会发现效果很快,绝对小于5秒钟的时间。这个问题就是我要说的问题。

到现在还没有找到网上关于这块的解释,之前有有看过帖子有问相同的问题的人,但是还想并没有合理的解决方案。

上面就是我参考网上的一些知识然后自己的思考,不能保证全对,仅供参考哦,如果有什么不正确的地方欢迎指正 ( =•ω•= )m
当然你恰巧知道这个问题的原因也可以教教我ya 感谢! Ψ( ̄∀ ̄)Ψ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值