2011-12-31 8 views
-1

この2つの方法に参加するには?別のスレッドからウィジェットを描画するウィジェット(またはキャンバス)を作成するにはどうすればいいですか?GTK#&OpenTKライブラリ

+0

これは達成しようとしていることによって異なります。あなたはOpenTKのものをレンダリングし、ウィンドウポインタをGTK#に渡してレンダリングさせることができます。これらの2つのライブラリを組み合わせる方法はたくさんありますが、GTK#でレンダリングするにはOpenGLコンテキストをストールする必要があるため、マルチスレッドはかなり難しいでしょう。 –

+0

@Robert Rouhani私に少なくとも一つの方法を教えてください。 – itun

答えて

2

OpenTkソースダウンロードの例の1つをここで編集して、GTK#ウィンドウとOpenTK Gamewindowを同じアプリケーションに含めることができます。

ここOpenTKソースをダウンロードしてください: http://sourceforge.net/projects/opentk/files/latest/download

まず、例の例を構築し、実行することによって動作することを確認してください。 OpenTKマルチスレッドを具体的に試してみてください。キューブを回転させた2つのウィンドウが表示されます。

ここで、2番目のopenTK gamewindowの代わりにgtk#ウィンドウをスポーンする例を編集します。

ファイルを開くopentk /ソース/例/ OpenTK /テスト/ Multithreading.cs

ので

static void gtkWindow() { 
    Application.Init(); 
    var gtkform = new Gtk.Window("test"); 
    var btn = new Gtk.Button("flip"); 
    btn.Clicked += HandleBtnClicked; 
    gtkform.Add(btn); 
    gtkform.ShowAll(); 
    Application.Run(); 
} 

今すぐメインの編集のようなあなたは、gtkのウィンドウを作成する機能を加える必要がありますこのウィンドウを起動するループは、そのよう:

// launch threads 
for (int i = 0; i < ThreadCount; i++) 
{ 
    if (i == 0) { 
     Thread t = new Thread(RunGame); 
     t.IsBackground = true; 
     t.Priority = ThreadPriority.BelowNormal; 
     t.Start(); 
     threads.Add(t); 
    } else { 
     Thread t = new Thread(gtkWindow); 
     t.IsBackground = true; 
     t.Priority = ThreadPriority.BelowNormal; 
     t.Start(); 
     threads.Add(t); 
    } 
} 

あなたは今、同じアプリケーションでのGtk#ウィンドウとOpenTKゲームの窓が付いています。