无法弄清楚为什么没有在 SDL 中绘制线

Can't figure out why line is not being drawn in SDL

这个在 SDL 中画线的程序不工作:

#include "SDL.h"

int main(int argc, char** argv)
{
    SDL_Window* window = SDL_CreateWindow("A line", 10, 10, 1200, 600, false);

    bool running = true;

    while (running)
    {
        SDL_Event events;
        if (SDL_WaitEvent(&events))
            if (events.type == SDL_QUIT)
                running = false;

        SDL_Renderer* renderer;
        renderer = SDL_CreateRenderer(window, -1, 0);

        SDL_RenderClear(renderer);

        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
        SDL_RenderDrawLine(renderer, 10, 10, 500, 500);

    }

    SDL_Quit();

    return 1;
}

当我运行程序时,我没有得到任何错误,但也没有绘制任何东西。

几个问题:

  • 您缺少一个 SDL_RenderPresent(),因此实际上没有任何内容被绘制到屏幕上。
  • 正如@tkausl 指出的那样,不要在每一帧
  • 中创建(和泄漏)SDL_Renderer
  • 在循环中使用 SDL_PollEvent() 以完全耗尽事件队列。
  • SDL_SetRenderDrawColor() 影响 SDL_RenderClear() 以及 SDL_RenderDrawLine();正如人们想象的那样 black-on-black 有点难看:) 在尝试画线之前设置一个更明显的颜色。
  • 可能应该将 a = 255 传递给 SDL_SetRenderDrawColor()

总计:

// g++ main.cpp `pkg-config --cflags --libs sdl2`
#include "SDL.h"

int main(int argc, char** argv)
{
    SDL_Window* window = SDL_CreateWindow("A line", 10, 10, 1200, 600, false);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);

    bool running = true;
    while (running)
    {
        SDL_Event event;
        while( SDL_PollEvent(&event) )
        {
            if (event.type == SDL_QUIT)
                running = false;
        }

        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
        SDL_RenderClear(renderer);

        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
        SDL_RenderDrawLine(renderer, 10, 10, 500, 500);
        SDL_RenderPresent( renderer );
    }

    SDL_Quit();
    return 1;
}