在 800x480 屏幕上启动 VCMI?

在 800x480 屏幕上启动 VCMI?

背景:

  1. 由于 HoMM3 是在 800x600 分辨率的黑暗时代制作的,因此 VCMI 要求最低分辨率为 800x600
  2. VCMI 通过 SDL 执行检查,如果像素分辨率太小,则会自动崩溃(所以不是xrandr --scale 1x1.25解决方案,应用程序无论如何都会自行崩溃)
  3. 设备是 RaspberryPi 4B,带有“原装” 800x480 触摸屏,运行 Ubuntu 20.10
  4. 大屏幕上一切都正常,设备完全能够通过 bix 运行 VCMI。问题仅在于以 480p 运行
  5. 只要投掷 即可播放窗口模式xrandr --mode 800x600 --scale 1.5x1.5,但它会破坏触摸屏到鼠标的连接。

我通过储存大量的黑客攻击和变通方法使它或多或少地工作起来,以至于我不得不关闭错误报告服务以免融化我的 Pi......

  1. 创建自定义 800x600@60 分辨率,cvt 800 600 60xrandr --newmode ...按照如何设置自定义分辨率?VCMI 现在可以在窗口、真全屏和非真全屏(无边框最大化?)模式下启动。显然可玩性不强,因为窗口底部 120px 超出了屏幕范围。
  2. 然后我将图像缩小到原始分辨率,600px * 0.8 = 480px,发现“真全屏”忽略了比例,“非真全屏”有一个有趣的错误/功能,它正确地缩小到 480px,但居中绘制,因此图像与(物理)屏幕不对齐。因此从 PC 上 ssh 并粗暴地将其向上移动几个像素,直到它看起来不错,最后却出现了这种令人厌恶的情况: xrandr --output DSI-1 --mode forced600 --transform 1.0,0,0,0,1.25,+80,0,0,1

它“可以工作”,但由于严重滥用,我的鼠标和触摸屏出现了问题xrandr --transform。一旦我应用我的黑客设备,它就会在 800x600 分辨率下工作,并进行花哨的缩放和转换,结果如下:

  • 鼠标可以移出屏幕,这很烦人,但不是“破坏游戏”的问题
  • 触摸屏精度因非原生分辨率、比例和偏移而受到影响,导致难以准确触摸按钮

我该如何解决这两个指针问题?有没有更好的方法可以强制 VCMI 以 480p 运行?

答案1

好吧,事实证明分辨率检查仅在启动时进行。一旦 VCMI 启动并运行,我就可以恢复到原始分辨率。VCMI 自行处理缩放,通过绘制填充并保持纵横比。这解决了鼠标和触摸屏的所有问题。

# disable external screen
xrandr --output HDMI-1 --off 
# force 800x600 resolution
xrandr --output DSI-1 --mode forced600
# after 10 seconds reset to standard resolution
( sleep 10; xrandr --output DSI-1 --mode FIXED_MODE --scale 1.0x1.0 ) &
# run game
vcmiclient

但不幸的是,这会导致游戏出现黑边。TODO:让触摸屏能够缩放显示...TODO:弄清楚如何在触摸屏上单击鼠标右键...

相关内容