Я не могу обдумать это. У меня еще не было возможности попробовать это на другом ПК.
У меня есть очень простой следующий код, который открывает окно 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 секунд, пока фон не будет визуализирован. Кажется, зависает при обработке событий.