Я использую Python 3.6.5 с PySDL2 v.0.9.6. Я пишу программу, которая должна рисовать тысячи маленьких прямоугольников на экране. Мне никогда не придется каким-либо образом изменять данный прямоугольник после его отрисовки на экране, поэтому я просто рисую их в основной текстуре, а затем рисую текстуру на экране на каждой итерации цикла. Таким образом, мне не нужно перерисовывать тысячи прямоугольников каждый раз, когда я очищаю экран - мне просто нужно перерисовать одну основную текстуру, которая имеет все прямоугольники.
Проблема в том, что, если я какое-то время запускаю программу, перехожу на экран блокировки Windows, снова авторизируюсь с моим паролем и снова смотрю на мою программу, все, что было нарисовано в основной текстуре, которая была раньше, сейчас нет. Все прямоугольники, которые были там ранее, исчезли. Программа все еще работает и рисует новые прямоугольники. Я не думаю, что это просто экран блокировки Windows - иногда, если я позволяю программе запускаться, когда я что-то делаю в других приложениях, то же самое произойдет, когда я вернусь. Я также заметил, что если я включаю изменение размера окна, то изменение размера окна также приводит к этому.
Вот соответствующий фрагмент из моего кода:
threading.Timer(0, request_data).start()
while running:
...
sdl2.SDL_SetRenderTarget(renderer, screen_texture)
while len(block_queue) > 0:
sdl2.SDL_SetRenderDrawColor(renderer, block_queue[0][1], block_queue[0][2], block_queue[0][3], 255)
sdl2.SDL_RenderFillRect(renderer, block_queue[0][0])
del block_queue[0]
sdl2.SDL_SetRenderTarget(renderer, None)
sdl2.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255)
sdl2.SDL_RenderClear(renderer)
sdl2.SDL_RenderCopy(renderer, screen_texture, None, screen_texture_rect)
sdl2.SDL_RenderPresent(renderer)
Функция request_data () - это просто функция, которая выполняется в отдельном потоке и добавляет новые прямоугольники в очередь для рисования.
Я знаю, что это общая проблема SDL, а не проблема PySDL2, потому что у меня точно такая же проблема в другой программе, которую я пишу на C ++ SDL2.