Вот пример кода SDL2, который я пытался запустить на своем компьютере с Linux под управлением Ubuntu 18.04 с KDE Plasma Desktop Environment (у меня установлено несколько рабочих столов на случай, если это уместно):
#include<iostream>
#include<SDL2/SDL.h>
int main(int argc, char** argv)
{
if(SDL_Init(SDL_INIT_VIDEO) != 0){
std::cerr << "SDL_Init() Error: " << SDL_GetError() << std::endl;
return 1;
}
SDL_Window* win = SDL_CreateWindow(
"Hello world",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640,480,
0
);
if(win == nullptr){
std::cerr << "SDL_CreateWindow() Error: " << SDL_GetError() << std::endl;
return 1;
}
//Create and init the renderer
SDL_Renderer* ren = SDL_CreateRenderer(win, -1, 0);
if(ren == nullptr){
std::cerr << "SDL_CreateRenderer() Error: " << SDL_GetError() << std::endl;
SDL_DestroyWindow(win);
return 1;
}
//Render something
SDL_RenderSetLogicalSize(ren,640,480);
//Set colour of renderer
SDL_SetRenderDrawColor(ren,255,0,0,255);
//Clear the screen to the set colour
SDL_RenderClear(ren);
//Show all the has been done behind the scenes
SDL_RenderPresent(ren);
//Delay so that we can see what is on the screen
SDL_Delay(5000);
//Clean Up
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
Красныйокно, которое должно появиться, появляется только один раз, когда я запускаю программу в первый раз.Все последующие исполнения создают пустое прозрачное окно с тем, что находится на заднем плане.Фоновое изображение перетаскивается вместе с окном.
Я пробовал флаг SDL_WINDOW_SHOWN
в SDL_CreateWindow()
, а также флаг SDL_RENDER_ACCELERATED
для SDL_CreateRenderer()
.
Единственный способ снова создать красный экран - перезагрузить систему.
Я даже скомпилировал и запустил это с IDE (CodeLite), и я все еще получил те же результаты.
Этот конкретный вопрос по SO показывает похожие проблемы.Но ОП не использует Linux, и проблема не совсем та же.
В других публикациях на этом сайте упоминается обработка событий, но я не дошел до этого.Если это вообще необходимо, я был бы признателен за некоторые ресурсы, так как документация мало что объясняет.
Обновление : эта программа работает нормально надругой компьютер под управлением Lubuntu 18.10.