X11 访客的 3D 支持
我们对 X11 访客的 3D 支持有点左右为难。存在许多问题,但相对容易解决。单独来看,每个问题可能只需要开发人员一到两天的工作量。不幸的是,单独解决这些问题并没有太大意义,而且目前我们的开发人员都没有太多时间投入到这方面。鉴于许多问题可能可以通过具备一定 3D 开发技能的用户来解决,我们决定暂时将 X11 访客的 3D 支持声明为“用户支持”。如果我们能够不费太多力气就确认补丁不会破坏其他功能,我们将乐意集成用于修复个别问题的补丁,并且在时间允许的情况下,我们也很乐意提供其他帮助。
问题调查
对于许多(但并非所有)问题,一个好的方法是首先创建一个能触发问题的最小测试应用程序。此时,使用 3D 访客库的调试版本运行应用程序有助于查看发生了什么。由于许多在 X11 下运行的 3D 应用程序是自由软件,因此向应用程序开发人员寻求帮助也值得一试。我们乐于接受关于如何在不投入过多开发人员时间的情况下提供帮助的建议(包括有助于建立用户 3D 开发社区的措施),我们也乐于回答有关我们当前 3D 支持工作原理的问题。请为此使用 vbox-dev 邮件列表。如果贡献者能够以我们可以公开发布的形式记录他们所学到的知识,我们将不胜感激。
关于“3D 应用程序始终置顶”的错误,请参阅 工单 #12738 评论 9。
X11 3D 直通快速概览
3D 直通代码位于 VirtualBox 源代码目录 src/VBox/Additions/common/crOpenGL 中。库 VBoxOGL.so 分别通过将 OpenGL 调用整理成发送到主机的 数据流(我还没有研究主机显卡反馈是如何处理的)以及与访客 X 服务器通信以获取访客窗口位置等信息来实现 OpenGL 和 GLX 库,从而确保 3D 内容可以正确地放置在访客窗口顶部(尝试拖动包含 3D 内容的访客窗口以了解这种方法及其缺点)。VBoxEGL.so 只是一个围绕 GLX 实现的仅限 X11 的 EGL 实现。任何有兴趣使其在 Android 或 Wayland 下工作的人,都应该通过研究 GLX 代码并以此为基础来扩展此功能(eglGetDisplay() 旨在允许选择不同的实现)。Wayland 支持可能也意味着需要实现一个替代的 libgbm.so。