2011-08-16 41 views
0

在工作中,我創建了一個音樂可視化程序。之所以選擇JOGL是因爲我們需要一個API來編程3D圖形,並讓它立即在多個平臺上工作。目前,我正在使用GLCanvas來渲染所有的工作,但缺點是它使用EDT渲染OpenGL循環,並且EDT也用於派發其他GUI交互。因此,如果爲了等待數據結構或控制FPS而讓渲染器睡眠一定時間,然後讓整個EDT休眠並因此減慢GUI。如何使用JOGL的NEWT模型在Mac OS X中創建窗口

我想要做的是讓音樂播放器(在一個線程上)與可視化工具使用的數據結構進行交互。我會通過2個同步方法來通知另一個線程或等待自己,這取決於發生了什麼。我剛剛提到的問題是,目前該程序在EDT運行渲染時實現(這是GLCanvas的情況)。在這種情況下,當渲染循環(EDT Thread)去檢索一個空的數據結構時,它被告知要等待。該線程將等待歌曲加載後再播放,但是,我無法使用GUI加載歌曲,因爲EDT線程正在等待歌曲加載並播放,但歌曲無法加載,因爲EDT是睡眠。實質上,這是一個死鎖。

我爲所有的寫作道歉。我希望我能夠輕鬆閱讀。 我的問題的完美解決方案是使用JOGL的NEWT,它將分別在單獨的線程上運行渲染循環,然後在EDT上運行渲染循環。這將允許我在不觸及EDT的情況下來回播放渲染線程和音樂播放器線程,而EDT則處理所有GUI交互。

在我將NEWT加入實際項目之前,我只想用NEWT嘗試一些基本的東西,比如在Mac OS 10.7上打開一個窗口。所以我創建了一個只打開一個窗口並且失敗的項目。這樣做的代碼是(很好地做這件事,這是我的項目中唯一的代碼):

Display display = NewtFactory.createDisplay(null); 
GLCapabilities capabilities = new GLCapabilities(GLProfile.get(GLProfile.GL2)); 
Screen screen = NewtFactory.createScreen(display, 0); 
Window window = NewtFactory.createWindow(screen, capabilities); 
window.setVisible(true); 

或:

​​

不管我用什麼辦法,我仍然得到同樣的錯誤,它們是:

  1. 位於控制檯,它說:

檢測屏幕SI澤1280×800 createWindow0 - 家長既不是NSWindow也不是一個NSView:爲0x0 * ** * *** viewWillDraw:位置0x248 RIP的0x0x7f9ca062ae18Invalid內存訪問= 0x10df02478

  1. 打開一個窗口,說: NEWTTRY意外退出,同時使用libnewt.jnilib插件

...我已經尋找天互聯網和廣泛閱讀NEWT API這是不良記錄。我希望有人可以提供幫助,因爲在高性能程序中使用NEWT比使用GLCanvas更加有效,更靈活。

我使用:

OS版本:的Mac OS X 10.7(11A511) 報告版本:9 型號:MacBook5,1,BOOTROM的MB51.007D。B03,2處理器,Intel Core 2 Duo,2 GHz,4 GB,SMC 1.40f2 圖形:NVIDIA GeForce 9400M,NVIDIA GeForce 9400M,PCI,256 MB 最新的Mac更新爲Mac jogl-2.0-b23-20110303 -macosx

回答

相關問題