У меня был типичный цикл событий SDL, вызывающий SDL_WaitEvent
, и я столкнулся с широко обсуждаемой проблемой (см. здесь и здесь), где мое приложение не могло перерисовать во время изменения размера, потому что SDL_WaitEvent
не возвращается, пока изменение размера не будет завершено на определенных платформах (Win32 и Mac OS). В каждом из этих обсуждений техника использования SDL_SetEventFilter
для ее обхода упоминается и более или менее принимается как решение и хак.
Использование подхода SDL_SetEventFilter
работает отлично, но теперь я смотрю на свой код и практически переместил весь код из моего SDL_WaitEvent
в свой EventFilter и просто обрабатываю там события.
Архитектурно это подозрительно, как черт.
Есть ли какие-либо проблемы с этим подходом к отправке сообщений моему приложению в функции, установленной SDL_SetEventFilter
, помимо возможности вызова в отдельном потоке?
Бонусный вопрос: как SDL справляется с этим внутри? Насколько я понимаю, эта проблема с изменением размера связана с базовой платформой. Например, Win32 выдаст WM_SIZING, а затем введет свой собственный внутренний поток сообщений, пока не будет выдано WM_SIZE. Что запускает SDL EventFilter?
SDL_PollEvent
? Вместо того, чтобы бесконечно ждать событий, просто опрашивайте их каждый цикл, если таковые имеются. - person skypjack   schedule 22.10.2017