簡體   English   中英

如何在 Mac OS X 中使用 JOGL 的 NEWT model 創建 window

[英]How to use JOGL's NEWT model to create a window in Mac OS X

在工作中,我正在創建一個音樂可視化程序。 之所以選擇 JOGL,是因為我們需要一個 API 來對 3D 圖形進行編程並使其立即在多個平台上工作。 目前,我使用 GLCanvas 來渲染所有的工作,然而,缺點是它使用 EDT 來渲染 OpenGL 循環,並且 EDT 還用於調度其他 GUI 交互。 因此,如果我讓渲染器休眠一段時間以等待數據結構或控制 FPS,那么我會使整個 EDT 休眠並因此減慢 GUI。

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

我為所有的寫作道歉。 我希望我能讓這本書易於閱讀。 我的問題的完美解決方案是使用 JOGL 的 NEWT,它將在單獨的線程上運行渲染循環,然后分別在 EDT 上運行。 這將允許我在不接觸處理所有 GUI 交互的 EDT 的情況下來回休眠渲染線程和音樂播放器線程。

在將 NEWT 納入實際項目之前,我只想嘗試使用 NEWT 進行基本操作,例如在 Mac OS 10.7 上打開 window。 所以我創建了一個只打開 window 的項目,但它失敗了。 這樣做的代碼是(一種方法,這是我項目中唯一的代碼):

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); 

或者:

GLProfile.initSingleton(true);
GLProfile glp = GLProfile.get(GLProfile.GL2);;
GLCapabilities caps = new GLCapabilities(glp);
Renderer r = new Renderer();
GLWindow window = GLWindow.create(caps);
window.addGLEventListener(r);
window.setSize(300, 300);
window.setTitle("NEWT Window Test");
window.addWindowListener(new WindowAdapter() {
        public void windowDestroyNotify(WindowEvent e) {
            System.exit(0);
        }
});
Animator a = new FPSAnimator(window);
a.start();
window.setVisible(true);

無論我使用哪種方式,我仍然會遇到相同的錯誤,它們是:

  1. 位於控制台中,它說:

檢測到的屏幕尺寸 1280x800 createWindow0 - 父級既不是 NSWindow 也不是 NSView:0x0 * ** * *** viewWillDraw:0x0x7f9ca062ae18Invalid memory 訪問位置 0x248 rip=0x10df02478

  1. 一個 Window 打開說: NEWTTRY 在使用 libnewt.jnilib 插件時意外退出

我已經在互聯網上搜索了幾天,並廣泛閱讀了 NEWT API,但文檔很少。 我希望有人能提供幫助,因為在高性能程序中使用 NEWT 比使用 GLCanvas 更有益且更靈活。

我在用:

操作系統版本:Mac OS X 10.7 (11A511) 報告版本:9 Model: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 的最新 Java 更新 jogl-2.0-b23-20110303-macosx

這是我用來學習蠑螈操作https://sites.google.com/site/justinscsstuff/jogl-tutorial-2的教程。

它解釋了 Newt 以及 JFrame 設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM