简体   繁体   English

Window 不显示 SDL2

[英]Window not displaying SDL2

I am using SDL2 for the first time, and when I try to create a window, it's not displaying.我第一次使用 SDL2,当我尝试创建 window 时,它没有显示。 The only sight of the window is an icon spawning in my dock ( Image of the icon , SDLTest.out is the name of my executable file). window 的唯一视线是在我的 Dock中生成的图标(图标的图像,SDLTest.out 是我的可执行文件的名称)。 I found out that it spawned when SDL_INIT() was called.我发现它是在调用SDL_INIT()时产生的。

I tried updating the window, changing its color and adding the flag SDL_WINDOW_SHOWN , but none of these solutions worked.我尝试更新 window,更改其颜色并添加标志SDL_WINDOW_SHOWN ,但这些解决方案均无效。 I even pasted a code from the Internet, but it didn't work better.我什至从互联网上粘贴了一个代码,但效果并不好。

Here is the code that I pasted:这是我粘贴的代码:

#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;
    int status = EXIT_FAILURE;
    SDL_Color orange = {255, 127, 40, 255};
    
    if(0 != SDL_Init(SDL_INIT_VIDEO))
    {
        fprintf(stderr, "Error SDL_Init : %s", SDL_GetError());
        goto Quit;
    }
    window = SDL_CreateWindow("SDL2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                              640, 480, SDL_WINDOW_SHOWN);
    if(NULL == window)
    {
        fprintf(stderr, "Error SDL_CreateWindow : %s", SDL_GetError());
        goto Quit;
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if(NULL == renderer)
    {
        fprintf(stderr, "Error SDL_CreateRenderer : %s", SDL_GetError());
        goto Quit;
    }
    
    if(0 != SDL_SetRenderDrawColor(renderer, orange.r, orange.g, orange.b, orange.a))
    {
        fprintf(stderr, "Error SDL_SetRenderDrawColor : %s", SDL_GetError());
        goto Quit;
    }
    
    if(0 != SDL_RenderClear(renderer))
    {
        fprintf(stderr, "Error SDL_SetRenderDrawColor : %s", SDL_GetError());
        goto Quit;
    }
    
    SDL_Delay(500);
    SDL_RenderPresent(renderer);
    SDL_Delay(500);
    
    status = EXIT_SUCCESS;

Quit:
    if(NULL != renderer)
        SDL_DestroyRenderer(renderer);
    if(NULL != window)
        SDL_DestroyWindow(window);
    SDL_Quit();
    return status;
}

My OS is MacOS 11.6, my compiler GCC, my computer has a graphic card Intel Iris Pro Graphics 6200, and I installed SDL2 using Homebrew.我的操作系统是 MacOS 11.6,我的编译器是 GCC,我的电脑有显卡 Intel Iris Pro Graphics 6200,我使用 Homebrew 安装了 SDL2。

Can someone help me?有人能帮我吗?

I just needed an event loop.我只需要一个事件循环。 I added this code and it worked:我添加了这段代码,它起作用了:

    SDL_bool quit = SDL_FALSE;
    while(!quit)
    {
        SDL_RenderPresent(renderer);
        SDL_WaitEvent(&event);
        if(event.type == SDL_QUIT)
            quit = SDL_TRUE;
    }

Thank you to HolyBlackCat for your comment!感谢HolyBlackCat 的评论!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM