SDL2 窗口在 MacOS Sonoma 上在屏幕外创建

问题描述 投票:0回答:1

我正在尝试在运行 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 不只是显示随机填充符。窗口的颜色确实改变了。

c++ sdl-2 macos-sonoma
1个回答
0
投票

当我使用

SDL_CreateWindow
而不是
SDL_CreateShapedWindow
时,我能够让窗口以完整状态显示。

© www.soinside.com 2019 - 2024. All rights reserved.