Frage

Ich suche basicly ein native-like Fenster GUI-System in meine OpenGL / Spiel zu bekommen. Ich brauche ein einzelnes Fenster für den Benutzer angezeigt werden soll.

Ich suche in wxWidgets.

Weil es funktioniert durch das „Stehlen“ die WinMain / MainLoop, ich versuche, es zu hacken, so kann ich seine Hauptschleife auf einem separaten Thread ausgeführt werden.

Weil ich nicht seine wxThread gut funktioniert bekommen konnte, habe ich eine „Probe“ mit Windows-Themen gemacht ... aber die Initialisierung bricht noch auf den wxWidgets Interna ...

Jedes Feedback auf das?

Mein Code ist dies:

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

Ich habe versucht, so dass die wxWidgets Initialisierungscode im Hauptthread, und nur die CallOnInit () aufrufen, in dem separaten Thread, aber dasselbe Ergebnis.

War es hilfreich?

Lösung

Das sollte über Code arbeiten, aber es wäre einfacher, nur wxEntry() ruft direkt in Thread-Funktion. Sie könnten auch seine WinMain artige Überlastung zu verwenden oder zumindest geben Sie gültigen argc / argv (NULL für letzteres könnte den Absturz erklären) bevorzugen.

Andere Tipps

Achtung: die meisten von wxWidgets ist nicht Thread-sicher! Sie sollten nur GUI Sachen aus einem einzigen Thread tun. Dies sollte der Faden sein, der die Windows (oder was auch immer) Ereignisschleife läuft - das ist die Haupt (Start) Gewinde, oder derjenige, in dem Sie wxEntry nennen. Ich schaffte es OpenGL von einem separaten Thread Rendering zu bekommen unter Windows arbeiten - die wxGLCanvas muss auf dem Haupt-Thread erstellt werden, müssen SetCurrent im OpenGL nennen Thread machen, und Sie müssen sicherstellen, dass Sie machen nicht, während das Fenster zu sein, ist Größe verändert, etc ...

Sie müssen nichts weiter tun, um wx opengl zu verwenden, jsut zeichnen Itno eine wxGLCanvas .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top