SDL2::Raw
=========

A low-sugar binding to SDL2.

Synopsis
--------

```perl6
    use SDL2::Raw;

    die "couldn't initialize SDL2: { SDL_GetError }" if SDL_Init(VIDEO) != 0;

    my $window = SDL_CreateWindow("Hello, world!",
            SDL_WINDOWPOS_CENTERED_MASK, SDL_WINDOWPOS_CENTERED_MASK,
            800, 600, OPENGL);
    my $render = SDL_CreateRenderer($window, -1, ACCELERATED +| PRESENTVSYNC);

    my $event = SDL_Event.new;

    main: loop {
        SDL_SetRenderDrawColor($render, 0, 0, 0, 0);
        SDL_RenderClear($render);

        while SDL_PollEvent($event) {
            if $event.type == QUIT {
                last main;
            }
        }

        SDL_SetRenderDrawColor($render, 255, 255, 255, 255);
        SDL_RenderFillRect($render,
            SDL_Rect.new(
                2 * min(now * 300 % 800, -now * 300 % 800),
                2 * min(now * 470 % 600, -now * 470 % 600),
            sin(3 * now) * 50 + 80, cos(4 * now) * 50 + 60));

        SDL_RenderPresent($render);
    }
    SDL_Quit();
```

Status
------

There's a bunch of functions and structs already covered, but there's also a whole bunch of things I haven't touched at all. If you need any specific part of the API covered, feel free to open a ticket on github or even a pull request!

Examples
--------

### Snake

[screenshots/snake_screenshot.png](screenshots/snake_screenshot.png)

A simple Snake game. Control it with the arrow keys, guide your snake to eat the red circles, and avoid running into your tail.

This code uses `Cairo` to create the images for the snake's body and tail.

### Particles

[screenshots/particles_screenshot.png](screenshots/particles_screenshot.png)

A very simple particle system that spews white pixels from a central point that get pulled down by gravity and bounce on the floor.

### Shooter

[screenshots/shooter_screenshot.png](screenshots/shooter_screenshot.png)

A more complicated game. Control it with the arrow keys and hold the spacebar to fire.

The code also uses `Cairo` to render the player's spaceship and the enemy spaceships. In generating the starfields it shows how to render to a texture with `SDL2`.

### White Noise

Just draws random white and black pixels to a texture and displays it.