2011-12-31 70 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游戏窗口。