Created
February 21, 2015 01:45
-
-
Save raydiak/9193e818d781a80ad946 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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