我正在尝试在运行 MacOS Sonoma 的 M1 mac 上使用 SDL2 创建窗口。
调用窗口初始化函数的代码如下:
Game::Game(const char *title, int xpos, int ypos, int width, int height, bool fullscreen) {
const int flags = fullscreen ? SDL_WINDOW_FULLSCREEN : SDL_WINDOW_SHOWN;
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) throw FailedSDLInitializationException();
std::cout << "SDL Subsystem initialized." << std::endl;
window = SDL_CreateShapedWindow(title, xpos, ypos, width, height, flags);
if (window == NULL) {
SDL_Quit();
throw FailedWindowInitializationException();
}
std::cout << "Window created." << std::endl;
renderer = SDL_CreateRenderer(window, -1, 0);
if (renderer == NULL) {
SDL_DestroyWindow(window);
SDL_Quit();
throw FailedRendererInitializationException();
}
SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
std::cout << "Renderer initialized." << std::endl;
isRunning = true;
}
这是调用构造函数的代码:
int main() {
Game game("EndlessGame", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, false);
while (game.running()) {
game.handleEvents();
game.update();
game.render();
}
return 0;
}
奇怪的是,它似乎确实创建了一个窗口。当我向上滑动查看任务控制中心时,我可以看到该窗口,但我无法在任务控制中心之外到达或看到该窗口。
我尝试将flags参数设置为SDL_WINDOW_FULLSCREEN,但似乎没有效果。我期待以全屏模式看到该窗口。
此外,我尝试使用输入 xpos 和 ypos 的值,希望将窗口移动到正确的位置。这并没有产生明显的效果。
最后,我尝试使用窗口颜色 (SDL_SetRenderDrawColor) 来验证窗口是否实际创建,并且 MacOS 不只是显示随机填充符。窗口的颜色确实改变了。
当我使用
SDL_CreateWindow
而不是 SDL_CreateShapedWindow
时,我能够让窗口以完整状态显示。