2011-08-16 14 views
0

私は音楽の視覚化プログラムを作成しています。 JOGLが選ばれたのは、3Dグラフィックスをプログラミングし、複数のプラットフォームですぐに動作させるためのAPIが必要だったからです。現時点では、GLCanvasを使ってすべての作業をレンダリングしていますが、EDTを使用してOpenGLループをレンダリングし、EDTを使用して他のGUIのやり取りをディスパッチすることも欠点です。したがって、データ構造を待つかFPSを制御するためにレンダラーを一定時間スリープさせると、EDT全体がスリープしてGUIが遅くなります。JOGLのNEWTモデルを使ってMac OS Xでウィンドウを作成する方法

私がしたいことは、音楽プレーヤーが(1つのスレッド上で)ビジュアライザが使用しているデータ構造とやり取りすることです。私は、何が起こっているかに応じて、他のスレッドに通知するか、自分自身を待つ2つの同期メソッドを持つことでこれを行います。私が今述べた問題は、EDTがレンダリングを実行するプログラムが実装されていることです(これはGLCanvasで起こります)。この場合、レンダリング・ループ(EDTスレッド)が空のデータ構造を取り出すようになると、待機するように指示されます。スレッドは曲がロードされてから再生されるまで待機しますが、EDTスレッドは曲がロードされて再生されるまで待機していますが、EDTがスリープ状態であるために曲をロードできないため、GUIを使用して曲をロードできません。本質的に、これはデッドロックです。

私はすべての文章をお詫び申し上げます。私はこれを読みやすくすることを願っています。 私の問題の完璧な解決策は、JOGLのNEWTを使用することです.JOGLのNEWTは、EDTと別のスレッドでレンダリングループを実行します。これにより、レンダリングスレッドと音楽プレーヤーのスレッドを前後にスリープさせ、EDTに触れることなく、GUIインタラクション全体を処理できます。

実際のプロジェクトにNEWTを組み込む前に、Mac OS 10.7でウィンドウを開くなど、NEWTを使って基本的なことを試してみたいです。だから私はウィンドウを開くだけで失敗するプロジェクトを作成しました。そうするためのコードは、(それをうまく行うための一つの方法は、これは私のプロジェクトでコードのみである)である:

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検出されたと同じエラー、 ZE 1280x800 createWindow0 - 親はNSWindowのもNSViewのでもありません:* 0x0の * ** *** viewWillDraw: :場所0x248 RIPの0x0x7f9ca062ae18Invalidメモリアクセス= 0x10df02478

  1. ウィンドウが言っ開きますlibnewt.jnilibプラグインの使用中にNEWTTRYが予期せず終了する

私は数日間インターネットを検索し、よく記述されていないNEWT APIを広く読んでいます。高性能プログラムでNEWTを使用すると、GLCanvasを使用するよりも非常に有益で柔軟性があるので、誰かが助けてくれることを願っています。

私が使用しています:

OSバージョン:MacのOS X 10.7(11A511) レポートのバージョン:9 モデル:MacBook5,1、ブートROM 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

答えて

関連する問題