【问题标题】:Is it possible to make a JFrame always on top of apps. running OpenGL and DirectX?是否可以让 JFrame 始终位于应用程序之上。运行 OpenGL 和 DirectX?
【发布时间】:2011-01-26 15:23:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你误会了 OpenGL。 OpenGL 没有一些专用的全屏模式。在 OpenGL 中,如果应用程序是全屏的,它只是一个常规的无边框、无装饰的全屏窗口。
  • 好吧.. JFrame.setAlwaysOnTop(true);不在顶部,当 OpenGL 游戏运行时。 (打开游戏20秒后启动java应用)
  • 你无法进入全屏模式

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


【解决方案1】:

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

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

kenai.com/projects/jogl

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2023-04-05
      • 2015-12-24
      • 2015-03-15
      相关资源
      最近更新 更多