是否可以始终在应用程序之上创建JFrame。运行OpenGL和DirectX?

时间:2011-01-26 15:23:57

标签: java opengl jframe directx always-on-top

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

kenai.com/projects/jogl

答案 1 :(得分:0)

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

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

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

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

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