为什么会想到修改垂直同步
在写OpenGL代码的时候发现帧率只有60fps左右,非常无语,我的RX470D怎么着也不可能才跑这么点,连特么核显都不如啊。想想一定是开了垂直同步。那就想辙关闭呗。
查找关闭的方法
由于用的是 SDL2 + OpenGL,首先想到的是 SDL2 中有没有相关的接口去关闭。
google了一下,果然有一个:
SDL_GL_SetSwapInterval(0);
然而事情肯定没这么简单。果然,运行程序依然60fps。
接着google如何关闭 AMD的垂直同步,找到方案1:
编辑 /usr/share/X11/xorg.conf.d/10-radeon.conf
Section "OutputClass"
Identifier "Radeon"
MatchDriver "radeon"
Driver "radeon"
EndSection
在其中加上如下:
Option "TearFree" "on"
尝试了一下,问题依然,甚至重启后桌面环境都起不来了。
继续google, 在AMD官网找到方案2:
Enabling/Disabling AMD FreeSync
In order to enable FreeSync, please run the following terminal command:
DISPLAY=:0 xrandr --output DisplayPort-# --set "freesync" 1
where # is your display's number (e.g., DisplayPort-0).
In order to disable FreeSync, please run the following terminal command:
DISPLAY=:0 xrandr --output DisplayPort-# --set "freesync" 0
where # is your display's number (e.g., DisplayPort-0).
我用的 DVI 接口所以执行如下命令:
DISPLAY=:0 xrandr --output DVI-D-0-# --set "freesync" 0
DISPLAY=:0 xrandr --output DVI-D-0-# --set "tearsync" "off"
也还是不工作
继续google,最后在 Youtube 上发现方案3:
使用环境变量 vblank_mode
-
vblank_mode=0
关闭垂直同步 -
vblank_mode=1
打开垂直同步
# 以环境变量 vblank_mode=0 启动程序
vblank_mode=0 ./OpenGL程序
注意: vblank_mode=0 后 SDL2 中的 SDL_GL_SetSwapInterval(0);
仍然需要,这样才能在程序中打开垂直同步。
竟然可以了,帧率飙升到 6000fps,神奇的东西。
在此还学到个东西:如何以指定环境变量运行程序
OLDPWD=/ cd -
这个命令将 环境变量 OLDPWD=/
传递给 cd -
, 这个设定不会改变 cd
父进程的 OLDPWD
环境变量。
这个和在 cd
中执行 putenv("OLDPWD=/");
效果是一样的。
网友评论