- 主题:directx怎么实现输出可变帧率?
不只是游戏或者视频本身内容的fps,而是显卡输出信号的场频可变。就是free sync 或者gsync的信号输出。RefreshRate. numerator这个应该是固定场频输出,比如60Hz。怎么实现30-120的动态变化啊。谢谢
--
FROM 112.23.109.*
这属于底层电子信号格式的变化,只能每变一次就初始化一次DX,光靠软件没法实现。
话说这个需求本身就很奇怪:什么样的可变帧率一定要靠改变信号格式?即使你显卡切信号很快,但是显示器每切换一次模式也得黑屏至少1秒,这估计不是你想要的结果。现代显示信号的格式和硬件结构完全不是为这个目的设计的。
--
修改:xenapior FROM 211.86.159.*
FROM 211.86.159.*
不是的,我想问的就是freesync的信号是怎么实现的,也就是现在一些游戏或者手机所说的动态刷新率。您说的显示器切模式,有些高端显示器,是支持freesync或者G sync的。
因为游戏的渲染速度是一直变的,如果显示器还是按照60hz固定显示,即使打开垂直同步,画面还是卡卡的。如果游戏的渲染是30hz到140hz动态变化,好的做法就是显卡也一样这种变化输出,显示器也这样接收显示,这样的画面最平滑,这就是freesync
【 在 xenapior @ [Graphics] 的大作中提到: 】
:
: 这属于底层电子信号格式的变化,只能每变一次就初始化一次DX,光靠软件没法实现。
: 话说这个需求本身就很奇怪:什么样的可变帧率一定要靠改变信号格式?即使你显卡切信号很快,但是显示器每切换一次模式也得黑屏至少1秒,这估计不是你想要的结果。现代显示信号的格式和硬件结构完全不是为这个目的设计的。
:
--
FROM 112.23.109.*
显卡输出到显示器的那个参数叫做刷新率,不叫帧率。这是两个概念。刷新率是显卡驱动层的工作,应用程序不需要做任何事情。free sync 是显卡驱动和显示器共同支持才能实现的。
对于应用程序来说,你只要关注帧率就行了。
【 在 o5o 的大作中提到: 】
: 不只是游戏或者视频本身内容的fps,而是显卡输出信号的场频可变。就是free sync 或者gsync的信号输出。RefreshRate. numerator这个应该是固定场频输出,比如60Hz。怎么实现30-120的动态变化啊。谢谢
--
FROM 120.244.156.*
感谢,我对帧率这个概念有点误解。freesync是显卡和显示器共同作用,但是显卡当前时刻用什么刷新率,freeaync下,这是游戏的帧率来定的,我问得就是dx上这里游戏怎么和显卡变化的刷新率同步上。显卡的输出是跟着游戏渲染速度来的。
【 在 dormouseBHU @ [Graphics] 的大作中提到: 】
:
: 显卡输出到显示器的那个参数叫做刷新率,不叫帧率。这是两个概念。刷新率是显卡驱动层的工作,应用程序不需要做任何事情。free sync 是显卡驱动和显示器共同支持才能实现的。
:
: 对于应用程序来说,你只要关注帧率就行了。
:
--
FROM 223.104.146.*
具体原理不清楚,但是实现这个应该有很多方法吧。最简单的办法就是显卡驱动收到一帧画面就给显示器推送一帧。这不就是可变刷新率嘛。
对比固定帧率,就是无论显卡驱动有没收到新的画面都以一个固定频率定时的给显示器推送数据。
【 在 o5o 的大作中提到: 】
: 感谢,我对帧率这个概念有点误解。freesync是显卡和显示器共同作用,但是显卡当前时刻用什么刷新率,freeaync下,这是游戏的帧率来定的,我问得就是dx上这里游戏怎么和显卡变化的刷新率同步上。显卡的输出是跟着游戏渲染速度来的。
:
--
FROM 120.244.156.*
假如游戏前10秒是60hz的速度渲染,后10秒是30hz的渲染,那显卡驱动是怎么知道某个帧开始,要从60hz改成30hz输出的?是freeaync的显卡驱动会自动去变不需要dx控制么?只看数据有数据来显示就产生v sync?
如果是固定刷新率的显卡,是固定输出vsync,这个dx在初始化时候就是可以设定的
【 在 dormouseBHU @ [Graphics] 的大作中提到: 】
:
: 具体原理不清楚,但是实现这个应该有很多方法吧。最简单的办法就是显卡驱动收到一帧画面就给显示器推送一帧。这不就是可变刷新率嘛。
:
: 对比固定帧率,就是无论显卡驱动有没收到新的画面都以一个固定频率定时的给显示器推送数据。
:
--
FROM 223.104.146.*
首先,显卡驱动并不知道当前的帧率,也不需要知道。只要一帧数据准备好了就产生一个 v sync 就行了(具体机制不清楚,不一定是 v sync。也可能是其他硬件信号)。任意两个 v sync 之间的间隔都不需要相同。对于显示器来说见到 v sync 就刷新,没有就等待。根本就没有一个固定刷新率。
显卡驱动不需要 DX 给任何控制。只要 DX 能告诉显卡驱动一帧图像准备好了就行。
DirectX 我不熟,我估计大概的流程也类似一个 BEGIN() END() 块(或者其他类似的函数)。 在 END() 函数里 DX 会告诉显卡驱动我这帧画完了,你可以拿走了。
【 在 o5o 的大作中提到: 】
: 假如游戏前10秒是60hz的速度渲染,后10秒是30hz的渲染,那显卡驱动是怎么知道某个帧开始,要从60hz改成30hz输出的?是freeaync的显卡驱动会自动去变不需要dx控制么?只看数据有数据来显示就产生v sync?
: 如果是固定刷新率的显卡,是固定输出vsync,这个dx在初始化时候就是可以设定的
:
--
FROM 120.244.156.*
如果说是freesync,没有一个固定刷新率是对的。如果是普通信号,基本刷新率就是固定的,vtotal不会变化,最多一条htotal。
如果按您说的只要数据好了就可以,那有可能freesync时候,显卡驱动就是数据来了就产生vsync,数据没来就一直是v front porch
【 在 dormouseBHU @ [Graphics] 的大作中提到: 】
:
: 首先,显卡驱动并不知道当前的帧率,也不需要知道。只要一帧数据准备好了就产生一个 v sync 就行了(具体机制不清楚,不一定是 v sync。也可能是其他硬件信号)。任意两个 v sync 之间的间隔都不需要相同。对于显示器来说见到 v sync 就刷新,没有就等待。根本就没有一个固定刷新率。
:
: 显卡驱动不需要 DX 给任何控制。只要 DX 能告诉显卡驱动一帧图像准备好了就行。
:
--
FROM 112.23.109.*
freesync也是有范围的,肯定是显卡驱动和显示器协商一个刷新率的范围,两帧间隔过短并不会帧同步信号。间隔过长显卡驱动肯定会自动的插信号的。
【 在 o5o 的大作中提到: 】
: 如果说是freesync,没有一个固定刷新率是对的。如果是普通信号,基本刷新率就是固定的,vtotal不会变化,最多一条htotal。
: 如果按您说的只要数据好了就可以,那有可能freesync时候,显卡驱动就是数据来了就产生vsync,数据没来就一直是v front porch
:
--
FROM 117.136.0.*