LINUX.ORG.RU

Как закрыть все окна SDL?

 , ,


1

1

Экспериментирую с вызовами SDL из интерактивного интерпретатора Питона. Иногда случайно создаю окна, для которых не сохраняется переменная. Например, вызовом sdl2.SDL_CreateWindow(b'', 0, 0, 100, 100, 0)

Как закрыть все такие окна? Помимо перезапуска интерпретатора.

Ответ 1: помогла sdl2.SDL_VideoQuit()

Ответ 2: sdl2.SDL_DestroyWindow(sdl2.SDL_GL_GetCurrentWindow()) тоже работает.

★★★★★

Последнее исправление: question4 (всего исправлений: 2)

Питонья sdl2 — это примитивная ctype-обертка над сишной SDL2, потому при потере указателя на окно ты получишь то же, что и при потере указателя в Си — бесконтрольно болтающийся в памяти объект. У нативных интерфейсов окон 100% есть функциональность получения списка окон, но эта фича непортируема, да и не нужна никому — просто не теряй указатели на окна.

byko3y ★★★★
()

Не теряй переменную =). Ну или вызывай sdl.quit() или как там у тебя в змеином по сути должны грохнутся если это просто бинды к сишке

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

вызывай sdl.quit()

Такой нет, sdl2.SDL_Quit() не помогает, но sdl2.SDL_VideoQuit() закрывает окно. Спасибо.

question4 ★★★★★
() автор топика
Ответ на: комментарий от byko3y

при потере указателя на окно ты получишь то же, что и при потере указателя в Си — бесконтрольно болтающийся в памяти объект

Тогда каким образом окно прибивается при выходе из интерпретатора?

question4 ★★★★★
() автор топика

в бесконечном цилке грабай окно

https://wiki.libsdl.org/SDL_GL_GetCurrentWindow

и когда будет нон-нулл, киляй его.

запустил функцию, переключился на ненужное окно, ему кирдык, функция завершилась.

второй варик: https://wiki.libsdl.org/SDL_GetWindowFromID

если айди выписываются от нуля а не от балды, тот тут все понятно

troy-harder
()
Ответ на: комментарий от troy-harder

https://wiki.libsdl.org/SDL_GL_GetCurrentWindow

Оно всегда не NULL, но если есть видимые окна, эта функция возвращает именно их. То есть sdl2.SDL_DestroyWindow(sdl2.SDL_GL_GetCurrentWindow()) пока окна не исчезнут. Спасибо.

question4 ★★★★★
() автор топика
Ответ на: комментарий от byko3y

примитивная ctype-обертка над сишной

Вот примерно из-за этого ушёл на cython. Лучше написать пару десятков хедеров и делать del руками чем потом искать в какой момент питон не закрыл объект

upcFrost ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.