Question

Je suis à la recherche basiquement pour obtenir un système graphique en forme de fenêtre native dans mon OpenGL / Jeu. Je dois afficher une seule fenêtre à l'utilisateur.

Je suis à la recherche dans wxWidgets.

Parce que cela fonctionne par « voler » le WinMain / MainLoop, je suis en train de pirater je peux exécuter sa boucle principale sur un thread séparé.

Parce que je ne pouvais pas obtenir son wxThread fonctionne bien, je l'ai fait un « échantillon » with Windows threads ... mais l'initialisation fracassera encore sur les entrailles wxWidgets ...

Tous les commentaires sur ce sujet?

Mon code est le suivant:

class MyApp: public wxApp
{
    virtual bool OnInit();
};

DECLARE_APP(MyApp) 
IMPLEMENT_APP_NO_MAIN(MyApp)

DWORD WINAPI MyThreadFunction( LPVOID lpParam ) 
{ 
    wxApp* pApp = new MyApp(); 
    wxApp::SetInstance(pApp);
    int argc = 0; wxChar ** argv = NULL;
    wxEntryStart(argc, argv);
    pApp->CallOnInit();
    pApp->OnRun();
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wxCmdLineArgType lpCmdLine, int nCmdShow) {
    DWORD   id = 0;
    CreateThread(NULL,0, MyThreadFunction,NULL, 0,&id);
    assert(id != NULL);
    return 0;
}  

Je l'ai essayé de faire le code d'initialisation wxWidgets dans le thread principal, et seulement appeler la CallOnInit () dans le thread séparé, mais même résultat.

Était-ce utile?

La solution

Le code ci-dessus devrait fonctionner, mais il serait plus simple d'appeler simplement wxEntry() directement dans la fonction thread. Vous préférez peut-être aussi d'utiliser sa surcharge WinMain comme ou tout au moins fournir argc / argv valide (NULL pour ce dernier pourrait expliquer l'accident).

Autres conseils

Attention: la plupart des wxWidgets est pas sûre! Vous ne devez faire des choses GUI à partir d'un seul fil. Cela devrait être le fil qui exécute la boucle d'événements Windows (ou autre) - qui est le thread principal (de démarrage), ou celui où vous appelez wxEntry. J'ai réussi à obtenir OpenGL rendu à partir d'un thread séparé fonctionnant sous Windows - le wxGLCanvas doit être créé sur le thread principal, besoin d'appeler setCurrent dans le fil rendu OpenGL, et vous devez vous assurer que vous ne sont pas affichées lorsque la fenêtre est d'être redimensionné, etc ...

Vous n'avez pas à quelque chose de spécial à wx utiliser opengl, jsut dessiner un wxGLCanvas .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top