2011-12-31 5 views
-1

Comment rejoindre ces deux choses? Comment créer un widget (ou n'importe quelle toile) pour dessiner dedans d'un autre fil?Bibliothèques GTK # et OpenTK

+0

Cela dépend de ce que vous essayez d'accomplir. Vous pourriez juste rendre des choses dans OpenTK, passer le pointeur de la fenêtre à GTK # et le faire faire son rendu. Il y a plusieurs façons de rassembler ces deux bibliothèques, mais le multithreading sera assez difficile car vous devrez bloquer le contexte OpenGL pour le rendu avec GTK #. –

+0

@Robert Rouhani Montre-moi au moins une façon s'il te plait. – itun

Répondre

2

Vous pouvez éditer un des exemples dans le téléchargement de la source OpenTk ici pour avoir une fenêtre GTK # et une OpenTK Gamewindow dans la même application.

Télécharger source OpenTK ici: http://sourceforge.net/projects/opentk/files/latest/download

Tout d'abord, assurez-vous que les exemples fonctionnent en construisant et en exécutant les exemples. Essayez l'OpenTK multithread spécifiquement, il devrait vous donner deux fenêtres avec des cubes tournants.

Maintenant, modifiez l'exemple pour générer une fenêtre gtk # au lieu d'une seconde fenêtre de jeu openTK.

Ouvrez le fichier OpenTK/Source/Exemples/OpenTK/Test/Multithreading.cs

Vous devrez faire une fonction pour créer une fenêtre de gtk, comme si

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

modifier maintenant la principale boucle pour lancer cette fenêtre, comme ceci:

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

Vous aurez maintenant une fenêtre GTK # et les fenêtres de jeu OpenTK dans la même application.