2011-12-31 72 views
-1

如何加入這兩件事?如何創建一個小部件(或任何畫布)從另一個線程中繪製它?GTK#&OpenTK庫

+0

這取決於你想要完成什麼。你可以在OpenTK中渲染東西,將窗口指針傳遞給GTK#並讓它渲染。將這兩個庫放在一起有很多方法,但多線程將非常困難,因爲您必須停止使用GTK#進行渲染的OpenGL上下文。 – 2011-12-31 06:52:04

+0

@Robert Rouhani請讓我看看至少有一種方式。 – itun 2011-12-31 20:20:17

回答

2

您可以在此處編輯OpenTk源代碼中的一個示例,在同一應用程序中使用GTK#窗口和OpenTK Gamewindow。

下載OpenTK源位置: http://sourceforge.net/projects/opentk/files/latest/download

首先,請確保實例通過構建和運行實例的工作。特別嘗試OpenTK多線程,它應該爲您提供兩個旋轉立方體的窗口。

現在,編輯示例以生成一個gtk#窗口,而不是第二個openTK遊戲窗口。

打開文件opentk /來源/例子/ OpenTK /測試/ Multithreading.cs

你需要做一個函數來創建一個GTK窗口,像這樣

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

現在編輯主循環推出這個窗口,就像這樣:

// 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遊戲窗口。