2

SDL初心者です。SDL2で黒い背景とその上に塗りつぶされた青い円を描きたいです。SDL2 では円を描く方法がないので、 SDL2_gfx を使用します。黒い背景を描くのは問題ありませんが、関数filledCircleRGBAで円を描くには至りません。

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


#define DEFAULT_WINDOW_WIDTH  800
#define DEFAULT_WINDOW_HEIGHT 600


void
print_SDL_error()
{
  fputs("SDL_Error: ",  stderr);
  fputs(SDL_GetError(), stderr);
  fputc('\n',           stderr);
}

bool
initSDL()
{
  if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
      fprintf(stderr, "SDL could not initialize!\n");
      print_SDL_error();
      return false;
    }
  return true;
}

SDL_Window*
initMainWindow()
{
  SDL_Window* window;
  window = SDL_CreateWindow("SDL2 test",
                SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT,
                SDL_WINDOW_SHOWN);
  if(window == NULL)
    {
      fprintf(stderr, "SDL could not create a window!\n");
      print_SDL_error();
    }
  return window;
}

SDL_Window*
initSDLAndMainWindow(SDL_Window* * window)
{
  return initSDL() ? initMainWindow() : NULL;
}

void
quit(SDL_Window* main_window)
{
  SDL_DestroyWindow(main_window);
  SDL_Quit();
}


int
main(int argc, char* argv[])
{
  SDL_Window* main_window;
  main_window = initMainWindow();
  if(main_window == NULL)
    {
      quit(NULL);
      return EXIT_FAILURE;
    }

  SDL_Renderer* main_window_renderer;
  main_window_renderer = SDL_CreateRenderer(main_window, -1, SDL_RENDERER_ACCELERATED);
  if(main_window_renderer == NULL)
    {
      fprintf(stderr, "Renderer could not be created!\n");
      print_SDL_error();
      quit(main_window);
      return EXIT_FAILURE;
    }

  SDL_SetRenderDrawColor(main_window_renderer, 0, 0, 0, 0);
  SDL_RenderClear(main_window_renderer);
  SDL_RenderPresent(main_window_renderer);
  SDL_Delay(2000);

  if(filledCircleRGBA(main_window_renderer,
              150, 150, 75,
              0, 0, 255, 0) != 0)
    {
      fprintf(stderr, "A circle was not rendered!\n");
      print_SDL_error();
      SDL_DestroyRenderer(main_window_renderer);
      quit(main_window);
      return EXIT_FAILURE;
    }
  SDL_RenderPresent(main_window_renderer);
  SDL_Delay(2000);

  SDL_DestroyRenderer(main_window_renderer);
  quit(main_window);
  return EXIT_SUCCESS;
}

Debian GNU/Linux 8 "Jessie" で実行しており、ディストリビューションの libsdl2-dev と libsdl2-gfx-dev を使用しています。コンパイルするには、 を使用しますgcc -O0 -g sdl2-test.c `sdl2-config --cflags --libs` -lSDL2_gfx

さらに、valgrind は、21 のコンテキストから 21 のエラーがあることを通知します。3 つのエラーは SDL2 呼び出しから発生し、19 は nouveau_dri.so から発生するため、nouveau ドライバー (nVidia GPU のフリー/リブレ ドライバー)によって使用される共有ライブラリであると思われるため、これは私のせいではない可能性があります。

ありがとう。

4

1 に答える 1