关于MC最近Wayland和输入法的更新

最新的版本是 26.3 Snapshot 4

首先,就是游戏现在会默认跑在Wayland下
性能可能会好很多

第二,输入后端从GLFW改成了SDL3
所以现在输入法就跟随Wayland的设置
就不用加XX_IM_MODULE等这些环境变量了

之前在Win上的输入法优化现在也有了

目前问题:
在Wayland下独占全屏游戏可能崩溃。

glfw的输入法支持还在修,Minecraft居然抢先一步不用它了。

这个影响微乎其微。换Vulkan对性能的影响更大一些(就是模组还不支持)。

好好好。麻将终于是操心wayland了(或者也有可能是lwjgl的自定义glfw改进了)。测试了一下,好几个bug都修了(26.2还都存在的),应该是基本没问题了这下。比如26.2时,当以Wayland模式启动时:

  1. E键打开背包不会将鼠标回到屏幕中间。只能通过patch glfw来修复。
  2. 当IME开启了应用内preedit时,合成器如果缩放不是1,游戏中显示的preedit框显示错位。这个模组的issue就是为了修复它的。同样,patch glfw也能做到。
  3. 当IME开启了应用内preedit时,输入法输入后上屏文字或按Esc清除preedit,游戏内的preedit框还会存在。这个问题是Fcitx5不单独发送空preedit string所致的,尽管协议里这是完全正确的行为。我之前也在上面那个模组的issue提到过。我通过patch glfw解决的。
  4. 不管开启不开启输入法应用内preedit,MC中打字时都能发送正确的输入法位置了。之前26.2全屏时在不开启输入法应用内preedit时,返回的位置就是固定在屏幕左边中间;开启输入法应用内preedit后干脆直接消失不见了。

并且,还有个不错的就是,发现它现在只在按了T打开聊天栏时才会启用输入法(zwp_text_input_v3::enable),在关了聊天栏后就disable掉。这样当输入法一直切换在中文状态时,正常游戏时不会有任何影响,而只有按了T之后输入法才可用,且自动是中文状态,直接输入,就比较方便。此前这个功能,需要IMBlocker这样的模组来完成。

不过我这边测试它还是默认使用x11。之前的-DMC_DEBUG_ENABLED -DMC_DEBUG_PREFER_WAYLAND=true JVM参数也没用了,唯一让它用Wayland的方法是unset DISPLAY

不过因为还要玩旧版本,所以迟早还是得修的(

目前 Snapshot 6 已经是默认 Wayland 了, 使用 Vulkan renderer 似乎 frame time 不是很稳定

不过我这边测试它还是默认使用x11。之前的-DMC_DEBUG_ENABLED -DMC_DEBUG_PREFER_WAYLAND=true JVM参数也没用了,唯一让它用Wayland的方法是unset DISPLAY

我知道了,是因为我的niri没有实现fifo-v1,sdl就自行换回了xwayland。日志中写得清楚:

[13:55:23] [Render thread/INFO]: SDL [VIDEO]: This compositor lacks support for the fifo-v1 protocol; falling back to XWayland for GPU performance reasons (set SDL_VIDEO_DRIVER=wayland to override)
[13:55:23] [Render thread/INFO]: SDL [VIDEO]: Detected XWayland
...
[13:55:23] [Render thread/INFO]: Created window using SDL video driver: x11

SDL_VIDEO_DRIVER=wayland就行了