Окно SDL2 открывается и остается без ответа - PullRequest
0 голосов
/ 25 января 2019

Я не могу обдумать это. У меня еще не было возможности попробовать это на другом ПК.

У меня есть очень простой следующий код, который открывает окно SDL и входит в цикл. Он открывает окно, и я вижу, что цикл что-то делает, например, я протестировал SDL_SetWindowtitle () с использованием инкрементного значения и увидел, что он растет, так что есть некоторая жизнь.

Однако он просто застрял, не отвечает. Я не могу нажать кнопку закрытия или переместить окно. Бывают периоды, когда у него мало жизни, и он «обновляется», но он снова перестает отвечать.

Я начинаю думать, что в моем коде есть какая-то глупая ошибка, которую я просто не замечаю.

Код компилируется все в порядке, с нулевыми предупреждениями или ошибками.
Я использую MinGW 64-битный компилятор на Windows 10 64-битных.

#include <SDL2/SDL.h>
int main(int argc, char** argv) {

  SDL_Window *window;
  SDL_Surface *surface;
  SDL_Renderer *renderer;
  SDL_Event event;

  int WINDOW_WIDTH = 1280;
  int WINDOW_HEIGHT = 720;
  bool exit = 1;

  if (SDL_Init( SDL_INIT_VIDEO ) < 0) {
    return 2;
  }

  window = SDL_CreateWindow("Gui test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN );
  if (!window) {
    return 3;
  }

  surface = SDL_GetWindowSurface(window);
  if (!surface) {
    return 4;
  }

  exit = false;
  while (!exit) {
    while(SDL_PollEvent(&event) > 0) {

      switch(event.type) {
        case SDL_QUIT:
          exit = true;
          break;
      }

    SDL_UpdateWindowSurface(window);
    SDL_Delay(1000/30);
    }
  }

  return 0;
}

UPDATE: Кажется, это специфическая проблема Windows. Я заметил, что после загрузки моего ПК на работе все некоторое время работает хорошо, но через некоторое время по какой-то причине проблема возвращается. У меня дома нет проблем с Linux.

TLDR: что-то мешает работе SDL через некоторое время после загрузки компьютера в Windows.

UPDATE2: Без какой-либо обработки событий окно выглядит отлично. Протестировано с простым рендерером и изменением цвета фона. НО, как только я реализую какую-либо функцию обработки событий (даже SDL_PumpEvents (0)), окно зависает, и это займет около 5-10 секунд, пока фон не будет визуализирован. Кажется, зависает при обработке событий.

...