2011-01-26 14 views
3

我目前正在使用Java開發通知應用程序。是否可以在應用程序之上始終創建JFrame。運行OpenGL和DirectX?

我需要的窗口很快(約10秒)在任何應用程序的頂部。包括運行OpenGL和DirectX的程序(例如電腦遊戲)。我知道JFrame.setAlwaysOnTop(true);只適用於基於窗口的環境,而OpenGL和DirectX則不是。 關於OpenGL綁定的想法,但似乎無法找到有關DirectX的任何內容?

也許有可能使用JNI? 任何想法都歡迎:-)

編輯:謝謝你們的答案,但我真的放棄了它,並決定強制在窗口全屏模式下進行覆蓋的遊戲。我將不得不等待,看看beta測試者對減少的fps有什麼看法:-)再次感謝

+2

你誤會了OpenGL。 OpenGL沒有一些專用的全屏模式。在OpenGL中,如果應用程序是全屏的,它只是一個普通的無邊框,無裝飾的全屏窗口。 – datenwolf 2011-01-26 16:40:39

回答

0

不要打擾directx和java。這有一個阻抗不匹配。 Java是跨平臺的,OpenGL是跨平臺的。如果你堅持使用directx,你可以嘗試SWT,因爲它使用本地操作系統資源,你可能有機會。

對於opengl你所尋找的是與panel/jframe的canvas集成,你可以使用JOGL。我認爲lwjgl也有實現,但是jogl更好。然後,您可以在該jframe上設置alwaysOnTop。

kenai.com/projects/jogl

0

您的問題是不相關的代碼,但圖形設備來代替。 該設備在全屏模式下只能有一個加速表面。這就是爲什麼如果你有一個正確的GPU頭,你不能以全屏方式啓動兩個DirectX遊戲。

最好的辦法是嘗試找到DX/OpenGL表面指針並使用所需的API附加到它。我不知道這是否可以用Java做然而竟被方法是:

  • 獲得一個指向遊戲或應用程序的加速表面運行
  • 創建一個加速圖形設備
  • 從你的UI
  • 創建非mimpap質地(截圖)獲得一個指向紋理表面
  • 使用拉伸矩形從這個表面到您在步驟得到了一個1
  • 目前

這可能會引入閃爍,如果不使用每個幀的Vsync和刷新率同步重複。這也可能導致大幅下降。

其中一個例子是FRAPS,它在加速的應用程序中繪製當前幀速率。

相關問題