【发布时间】:2019-02-20 20:08:13
【问题描述】:
我有以下游戏设置:
- launcher.exe - 在 Windows 上的 Steam 下启动,并为用户提供一些设置 UI。
- 然后launcher.exe 启动实际的game.exe。
问题是 launcher.exe 正在使用硬件加速 UI - 使用 Direct2D/DirectX。
此页面https://partner.steamgames.com/doc/features/overlay 声明:
您的游戏不需要为叠加层做任何特别的事情 工作,它会自动挂接到任何从 Steam 启动的游戏!
但在我的情况下会产生问题 - 叠加层是在错误的窗口上创建的。所以launcher.exe(使用DirectX)有覆盖,但由game.exe(真正的游戏,使用DirectX和/或OpenGL)创建的窗口没有。
问题是:如何修改 launcher.exe 窗口的代码以防止“自动”在其上创建 Steam 覆盖?
更新,来自 Valve TS 的回应:
抱歉,没有代码可以选择性地启用或禁用 启动器和游戏之间的叠加!
唯一的“选项”是在launcher.exe 中禁用DirectX 绘图。在这种情况下,他们注入的 DLL 不会创建那个东西。但这实际上意味着在 Steam 下没有 GPU 加速的 UI 绘图......那种“640kb 对每个人都足够了”的设计类型。
理想情况下,Steam 应该向窗口发送一些自定义消息,询问窗口希望如何以及在何处渲染叠加层。但显然没有这样的事情,或者是吗?
就上下文而言,启动器如下所示:
【问题讨论】:
-
您最好的选择可能是在 SteamWorks 开发者论坛/社区中提问。
-
我没有帐户 - 我想它需要一些订阅费。
-
你只需要作为游戏的开发者,AFAIK。您在 Steam 上有 SteamWorks 徽章吗?如果没有,并且您的团队中有其他成员这样做,那么我认为他们需要添加您,但我不是开发人员,所以 IDK 肯定 - 只是按照我在这里读到的内容。如果您独自开发并且 Valve 仍然有代表帮助人们注册和设置,他们应该能够帮助您。如果没有代表,您可能需要联系客户支持,如果他们不能亲自拨动开关,您可能需要联系他们开始整理。
-
@MarkDiedericks 实际上它适用于两者 - 我们只是不希望它出现在启动器窗口中 - 它在那里根本没有意义 - 错误的上下文等。
-
感谢您回复@c-smile(并祝贺您的工作)。似乎 Steam 正在使用 GameOverlayUI.exe 制作叠加层,它接收一个 pid 作为参数,并通过uses Hooks 进行自我注入。您可以使用Spy++ 和WinDbg 进行深入研究。注意到它并再次谷歌搜索后,我找到了this post!
标签: c++ windows game-engine steam