Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c++

sdl

This program to draw a line in SDL is not working:

#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;
}

When I run the program, I don't get any error, but nothing is drawn either.


1 Answers

@Cool_Cornflakes, a few issues:

  • You're missing a SDL_RenderPresent() so nothing is ever actually drawn to the screen.
  • As @tkausl points out, don't create (& leak) a SDL_Renderer every frame
  • Use SDL_PollEvent() in a loop to fully drain the event queue.
  • SDL_SetRenderDrawColor() affects SDL_RenderClear() as well as SDL_RenderDrawLine(); as one might imagine black-on-black is kinda hard to see :) Set a more visible color before trying to draw a line.
  • Should probably be passing a = 255 to SDL_SetRenderDrawColor().

All together:

// 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;
}
like image 170
genpfault Avatar answered Sep 04 '25 16:09

genpfault



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!