3

我目前正在使用 Java 开发通知应用程序。

我需要让窗口在任何应用程序之上很快(大约 10 秒)。包括那些运行 OpenGL 和 DirectX 的(例如电脑游戏)。我知道它JFrame.setAlwaysOnTop(true);只能在基于窗口的环境中工作,而 OpenGL 和 DirectX 则不行。考虑过 OpenGL 绑定,但似乎找不到有关 DirectX 的任何信息?

也许可以使用JNI?欢迎任何想法:-)

编辑:感谢大家的回答,但我实际上放弃了它并决定以窗口全屏模式强制我正在为其制作叠加层的游戏。我只需要等待,看看 beta 测试人员对降低的 fps 有什么看法 :-) 再次感谢

4

2 回答 2

0

您的问题与您的代码无关,而是与图形设备有关。该设备在全屏模式下只能有一个加速表面。这就是为什么如果你有一个双头 GPU,你就不能全屏启动两个 DirectX 游戏。

最好的办法是尝试找到 DX/OpenGL 表面指针并使用所需的 API 附加到它。我不知道这是否可以在 Java 中完成,但方法是:

  • 获取指向正在运行的游戏或应用程序的加速表面的指针
  • 创建加速图形设备
  • 从您的 UI 创建一个非 mimpap 纹理(屏幕截图)
  • 获取指向纹理表面的指针
  • 使用从这个表面到你在步骤 1 中得到的那个的拉伸矩形
  • 当下

如果不对每帧使用 Vsync 和刷新率同步重复,这可能会引入闪烁。这也可能会导致大幅帧率下降。

FRAPS 就是一个例子,它在加速的应用程序上绘制当前帧速率。

于 2011-03-24T13:50:44.527 回答
0

不要打扰directx和java。那是阻抗不匹配。Java是跨平台的,OpenGL是跨平台的。如果您坚持使用 directx,您可以尝试 SWT,因为它使用本机操作系统资源,您可能会有机会。

对于 opengl,您正在寻找的是与面板/jframe 的画布集成,您可以使用 JOGL。我认为 lwjgl 也有一个实现,但 jogl 更好。然后你可以在那个jframe上设置alwaysOnTop。

kenai.com/projects/jogl

于 2011-03-23T18:31:09.253 回答