2011-08-16 37 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

回答

相关问题