Skip to content

Instantly share code, notes, and snippets.

@raydiak
Created February 21, 2015 01:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raydiak/9193e818d781a80ad946 to your computer and use it in GitHub Desktop.
Save raydiak/9193e818d781a80ad946 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl6
use NativeCall;
class SDL_Window is repr('CStruct') {}
class SDL_Renderer is repr('CStruct') {}
class SDL_Point is repr('CStruct') {
has int32 $.x;
has int32 $.y;
method set($x, $y) {
$!x = $x;
$!y = $y;
}
}
my ($w, $h) = 320, 240;
my SDL_Window $window;
my SDL_Renderer $renderer;
constant $sdl-lib = 'libSDL2';
constant SDL_INIT_TIMER = 0x00000001;
constant SDL_INIT_VIDEO = 0x00000020;
constant SDL_WINDOWPOS_UNDEFINED_MASK = 0x1FFF0000;
constant SDL_WINDOW_SHOWN = 0x00000004;
sub SDL_Init(int32 $flag) returns int32 is native($sdl-lib) {*}
sub SDL_Quit() is native($sdl-lib) {*}
sub SDL_CreateWindow(Str $title, int32 $x, int32 $y, int32 $w, int32 $h, int32 $flag) returns SDL_Window is native($sdl-lib) {*}
sub SDL_CreateRenderer(SDL_Window $, int32 $, int32 $) returns SDL_Renderer is native($sdl-lib) {*}
sub SDL_SetRenderDrawColor(SDL_Renderer $, int8 $r, int8 $g, int8 $b, int8 $a) returns Int is native($sdl-lib) {*}
sub SDL_RenderClear(SDL_Renderer $) returns Int is native($sdl-lib) {*}
sub SDL_RenderDrawPoint(SDL_Renderer $, int32 $x, int32 $y) returns Int is native($sdl-lib) {*}
sub SDL_RenderDrawPoints(SDL_Renderer $, OpaquePointer, int32 $) returns Int is native($sdl-lib) {*}
sub SDL_RenderPresent(SDL_Renderer $) is native($sdl-lib) {*}
sub render {
SDL_SetRenderDrawColor($renderer, 0, 0, 0, 255) and er;
#SDL_RenderClear($renderer) and er;
SDL_SetRenderDrawColor($renderer, 255, 255, 255, 255) and er;
my @points := CArray[SDL_Point].new;
my $count = 0;
loop (my int $i = 0; $i < $w; $i = $i + 1) {
loop (my int $j = 0; $j < $h; $j = $j + 1) {
if rand < .5 {
my $p = SDL_Point.new;
$p.set($i, $j);
@points[$count++] = $p;
}
}
}
SDL_RenderDrawPoints( $renderer, nativecast(OpaquePointer, @points), $count ) and er;
SDL_RenderPresent($renderer) and er;
}
SDL_Init(SDL_INIT_VIDEO) and er;
$window = SDL_CreateWindow(
"some white noise",
SDL_WINDOWPOS_UNDEFINED_MASK, SDL_WINDOWPOS_UNDEFINED_MASK,
$w, $h,
SDL_WINDOW_SHOWN
);
ner $window;
$renderer = SDL_CreateRenderer( $window, -1, 1 );
ner $renderer;
for ^2 {
my $then = now;
render();
note "{1 / (now - $then)} fps";
}
END { SDL_Quit() }
sub SDL_GetError() returns Str is native('libSDL2') {*}
sub SDL_ClearError() is native('libSDL2') {*}
sub er { die SDL_GetError }
sub ner ($v) { die SDL_GetError unless +nativecast OpaquePointer, $v }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment