Текстура SDL2 очищается, если я иду на экран блокировки Windows и возвращаюсь или изменяю размер окна - PullRequest
0 голосов
/ 12 мая 2018

Я использую 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.

...