### ----------------------------------------------------
### -- Raylib::Bindings
### -- Licenses: Artistic-2.0
### -- Authors: Dan Vu (vushu)
### -- File: lib/Raylib/Bindings.rakumod
### ----------------------------------------------------
### -- Chunk 1 of 5
# This Raku module is generated from raylib.h
unit module Raylib::Bindings:ver<0.0.17>:auth<zef:vushu>;
use NativeCall;
constant LIBRAYLIB = %?RESOURCES<libraries/raylib>;
class Vector2 is export is repr('CStruct') is rw {
    has num32 $.x;
    has num32 $.y;
    method init(num32 $x,num32 $y) returns Vector2 {
        malloc-Vector2($x,$y);
    }
    submethod DESTROY {
        free-Vector2(self);
    }
}
class Vector3 is export is repr('CStruct') is rw {
    has num32 $.x;
    has num32 $.y;
    has num32 $.z;
    method init(num32 $x,num32 $y,num32 $z) returns Vector3 {
        malloc-Vector3($x,$y,$z);
    }
    submethod DESTROY {
        free-Vector3(self);
    }
}
class Vector4 is export is repr('CStruct') is rw {
    has num32 $.x;
    has num32 $.y;
    has num32 $.z;
    has num32 $.w;
    method init(num32 $x,num32 $y,num32 $z,num32 $w) returns Vector4 {
        malloc-Vector4($x,$y,$z,$w);
    }
    submethod DESTROY {
        free-Vector4(self);
    }
}
class Quaternion is Vector4 is export is repr('CStruct') {}
class Matrix is export is repr('CStruct') is rw {
    has num32 $.m0;
    has num32 $.m4;
    has num32 $.m8;
    has num32 $.m12;
    has num32 $.m1;
    has num32 $.m5;
    has num32 $.m9;
    has num32 $.m13;
    has num32 $.m2;
    has num32 $.m6;
    has num32 $.m10;
    has num32 $.m14;
    has num32 $.m3;
    has num32 $.m7;
    has num32 $.m11;
    has num32 $.m15;
    method init(num32 $m0,num32 $m4,num32 $m8,num32 $m12,num32 $m1,num32 $m5,num32 $m9,num32 $m13,num32 $m2,num32 $m6,num32 $m10,num32 $m14,num32 $m3,num32 $m7,num32 $m11,num32 $m15) returns Matrix {
        malloc-Matrix($m0,$m4,$m8,$m12,$m1,$m5,$m9,$m13,$m2,$m6,$m10,$m14,$m3,$m7,$m11,$m15);
    }
    submethod DESTROY {
        free-Matrix(self);
    }
}
class Color is export is repr('CStruct') is rw {
    has uint8 $.r;
    has uint8 $.g;
    has uint8 $.b;
    has uint8 $.a;
    method init(uint8 $r,uint8 $g,uint8 $b,uint8 $a) returns Color {
        malloc-Color($r,$g,$b,$a);
    }
    submethod DESTROY {
        free-Color(self);
    }
}
class Rectangle is export is repr('CStruct') is rw {
    has num32 $.x;
    has num32 $.y;
    has num32 $.width;
    has num32 $.height;
    method init(num32 $x,num32 $y,num32 $width,num32 $height) returns Rectangle {
        malloc-Rectangle($x,$y,$width,$height);
    }
    submethod DESTROY {
        free-Rectangle(self);
    }
}
class Image is export is repr('CStruct') is rw {
    has Pointer[void] $.data;
    has int32 $.width;
    has int32 $.height;
    has int32 $.mipmaps;
    has int32 $.format;
    method init(void $data,int32 $width,int32 $height,int32 $mipmaps,int32 $format) returns Image {
        malloc-Image($data,$width,$height,$mipmaps,$format);
    }
    submethod DESTROY {
        free-Image(self);
    }
}
class Texture is export is repr('CStruct') is rw {
    has uint32 $.id;
    has int32 $.width;
    has int32 $.height;
    has int32 $.mipmaps;
    has int32 $.format;
    method init(int32 $id,int32 $width,int32 $height,int32 $mipmaps,int32 $format) returns Texture {
        malloc-Texture($id,$width,$height,$mipmaps,$format);
    }
    submethod DESTROY {
        free-Texture(self);
    }
}
class Texture2D is Texture is export is repr('CStruct') {}
class TextureCubemap is Texture is export is repr('CStruct') {}
class RenderTexture is export is repr('CStruct') is rw {
    has uint32 $.id;
    HAS Texture $.texture;
    HAS Texture $.depth;
    method init(int32 $id,Texture $texture,Texture $depth) returns RenderTexture {
        malloc-RenderTexture($id,$texture,$depth);
    }
    submethod DESTROY {
        free-RenderTexture(self);
    }
}
class RenderTexture2D is RenderTexture is export is repr('CStruct') {}
class NPatchInfo is export is repr('CStruct') is rw {
    HAS Rectangle $.source;
    has int32 $.left;
    has int32 $.top;
    has int32 $.right;
    has int32 $.bottom;
    has int32 $.layout;
    method init(Rectangle $source,int32 $left,int32 $top,int32 $right,int32 $bottom,int32 $layout) returns NPatchInfo {
        malloc-NPatchInfo($source,$left,$top,$right,$bottom,$layout);
    }
    submethod DESTROY {
        free-NPatchInfo(self);
    }
}
class GlyphInfo is export is repr('CStruct') is rw {
    has int32 $.value;
    has int32 $.offsetX;
    has int32 $.offsetY;
    has int32 $.advanceX;
    HAS Image $.image;
    method init(int32 $value,int32 $offsetX,int32 $offsetY,int32 $advanceX,Image $image) returns GlyphInfo {
        malloc-GlyphInfo($value,$offsetX,$offsetY,$advanceX,$image);
    }
    submethod DESTROY {
        free-GlyphInfo(self);
    }
}
class Font is export is repr('CStruct') is rw {
    has int32 $.baseSize;
    has int32 $.glyphCount;
    has int32 $.glyphPadding;
    HAS Texture2D $.texture;
    has Pointer[Rectangle] $.recs;
    has Pointer[GlyphInfo] $.glyphs;
    method init(int32 $baseSize,int32 $glyphCount,int32 $glyphPadding,Texture2D $texture,Pointer[Rectangle] $recs,Pointer[GlyphInfo] $glyphs) returns Font {
        malloc-Font($baseSize,$glyphCount,$glyphPadding,$texture,$recs,$glyphs);
    }
    submethod DESTROY {
        free-Font(self);
    }
}
class Camera3D is export is repr('CStruct') is rw {
    HAS Vector3 $.position;
    HAS Vector3 $.target;
    HAS Vector3 $.up;
    has num32 $.fovy;
    has int32 $.projection;
    method init(Vector3 $position,Vector3 $target,Vector3 $up,num32 $fovy,int32 $projection) returns Camera3D {
        malloc-Camera3D($position,$target,$up,$fovy,$projection);
    }
    submethod DESTROY {
        free-Camera3D(self);
    }
}
class Camera is Camera3D is export is repr('CStruct') {}
class Camera2D is export is repr('CStruct') is rw {
    HAS Vector2 $.offset;
    HAS Vector2 $.target;
    has num32 $.rotation;
    has num32 $.zoom;
    method init(Vector2 $offset,Vector2 $target,num32 $rotation,num32 $zoom) returns Camera2D {
        malloc-Camera2D($offset,$target,$rotation,$zoom);
    }
    submethod DESTROY {
        free-Camera2D(self);
    }
}
class Mesh is export is repr('CStruct') is rw {
    has int32 $.vertexCount;
    has int32 $.triangleCount;
    has num32 $.vertices is rw;
    has num32 $.texcoords is rw;
    has num32 $.texcoords2 is rw;
    has num32 $.normals is rw;
    has num32 $.tangents is rw;
    has uint8 $.colors is rw;
    has uint16 $.indices is rw;
    has num32 $.animVertices is rw;
    has num32 $.animNormals is rw;
    has uint8 $.boneIds is rw;
    has num32 $.boneWeights is rw;
    has uint32 $.vaoId;
    has uint32 $.vboId is rw;
    method init(int32 $vertexCount,int32 $triangleCount,num32 $vertices,num32 $texcoords,num32 $texcoords2,num32 $normals,num32 $tangents,uint8 $colors,int16 $indices,num32 $animVertices,num32 $animNormals,uint8 $boneIds,num32 $boneWeights,int32 $vaoId,int32 $vboId) returns Mesh {
        malloc-Mesh($vertexCount,$triangleCount,$vertices,$texcoords,$texcoords2,$normals,$tangents,$colors,$indices,$animVertices,$animNormals,$boneIds,$boneWeights,$vaoId,$vboId);
    }
    submethod DESTROY {
        free-Mesh(self);
    }
}
class Shader is export is repr('CStruct') is rw {
    has uint32 $.id;
    has int32 $.locs is rw;
    method init(int32 $id,int32 $locs) returns Shader {
        malloc-Shader($id,$locs);
    }
    submethod DESTROY {
        free-Shader(self);
    }
}
class MaterialMap is export is repr('CStruct') is rw {
    HAS Texture2D $.texture;
    HAS Color $.color;
    has num32 $.value;
    method init(Texture2D $texture,Color $color,num32 $value) returns MaterialMap {
        malloc-MaterialMap($texture,$color,$value);
    }
    submethod DESTROY {
        free-MaterialMap(self);
    }
}
class Material is export is repr('CStruct') is rw {
    HAS Shader $.shader;
    has Pointer[MaterialMap] $.maps;
    has CArray[num32] $.params is rw;
    method init(Shader $shader,Pointer[MaterialMap] $maps,CArray[num32] $params) returns Material {
        malloc-Material($shader,$maps,$params);
    }
    submethod DESTROY {
        free-Material(self);
    }
}
class Transform is export is repr('CStruct') is rw {
    HAS Vector3 $.translation;
    HAS Quaternion $.rotation;
    HAS Vector3 $.scale;
    method init(Vector3 $translation,Quaternion $rotation,Vector3 $scale) returns Transform {
        malloc-Transform($translation,$rotation,$scale);
    }
    submethod DESTROY {
        free-Transform(self);
    }
}
class BoneInfo is export is repr('CStruct') is rw {
    has uint8 @.name[32] is CArray;
    has int32 $.parent;
    method init(Str $name,int32 $parent) returns BoneInfo {
        malloc-BoneInfo($name,$parent);
    }
    submethod DESTROY {
        free-BoneInfo(self);
    }
}
class Model is export is repr('CStruct') is rw {
    HAS Matrix $.transform;
    has int32 $.meshCount;
    has int32 $.materialCount;
    has Pointer[Mesh] $.meshes;
    has Pointer[Material] $.materials;
    has int32 $.meshMaterial is rw;
    has int32 $.boneCount;
    has Pointer[BoneInfo] $.bones;
    has Pointer[Transform] $.bindPose;
    method init(Matrix $transform,int32 $meshCount,int32 $materialCount,Pointer[Mesh] $meshes,Pointer[Material] $materials,int32 $meshMaterial,int32 $boneCount,Pointer[BoneInfo] $bones,Pointer[Transform] $bindPose) returns Model {
        malloc-Model($transform,$meshCount,$materialCount,$meshes,$materials,$meshMaterial,$boneCount,$bones,$bindPose);
    }
    submethod DESTROY {
        free-Model(self);
    }
}
class ModelAnimation is export is repr('CStruct') is rw {
    has int32 $.boneCount;
    has int32 $.frameCount;
    has Pointer[BoneInfo] $.bones;
    has Pointer $.framePoses;
    has uint8 @.name[32] is CArray;
    method init(int32 $boneCount,int32 $frameCount,Pointer[BoneInfo] $bones,Pointer $framePoses,Str $name) returns ModelAnimation {
        malloc-ModelAnimation($boneCount,$frameCount,$bones,$framePoses,$name);
    }
    submethod DESTROY {
        free-ModelAnimation(self);
    }
}
class Ray is export is repr('CStruct') is rw {
    HAS Vector3 $.position;
    HAS Vector3 $.direction;
    method init(Vector3 $position,Vector3 $direction) returns Ray {
        malloc-Ray($position,$direction);
    }
    submethod DESTROY {
        free-Ray(self);
    }
}
class RayCollision is export is repr('CStruct') is rw {
    has bool $.hit;
    has num32 $.distance;
    HAS Vector3 $.point;
    HAS Vector3 $.normal;
    method init(bool $hit,num32 $distance,Vector3 $point,Vector3 $normal) returns RayCollision {
        malloc-RayCollision($hit,$distance,$point,$normal);
    }
    submethod DESTROY {
        free-RayCollision(self);
    }
}
class BoundingBox is export is repr('CStruct') is rw {
    HAS Vector3 $.min;
    HAS Vector3 $.max;
    method init(Vector3 $min,Vector3 $max) returns BoundingBox {
        malloc-BoundingBox($min,$max);
    }
    submethod DESTROY {
        free-BoundingBox(self);
    }
}
class Wave is export is repr('CStruct') is rw {
    has uint32 $.frameCount;
    has uint32 $.sampleRate;
    has uint32 $.sampleSize;
    has uint32 $.channels;
    has Pointer[void] $.data;
    method init(int32 $frameCount,int32 $sampleRate,int32 $sampleSize,int32 $channels,void $data) returns Wave {
        malloc-Wave($frameCount,$sampleRate,$sampleSize,$channels,$data);
    }
    submethod DESTROY {
        free-Wave(self);
    }
}
class rAudioBuffer is export is repr('CStruct') {  has int32 $.dummy;}
class rAudioProcessor is export is repr('CStruct') {  has int32 $.dummy;}
class AudioStream is export is repr('CStruct') is rw {
    has Pointer[rAudioBuffer] $.buffer;
    has Pointer[rAudioProcessor] $.processor;
    has uint32 $.sampleRate;
    has uint32 $.sampleSize;
    has uint32 $.channels;


}
class Sound is export is repr('CStruct') is rw {
    HAS AudioStream $.stream;
    has uint32 $.frameCount;
    method init(AudioStream $stream,int32 $frameCount) returns Sound {
        malloc-Sound($stream,$frameCount);
    }
    submethod DESTROY {
        free-Sound(self);
    }
}
class Music is export is repr('CStruct') is rw {
    HAS AudioStream $.stream;
    has uint32 $.frameCount;
    has bool $.looping;
    has int32 $.ctxType;
    has Pointer[void] $.ctxData;
    method init(AudioStream $stream,int32 $frameCount,bool $looping,int32 $ctxType,void $ctxData) returns Music {
        malloc-Music($stream,$frameCount,$looping,$ctxType,$ctxData);
    }
    submethod DESTROY {
        free-Music(self);
    }
}
class VrDeviceInfo is export is repr('CStruct') is rw {
    has int32 $.hResolution;
    has int32 $.vResolution;
    has num32 $.hScreenSize;
    has num32 $.vScreenSize;
    has num32 $.eyeToScreenDistance;
    has num32 $.lensSeparationDistance;
    has num32 $.interpupillaryDistance;
    has CArray[num32] $.lensDistortionValues is rw;
    has CArray[num32] $.chromaAbCorrection is rw;
    method init(int32 $hResolution,int32 $vResolution,num32 $hScreenSize,num32 $vScreenSize,num32 $eyeToScreenDistance,num32 $lensSeparationDistance,num32 $interpupillaryDistance,CArray[num32] $lensDistortionValues,CArray[num32] $chromaAbCorrection) returns VrDeviceInfo {
        malloc-VrDeviceInfo($hResolution,$vResolution,$hScreenSize,$vScreenSize,$eyeToScreenDistance,$lensSeparationDistance,$interpupillaryDistance,$lensDistortionValues,$chromaAbCorrection);
    }
    submethod DESTROY {
        free-VrDeviceInfo(self);
    }
}
class VrStereoConfig is export is repr('CStruct') is rw {
    has CArray[Matrix] $.projection is rw;
    has CArray[Matrix] $.viewOffset is rw;
    has CArray[num32] $.leftLensCenter is rw;
    has CArray[num32] $.rightLensCenter is rw;
    has CArray[num32] $.leftScreenCenter is rw;
    has CArray[num32] $.rightScreenCenter is rw;
    has CArray[num32] $.scale is rw;
    has CArray[num32] $.scaleIn is rw;
    method init(CArray[Matrix] $projection,CArray[Matrix] $viewOffset,CArray[num32] $leftLensCenter,CArray[num32] $rightLensCenter,CArray[num32] $leftScreenCenter,CArray[num32] $rightScreenCenter,CArray[num32] $scale,CArray[num32] $scaleIn) returns VrStereoConfig {
        malloc-VrStereoConfig($projection,$viewOffset,$leftLensCenter,$rightLensCenter,$leftScreenCenter,$rightScreenCenter,$scale,$scaleIn);
    }
    submethod DESTROY {
        free-VrStereoConfig(self);
    }
}
class FilePathList is export is repr('CStruct') is rw {
    has uint32 $.capacity;
    has uint32 $.count;
    has Str $.paths is rw;
    method init(int32 $capacity,int32 $count,Str $paths) returns FilePathList {
        malloc-FilePathList($capacity,$count,$paths);
    }
    submethod DESTROY {
        free-FilePathList(self);
    }
}
class AutomationEvent is export is repr('CStruct') is rw {
    has uint32 $.frame;
    has uint32 $.type;
    has CArray[int32] $.params is rw;
    method init(int32 $frame,int32 $type,CArray[int32] $params) returns AutomationEvent {
        malloc-AutomationEvent($frame,$type,$params);
    }
    submethod DESTROY {
        free-AutomationEvent(self);
    }
}
class AutomationEventList is export is repr('CStruct') is rw {
    has uint32 $.capacity;
    has uint32 $.count;
    has Pointer[AutomationEvent] $.events;
    method init(int32 $capacity,int32 $count,Pointer[AutomationEvent] $events) returns AutomationEventList {
        malloc-AutomationEventList($capacity,$count,$events);
    }
    submethod DESTROY {
        free-AutomationEventList(self);
    }
}
enum ConfigFlags is export (
    FLAG_VSYNC_HINT => 0x00000040,
    FLAG_FULLSCREEN_MODE => 0x00000002,
    FLAG_WINDOW_RESIZABLE => 0x00000004,
    FLAG_WINDOW_UNDECORATED => 0x00000008,
    FLAG_WINDOW_HIDDEN => 0x00000080,
    FLAG_WINDOW_MINIMIZED => 0x00000200,
    FLAG_WINDOW_MAXIMIZED => 0x00000400,
    FLAG_WINDOW_UNFOCUSED => 0x00000800,
    FLAG_WINDOW_TOPMOST => 0x00001000,
    FLAG_WINDOW_ALWAYS_RUN => 0x00000100,
    FLAG_WINDOW_TRANSPARENT => 0x00000010,
    FLAG_WINDOW_HIGHDPI => 0x00002000,
    FLAG_WINDOW_MOUSE_PASSTHROUGH => 0x00004000,
    FLAG_BORDERLESS_WINDOWED_MODE => 0x00008000,
    FLAG_MSAA_4X_HINT => 0x00000020,
    FLAG_INTERLACED_HINT => 0x00010000,
);
enum TraceLogLevel is export (
    LOG_ALL => 0,
    LOG_TRACE => 1,
    LOG_DEBUG => 2,
    LOG_INFO => 3,
    LOG_WARNING => 4,
    LOG_ERROR => 5,
    LOG_FATAL => 6,
    LOG_NONE => 7,
);
enum KeyboardKey is export (
    KEY_NULL => 0,
    KEY_APOSTROPHE => 39,
    KEY_COMMA => 44,
    KEY_MINUS => 45,
    KEY_PERIOD => 46,
    KEY_SLASH => 47,
    KEY_ZERO => 48,
    KEY_ONE => 49,
    KEY_TWO => 50,
    KEY_THREE => 51,
    KEY_FOUR => 52,
    KEY_FIVE => 53,
    KEY_SIX => 54,
    KEY_SEVEN => 55,
    KEY_EIGHT => 56,
    KEY_NINE => 57,
    KEY_SEMICOLON => 59,
    KEY_EQUAL => 61,
    KEY_A => 65,
    KEY_B => 66,
    KEY_C => 67,
    KEY_D => 68,
    KEY_E => 69,
    KEY_F => 70,
    KEY_G => 71,
    KEY_H => 72,
    KEY_I => 73,
    KEY_J => 74,
    KEY_K => 75,
    KEY_L => 76,
    KEY_M => 77,
    KEY_N => 78,
    KEY_O => 79,
    KEY_P => 80,
    KEY_Q => 81,
    KEY_R => 82,
    KEY_S => 83,
    KEY_T => 84,
    KEY_U => 85,
    KEY_V => 86,
    KEY_W => 87,
    KEY_X => 88,
    KEY_Y => 89,
    KEY_Z => 90,
    KEY_LEFT_BRACKET => 91,
    KEY_BACKSLASH => 92,
    KEY_RIGHT_BRACKET => 93,
    KEY_GRAVE => 96,
    KEY_SPACE => 32,
    KEY_ESCAPE => 256,
    KEY_ENTER => 257,
    KEY_TAB => 258,
    KEY_BACKSPACE => 259,
    KEY_INSERT => 260,
    KEY_DELETE => 261,
    KEY_RIGHT => 262,
    KEY_LEFT => 263,
    KEY_DOWN => 264,
    KEY_UP => 265,
    KEY_PAGE_UP => 266,
    KEY_PAGE_DOWN => 267,
    KEY_HOME => 268,
    KEY_END => 269,
    KEY_CAPS_LOCK => 280,
    KEY_SCROLL_LOCK => 281,
    KEY_NUM_LOCK => 282,
    KEY_PRINT_SCREEN => 283,
    KEY_PAUSE => 284,
    KEY_F1 => 290,
    KEY_F2 => 291,
    KEY_F3 => 292,
    KEY_F4 => 293,
    KEY_F5 => 294,
    KEY_F6 => 295,
    KEY_F7 => 296,
    KEY_F8 => 297,
    KEY_F9 => 298,
    KEY_F10 => 299,
    KEY_F11 => 300,
    KEY_F12 => 301,
    KEY_LEFT_SHIFT => 340,
    KEY_LEFT_CONTROL => 341,
    KEY_LEFT_ALT => 342,
    KEY_LEFT_SUPER => 343,
    KEY_RIGHT_SHIFT => 344,
    KEY_RIGHT_CONTROL => 345,
    KEY_RIGHT_ALT => 346,
    KEY_RIGHT_SUPER => 347,
    KEY_KB_MENU => 348,
    KEY_KP_0 => 320,
    KEY_KP_1 => 321,
    KEY_KP_2 => 322,
    KEY_KP_3 => 323,
    KEY_KP_4 => 324,
    KEY_KP_5 => 325,
    KEY_KP_6 => 326,
    KEY_KP_7 => 327,
    KEY_KP_8 => 328,
    KEY_KP_9 => 329,
    KEY_KP_DECIMAL => 330,
    KEY_KP_DIVIDE => 331,
    KEY_KP_MULTIPLY => 332,
    KEY_KP_SUBTRACT => 333,
    KEY_KP_ADD => 334,
    KEY_KP_ENTER => 335,
    KEY_KP_EQUAL => 336,
    KEY_BACK => 4,
    KEY_MENU => 82,
    KEY_VOLUME_UP => 24,
    KEY_VOLUME_DOWN => 25,
);
enum MouseButton is export (
    MOUSE_BUTTON_LEFT => 0,
    MOUSE_BUTTON_RIGHT => 1,
    MOUSE_BUTTON_MIDDLE => 2,
    MOUSE_BUTTON_SIDE => 3,
    MOUSE_BUTTON_EXTRA => 4,
    MOUSE_BUTTON_FORWARD => 5,
    MOUSE_BUTTON_BACK => 6,
);
enum MouseCursor is export (
    MOUSE_CURSOR_DEFAULT => 0,
    MOUSE_CURSOR_ARROW => 1,
    MOUSE_CURSOR_IBEAM => 2,
    MOUSE_CURSOR_CROSSHAIR => 3,
    MOUSE_CURSOR_POINTING_HAND => 4,
    MOUSE_CURSOR_RESIZE_EW => 5,
    MOUSE_CURSOR_RESIZE_NS => 6,
    MOUSE_CURSOR_RESIZE_NWSE => 7,
    MOUSE_CURSOR_RESIZE_NESW => 8,
    MOUSE_CURSOR_RESIZE_ALL => 9,
    MOUSE_CURSOR_NOT_ALLOWED => 10,
);
enum GamepadButton is export (
    GAMEPAD_BUTTON_UNKNOWN => 0,
    GAMEPAD_BUTTON_LEFT_FACE_UP => 1,
    GAMEPAD_BUTTON_LEFT_FACE_RIGHT => 2,
    GAMEPAD_BUTTON_LEFT_FACE_DOWN => 3,
    GAMEPAD_BUTTON_LEFT_FACE_LEFT => 4,
    GAMEPAD_BUTTON_RIGHT_FACE_UP => 5,
    GAMEPAD_BUTTON_RIGHT_FACE_RIGHT => 6,
    GAMEPAD_BUTTON_RIGHT_FACE_DOWN => 7,
    GAMEPAD_BUTTON_RIGHT_FACE_LEFT => 8,
    GAMEPAD_BUTTON_LEFT_TRIGGER_1 => 9,
    GAMEPAD_BUTTON_LEFT_TRIGGER_2 => 10,
    GAMEPAD_BUTTON_RIGHT_TRIGGER_1 => 11,
    GAMEPAD_BUTTON_RIGHT_TRIGGER_2 => 12,
    GAMEPAD_BUTTON_MIDDLE_LEFT => 13,
    GAMEPAD_BUTTON_MIDDLE => 14,
    GAMEPAD_BUTTON_MIDDLE_RIGHT => 15,
    GAMEPAD_BUTTON_LEFT_THUMB => 16,
    GAMEPAD_BUTTON_RIGHT_THUMB => 17,
);
enum GamepadAxis is export (
    GAMEPAD_AXIS_LEFT_X => 0,
    GAMEPAD_AXIS_LEFT_Y => 1,
    GAMEPAD_AXIS_RIGHT_X => 2,
    GAMEPAD_AXIS_RIGHT_Y => 3,
    GAMEPAD_AXIS_LEFT_TRIGGER => 4,
    GAMEPAD_AXIS_RIGHT_TRIGGER => 5,
);
enum MaterialMapIndex is export (
    MATERIAL_MAP_ALBEDO => 0,
    MATERIAL_MAP_METALNESS => 1,
    MATERIAL_MAP_NORMAL => 2,
    MATERIAL_MAP_ROUGHNESS => 3,
    MATERIAL_MAP_OCCLUSION => 4,
    MATERIAL_MAP_EMISSION => 5,
    MATERIAL_MAP_HEIGHT => 6,
    MATERIAL_MAP_CUBEMAP => 7,
    MATERIAL_MAP_IRRADIANCE => 8,
    MATERIAL_MAP_PREFILTER => 9,
    MATERIAL_MAP_BRDF => 10,
);
enum ShaderLocationIndex is export (
    SHADER_LOC_VERTEX_POSITION => 0,
    SHADER_LOC_VERTEX_TEXCOORD01 => 1,
    SHADER_LOC_VERTEX_TEXCOORD02 => 2,
    SHADER_LOC_VERTEX_NORMAL => 3,
    SHADER_LOC_VERTEX_TANGENT => 4,
    SHADER_LOC_VERTEX_COLOR => 5,
    SHADER_LOC_MATRIX_MVP => 6,
    SHADER_LOC_MATRIX_VIEW => 7,
    SHADER_LOC_MATRIX_PROJECTION => 8,
    SHADER_LOC_MATRIX_MODEL => 9,
    SHADER_LOC_MATRIX_NORMAL => 10,
    SHADER_LOC_VECTOR_VIEW => 11,
    SHADER_LOC_COLOR_DIFFUSE => 12,
    SHADER_LOC_COLOR_SPECULAR => 13,
    SHADER_LOC_COLOR_AMBIENT => 14,
    SHADER_LOC_MAP_ALBEDO => 15,
    SHADER_LOC_MAP_METALNESS => 16,
    SHADER_LOC_MAP_NORMAL => 17,
    SHADER_LOC_MAP_ROUGHNESS => 18,
    SHADER_LOC_MAP_OCCLUSION => 19,
    SHADER_LOC_MAP_EMISSION => 20,
    SHADER_LOC_MAP_HEIGHT => 21,
    SHADER_LOC_MAP_CUBEMAP => 22,
    SHADER_LOC_MAP_IRRADIANCE => 23,
    SHADER_LOC_MAP_PREFILTER => 24,
    SHADER_LOC_MAP_BRDF => 25,
);
enum ShaderUniformDataType is export (
    SHADER_UNIFORM_FLOAT => 0,
    SHADER_UNIFORM_VEC2 => 1,
    SHADER_UNIFORM_VEC3 => 2,
    SHADER_UNIFORM_VEC4 => 3,
    SHADER_UNIFORM_INT => 4,
    SHADER_UNIFORM_IVEC2 => 5,
    SHADER_UNIFORM_IVEC3 => 6,
    SHADER_UNIFORM_IVEC4 => 7,
    SHADER_UNIFORM_SAMPLER2D => 8,
);
enum ShaderAttributeDataType is export (
    SHADER_ATTRIB_FLOAT => 0,
    SHADER_ATTRIB_VEC2 => 1,
    SHADER_ATTRIB_VEC3 => 2,
    SHADER_ATTRIB_VEC4 => 3,
);
enum PixelFormat is export (
    PIXELFORMAT_UNCOMPRESSED_GRAYSCALE => 1,
    PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA => 2,
    PIXELFORMAT_UNCOMPRESSED_R5G6B5 => 3,
    PIXELFORMAT_UNCOMPRESSED_R8G8B8 => 4,
    PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 => 5,
    PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 => 6,
    PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 => 7,
    PIXELFORMAT_UNCOMPRESSED_R32 => 8,
    PIXELFORMAT_UNCOMPRESSED_R32G32B32 => 9,
    PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 => 10,
    PIXELFORMAT_UNCOMPRESSED_R16 => 11,
    PIXELFORMAT_UNCOMPRESSED_R16G16B16 => 12,
    PIXELFORMAT_UNCOMPRESSED_R16G16B16A16 => 13,
    PIXELFORMAT_COMPRESSED_DXT1_RGB => 14,
    PIXELFORMAT_COMPRESSED_DXT1_RGBA => 15,
    PIXELFORMAT_COMPRESSED_DXT3_RGBA => 16,
    PIXELFORMAT_COMPRESSED_DXT5_RGBA => 17,
    PIXELFORMAT_COMPRESSED_ETC1_RGB => 18,
    PIXELFORMAT_COMPRESSED_ETC2_RGB => 19,
    PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA => 20,
    PIXELFORMAT_COMPRESSED_PVRT_RGB => 21,
    PIXELFORMAT_COMPRESSED_PVRT_RGBA => 22,
    PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA => 23,
    PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA => 24,
);
enum TextureFilter is export (
    TEXTURE_FILTER_POINT => 0,
    TEXTURE_FILTER_BILINEAR => 1,
    TEXTURE_FILTER_TRILINEAR => 2,
    TEXTURE_FILTER_ANISOTROPIC_4X => 3,
    TEXTURE_FILTER_ANISOTROPIC_8X => 4,
    TEXTURE_FILTER_ANISOTROPIC_16X => 5,
);
enum TextureWrap is export (
    TEXTURE_WRAP_REPEAT => 0,
    TEXTURE_WRAP_CLAMP => 1,
    TEXTURE_WRAP_MIRROR_REPEAT => 2,
    TEXTURE_WRAP_MIRROR_CLAMP => 3,
);
enum CubemapLayout is export (
    CUBEMAP_LAYOUT_AUTO_DETECT => 0,
    CUBEMAP_LAYOUT_LINE_VERTICAL => 1,
    CUBEMAP_LAYOUT_LINE_HORIZONTAL => 2,
    CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR => 3,
    CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE => 4,
    CUBEMAP_LAYOUT_PANORAMA => 5,
);
enum FontType is export (
    FONT_DEFAULT => 0,
    FONT_BITMAP => 1,
    FONT_SDF => 2,
);
enum BlendMode is export (
    BLEND_ALPHA => 0,
    BLEND_ADDITIVE => 1,
    BLEND_MULTIPLIED => 2,
    BLEND_ADD_COLORS => 3,
    BLEND_SUBTRACT_COLORS => 4,
    BLEND_ALPHA_PREMULTIPLY => 5,
    BLEND_CUSTOM => 6,
    BLEND_CUSTOM_SEPARATE => 7,
);
enum Gesture is export (
    GESTURE_NONE => 0,
    GESTURE_TAP => 1,
    GESTURE_DOUBLETAP => 2,
    GESTURE_HOLD => 4,
    GESTURE_DRAG => 8,
    GESTURE_SWIPE_RIGHT => 16,
    GESTURE_SWIPE_LEFT => 32,
    GESTURE_SWIPE_UP => 64,
    GESTURE_SWIPE_DOWN => 128,
    GESTURE_PINCH_IN => 256,
    GESTURE_PINCH_OUT => 512,
);
enum CameraMode is export (
    CAMERA_CUSTOM => 0,
    CAMERA_FREE => 1,
    CAMERA_ORBITAL => 2,
    CAMERA_FIRST_PERSON => 3,
    CAMERA_THIRD_PERSON => 4,
);
enum CameraProjection is export (
    CAMERA_PERSPECTIVE => 0,
    CAMERA_ORTHOGRAPHIC => 1,
);
enum NPatchLayout is export (
    NPATCH_NINE_PATCH => 0,
    NPATCH_THREE_PATCH_VERTICAL => 1,
    NPATCH_THREE_PATCH_HORIZONTAL => 2,
);
our sub init-window (int32 $width, int32 $height, Str $title) is export is native(LIBRAYLIB) is symbol('InitWindow'){ * }
our sub term:<close-window> () is export is native(LIBRAYLIB) is symbol('CloseWindow'){ * }
our sub term:<window-should-close> () returns bool is export is native(LIBRAYLIB) is symbol('WindowShouldClose'){ * }
our sub term:<is-window-ready> () returns bool is export is native(LIBRAYLIB) is symbol('IsWindowReady'){ * }
our sub term:<is-window-fullscreen> () returns bool is export is native(LIBRAYLIB) is symbol('IsWindowFullscreen'){ * }
our sub term:<is-window-hidden> () returns bool is export is native(LIBRAYLIB) is symbol('IsWindowHidden'){ * }
our sub term:<is-window-minimized> () returns bool is export is native(L