Странный SDL побочный эффект на неродственных окнах
При игре с sdl2 через pysdl2 я заметил этот странный побочный эффект, когда однажды скрипт sdl запускает несвязанные окна, которые обычно становятся прозрачными при перемещении, теперь остаются непрозрачными.
Я бы не возражал против всего этого, если бы не было ноющее чувство, что это означает, что я делаю что-то в корне неправильно.
Кто-нибудь может просветить меня о том, что, черт возьми, здесь происходит?
Вот мой сценарий:
import sdl2
import sdl2.ext as se
import time
def main():
k = 2
event_buffer = (k * sdl2.SDL_Event)()
se.init()
window = se.Window("what the ?", size=(400, 300))
window.show()
while True:
window.refresh()
time.sleep(0.01)
sdl2.SDL_PumpEvents()
sdl2.SDL_PeepEvents(event_buffer, k, sdl2.SDL_GETEVENT,
sdl2.SDL_FIRSTEVENT, sdl2.SDL_LASTEVENT)
for event in event_buffer:
if not event.type:
continue
elif event.type == sdl2.SDL_QUIT:
se.quit()
break
else:
pass
event.type = 0
else:
continue
break
if __name__ == '__main__':
main()
И вот захват экрана до и после:
В окне "Системные настройки" моего рабочего стола KDE 5.45.0
без запущенного сценария sdl отображаются соответствующие настройки " Effects>Translucency
рабочего стола" Effects>Translucency
. Обратите внимание, как окно полупрозрачно, потому что я перетаскиваю его во время съемки.
То же самое, но с запущенным сценарием sdl. Обратите внимание, что окно, несмотря на то, что я энергично его перетаскиваю, остается упрямо непрозрачным.
Ответы
Ответ 1
Я также могу воспроизвести это на своем рабочем столе Ubuntu с Unity, так что это определенно не проблема вашего рабочего стола KDE. Я думаю, что это ошибка в pysdl2, и это решение должно быть временным решением, пока оно не будет исправлено, но пока вы можете просто добавить это в свой цикл while:
window.get_surface()
О проблеме уже сообщается здесь: https://github.com/marcusva/py-sdl2/issues/139