hatte ich eine typische SDL Ereignisschleife SDL_WaitEvent
Aufruf und lief in eine viel diskutierte Frage (siehe here und here), wo meine Anwendung nicht in der Lage war während eines Resize wieder Unentschieden, weil SDL_WaitEvent
nicht zurückgibt bis eine Größenänderung auf bestimmten Plattformen abgeschlossen ist (Win32 & Mac OS). In jeder dieser Diskussionen wird die Technik, SDL_SetEventFilter
zu benutzen, um es zu umgehen, erwähnt und mehr oder weniger als eine Lösung und ein Hack akzeptiert.SDL2 SDL_SetEventFilter vs SDL_WaitEvent
Die Verwendung der SDL_SetEventFilter
Ansatz funktioniert perfekt, aber jetzt schaue ich auf meinen Code und ich habe praktisch den gesamten Code von meinem SDL_WaitEvent
in meinem EventFilter bewegt und nur Ereignisse dort zu behandeln.
Architektonisch ist es fischig wie heck.
Gibt es irgendwelche Probleme mit diesem Ansatz des Versendens von Nachrichten an meine Anwendung in der Funktion SDL_SetEventFilter
eingestellt, neben der Möglichkeit, in einem separaten Thread aufgerufen werden?
Bonusfrage: Wie geht SDL intern damit um? Soweit ich weiß, ist dieses Größenänderungsproblem in der zugrunde liegenden Plattform verwurzelt. Zum Beispiel gibt Win32 ein WM_SIZING aus und gibt dann seine eigene interne Nachrichtenpumpe ein, bis WM_SIZE ausgegeben wird. Was löst den SDL EventFilter aus?
Was ist gegen 'SDL_PollEvent'? Anstatt unbegrenzt auf Ereignisse zu warten, können Sie sie in jedem Zyklus abfragen. – skypjack
Das hilft nicht. SDL_PollEvent verhält sich genau wie SDL_WaitEvent und blockiert so lange, bis die Größenänderung/Verschiebung abgeschlossen ist. –
Wenn das Problem gelöst wurde, würde ich es nicht als Kommentar posten, oder? Es war nur ein Vorschlag außerhalb des Themas. – skypjack