vraylib

Raylib wrapper for vlang
git clone git://git.lair.cx/vraylib
Log | Files | Refs | README | LICENSE

commit d5c3c45a4d084fad26bf8f71c87ab70b5a760b17
Author: Yongbin Kim <iam@yongbin.kim>
Date:   Mon, 22 Jan 2024 01:38:20 +0900

WIP: :tada: First commit

Diffstat:
A.editorconfig | 8++++++++
A.gitattributes | 7+++++++
A.gitignore | 25+++++++++++++++++++++++++
ALICENSE | 16++++++++++++++++
AREADME | 12++++++++++++
Ac/raylib.h | 1662+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Araylib.c.v | 2312++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Av.mod | 7+++++++
8 files changed, 4049 insertions(+), 0 deletions(-)

diff --git a/.editorconfig b/.editorconfig @@ -0,0 +1,8 @@ +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.v] +indent_style = tab diff --git a/.gitattributes b/.gitattributes @@ -0,0 +1,7 @@ +* text=auto eol=lf +*.bat eol=crlf + +**/*.v linguist-language=V +**/*.vv linguist-language=V +**/*.vsh linguist-language=V +**/v.mod linguist-language=V diff --git a/.gitignore b/.gitignore @@ -0,0 +1,25 @@ +# Binaries for programs and plugins +main +vraylib +*.exe +*.exe~ +*.so +*.dylib +*.dll + +# Ignore binary output folders +bin/ + +# Ignore common editor/system specific metadata +.DS_Store +.idea/ +.vscode/ +*.iml +.ccls-cache/ + +# ENV +.env + +# vweb and database +*.db +*.js diff --git a/LICENSE b/LICENSE @@ -0,0 +1,16 @@ +Copyright (c) 2024 Yongbin Kim (@ybkimm) + +This software is provided "as-is", without any express or implied warranty. In no event +will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial +applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you + wrote the original software. If you use this software in a product, an acknowledgment + in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented + as being the original software. + + 3. This notice may not be removed or altered from any source distribution. diff --git a/README b/README @@ -0,0 +1,12 @@ +Raylib 5.0 bindings for the V programming language + + +Note: This library is work in progress and not yet ready for use. + + +## Changes from original Raylib C-API + +- `string` instead of `char *` for all string parameters +- `void TraceLog(int logLevel, const char *text, ...)` -> `fn trace_log(log_level: int, text: string)` + - Use string interpolation instead of `printf`-style formatting + diff --git a/c/raylib.h b/c/raylib.h @@ -0,0 +1,1662 @@ +/********************************************************************************************** +* +* raylib v5.0 - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com) +* +* FEATURES: +* - NO external dependencies, all required libraries included with raylib +* - Multiplatform: Windows, Linux, FreeBSD, OpenBSD, NetBSD, DragonFly, +* MacOS, Haiku, Android, Raspberry Pi, DRM native, HTML5. +* - Written in plain C code (C99) in PascalCase/camelCase notation +* - Hardware accelerated with OpenGL (1.1, 2.1, 3.3, 4.3 or ES2 - choose at compile) +* - Unique OpenGL abstraction layer (usable as standalone module): [rlgl] +* - Multiple Fonts formats supported (TTF, XNA fonts, AngelCode fonts) +* - Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC) +* - Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more! +* - Flexible Materials system, supporting classic maps and PBR maps +* - Animated 3D models supported (skeletal bones animation) (IQM) +* - Shaders support, including Model shaders and Postprocessing shaders +* - Powerful math module for Vector, Matrix and Quaternion operations: [raymath] +* - Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD) +* - VR stereo rendering with configurable HMD device parameters +* - Bindings to multiple programming languages available! +* +* NOTES: +* - One default Font is loaded on InitWindow()->LoadFontDefault() [core, text] +* - One default Texture2D is loaded on rlglInit(), 1x1 white pixel R8G8B8A8 [rlgl] (OpenGL 3.3 or ES2) +* - One default Shader is loaded on rlglInit()->rlLoadShaderDefault() [rlgl] (OpenGL 3.3 or ES2) +* - One default RenderBatch is loaded on rlglInit()->rlLoadRenderBatch() [rlgl] (OpenGL 3.3 or ES2) +* +* DEPENDENCIES (included): +* [rcore] rglfw (Camilla Löwy - github.com/glfw/glfw) for window/context management and input (PLATFORM_DESKTOP) +* [rlgl] glad (David Herberth - github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading (PLATFORM_DESKTOP) +* [raudio] miniaudio (David Reid - github.com/mackron/miniaudio) for audio device/context management +* +* OPTIONAL DEPENDENCIES (included): +* [rcore] msf_gif (Miles Fogle) for GIF recording +* [rcore] sinfl (Micha Mettke) for DEFLATE decompression algorithm +* [rcore] sdefl (Micha Mettke) for DEFLATE compression algorithm +* [rtextures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...) +* [rtextures] stb_image_write (Sean Barret) for image writing (BMP, TGA, PNG, JPG) +* [rtextures] stb_image_resize (Sean Barret) for image resizing algorithms +* [rtext] stb_truetype (Sean Barret) for ttf fonts loading +* [rtext] stb_rect_pack (Sean Barret) for rectangles packing +* [rmodels] par_shapes (Philip Rideout) for parametric 3d shapes generation +* [rmodels] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL) +* [rmodels] cgltf (Johannes Kuhlmann) for models loading (glTF) +* [rmodels] Model3D (bzt) for models loading (M3D, https://bztsrc.gitlab.io/model3d) +* [raudio] dr_wav (David Reid) for WAV audio file loading +* [raudio] dr_flac (David Reid) for FLAC audio file loading +* [raudio] dr_mp3 (David Reid) for MP3 audio file loading +* [raudio] stb_vorbis (Sean Barret) for OGG audio loading +* [raudio] jar_xm (Joshua Reisenauer) for XM audio module loading +* [raudio] jar_mod (Joshua Reisenauer) for MOD audio module loading +* +* +* LICENSE: zlib/libpng +* +* raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software: +* +* Copyright (c) 2013-2023 Ramon Santamaria (@raysan5) +* +* This software is provided "as-is", without any express or implied warranty. In no event +* will the authors be held liable for any damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you +* wrote the original software. If you use this software in a product, an acknowledgment +* in the product documentation would be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented +* as being the original software. +* +* 3. This notice may not be removed or altered from any source distribution. +* +**********************************************************************************************/ + +#ifndef RAYLIB_H +#define RAYLIB_H + +#include <stdarg.h> // Required for: va_list - Only used by TraceLogCallback + +#define RAYLIB_VERSION_MAJOR 5 +#define RAYLIB_VERSION_MINOR 0 +#define RAYLIB_VERSION_PATCH 0 +#define RAYLIB_VERSION "5.0" + +// Function specifiers in case library is build/used as a shared library (Windows) +// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll +#if defined(_WIN32) + #if defined(BUILD_LIBTYPE_SHARED) + #if defined(__TINYC__) + #define __declspec(x) __attribute__((x)) + #endif + #define RLAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll) + #elif defined(USE_LIBTYPE_SHARED) + #define RLAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll) + #endif +#endif + +#ifndef RLAPI + #define RLAPI // Functions defined as 'extern' by default (implicit specifiers) +#endif + +//---------------------------------------------------------------------------------- +// Some basic Defines +//---------------------------------------------------------------------------------- +#ifndef PI + #define PI 3.14159265358979323846f +#endif +#ifndef DEG2RAD + #define DEG2RAD (PI/180.0f) +#endif +#ifndef RAD2DEG + #define RAD2DEG (180.0f/PI) +#endif + +// Allow custom memory allocators +// NOTE: Require recompiling raylib sources +#ifndef RL_MALLOC + #define RL_MALLOC(sz) malloc(sz) +#endif +#ifndef RL_CALLOC + #define RL_CALLOC(n,sz) calloc(n,sz) +#endif +#ifndef RL_REALLOC + #define RL_REALLOC(ptr,sz) realloc(ptr,sz) +#endif +#ifndef RL_FREE + #define RL_FREE(ptr) free(ptr) +#endif + +// NOTE: MSVC C++ compiler does not support compound literals (C99 feature) +// Plain structures in C++ (without constructors) can be initialized with { } +// This is called aggregate initialization (C++11 feature) +#if defined(__cplusplus) + #define CLITERAL(type) type +#else + #define CLITERAL(type) (type) +#endif + +// Some compilers (mostly macos clang) default to C++98, +// where aggregate initialization can't be used +// So, give a more clear error stating how to fix this +#if !defined(_MSC_VER) && (defined(__cplusplus) && __cplusplus < 201103L) + #error "C++11 or later is required. Add -std=c++11" +#endif + +// NOTE: We set some defines with some data types declared by raylib +// Other modules (raymath, rlgl) also require some of those types, so, +// to be able to use those other modules as standalone (not depending on raylib) +// this defines are very useful for internal check and avoid type (re)definitions +#define RL_COLOR_TYPE +#define RL_RECTANGLE_TYPE +#define RL_VECTOR2_TYPE +#define RL_VECTOR3_TYPE +#define RL_VECTOR4_TYPE +#define RL_QUATERNION_TYPE +#define RL_MATRIX_TYPE + +// Some Basic Colors +// NOTE: Custom raylib color palette for amazing visuals on WHITE background +#define LIGHTGRAY CLITERAL(Color){ 200, 200, 200, 255 } // Light Gray +#define GRAY CLITERAL(Color){ 130, 130, 130, 255 } // Gray +#define DARKGRAY CLITERAL(Color){ 80, 80, 80, 255 } // Dark Gray +#define YELLOW CLITERAL(Color){ 253, 249, 0, 255 } // Yellow +#define GOLD CLITERAL(Color){ 255, 203, 0, 255 } // Gold +#define ORANGE CLITERAL(Color){ 255, 161, 0, 255 } // Orange +#define PINK CLITERAL(Color){ 255, 109, 194, 255 } // Pink +#define RED CLITERAL(Color){ 230, 41, 55, 255 } // Red +#define MAROON CLITERAL(Color){ 190, 33, 55, 255 } // Maroon +#define GREEN CLITERAL(Color){ 0, 228, 48, 255 } // Green +#define LIME CLITERAL(Color){ 0, 158, 47, 255 } // Lime +#define DARKGREEN CLITERAL(Color){ 0, 117, 44, 255 } // Dark Green +#define SKYBLUE CLITERAL(Color){ 102, 191, 255, 255 } // Sky Blue +#define BLUE CLITERAL(Color){ 0, 121, 241, 255 } // Blue +#define DARKBLUE CLITERAL(Color){ 0, 82, 172, 255 } // Dark Blue +#define PURPLE CLITERAL(Color){ 200, 122, 255, 255 } // Purple +#define VIOLET CLITERAL(Color){ 135, 60, 190, 255 } // Violet +#define DARKPURPLE CLITERAL(Color){ 112, 31, 126, 255 } // Dark Purple +#define BEIGE CLITERAL(Color){ 211, 176, 131, 255 } // Beige +#define BROWN CLITERAL(Color){ 127, 106, 79, 255 } // Brown +#define DARKBROWN CLITERAL(Color){ 76, 63, 47, 255 } // Dark Brown + +#define WHITE CLITERAL(Color){ 255, 255, 255, 255 } // White +#define BLACK CLITERAL(Color){ 0, 0, 0, 255 } // Black +#define BLANK CLITERAL(Color){ 0, 0, 0, 0 } // Blank (Transparent) +#define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta +#define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo) + +//---------------------------------------------------------------------------------- +// Structures Definition +//---------------------------------------------------------------------------------- +// Boolean type +#if (defined(__STDC__) && __STDC_VERSION__ >= 199901L) || (defined(_MSC_VER) && _MSC_VER >= 1800) + #include <stdbool.h> +#elif !defined(__cplusplus) && !defined(bool) + typedef enum bool { false = 0, true = !false } bool; + #define RL_BOOL_TYPE +#endif + +// Vector2, 2 components +typedef struct Vector2 { + float x; // Vector x component + float y; // Vector y component +} Vector2; + +// Vector3, 3 components +typedef struct Vector3 { + float x; // Vector x component + float y; // Vector y component + float z; // Vector z component +} Vector3; + +// Vector4, 4 components +typedef struct Vector4 { + float x; // Vector x component + float y; // Vector y component + float z; // Vector z component + float w; // Vector w component +} Vector4; + +// Quaternion, 4 components (Vector4 alias) +typedef Vector4 Quaternion; + +// Matrix, 4x4 components, column major, OpenGL style, right-handed +typedef struct Matrix { + float m0, m4, m8, m12; // Matrix first row (4 components) + float m1, m5, m9, m13; // Matrix second row (4 components) + float m2, m6, m10, m14; // Matrix third row (4 components) + float m3, m7, m11, m15; // Matrix fourth row (4 components) +} Matrix; + +// Color, 4 components, R8G8B8A8 (32bit) +typedef struct Color { + unsigned char r; // Color red value + unsigned char g; // Color green value + unsigned char b; // Color blue value + unsigned char a; // Color alpha value +} Color; + +// Rectangle, 4 components +typedef struct Rectangle { + float x; // Rectangle top-left corner position x + float y; // Rectangle top-left corner position y + float width; // Rectangle width + float height; // Rectangle height +} Rectangle; + +// Image, pixel data stored in CPU memory (RAM) +typedef struct Image { + void *data; // Image raw data + int width; // Image base width + int height; // Image base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat type) +} Image; + +// Texture, tex data stored in GPU memory (VRAM) +typedef struct Texture { + unsigned int id; // OpenGL texture id + int width; // Texture base width + int height; // Texture base height + int mipmaps; // Mipmap levels, 1 by default + int format; // Data format (PixelFormat type) +} Texture; + +// Texture2D, same as Texture +typedef Texture Texture2D; + +// TextureCubemap, same as Texture +typedef Texture TextureCubemap; + +// RenderTexture, fbo for texture rendering +typedef struct RenderTexture { + unsigned int id; // OpenGL framebuffer object id + Texture texture; // Color buffer attachment texture + Texture depth; // Depth buffer attachment texture +} RenderTexture; + +// RenderTexture2D, same as RenderTexture +typedef RenderTexture RenderTexture2D; + +// NPatchInfo, n-patch layout info +typedef struct NPatchInfo { + Rectangle source; // Texture source rectangle + int left; // Left border offset + int top; // Top border offset + int right; // Right border offset + int bottom; // Bottom border offset + int layout; // Layout of the n-patch: 3x3, 1x3 or 3x1 +} NPatchInfo; + +// GlyphInfo, font characters glyphs info +typedef struct GlyphInfo { + int value; // Character value (Unicode) + int offsetX; // Character offset X when drawing + int offsetY; // Character offset Y when drawing + int advanceX; // Character advance position X + Image image; // Character image data +} GlyphInfo; + +// Font, font texture and GlyphInfo array data +typedef struct Font { + int baseSize; // Base size (default chars height) + int glyphCount; // Number of glyph characters + int glyphPadding; // Padding around the glyph characters + Texture2D texture; // Texture atlas containing the glyphs + Rectangle *recs; // Rectangles in texture for the glyphs + GlyphInfo *glyphs; // Glyphs info data +} Font; + +// Camera, defines position/orientation in 3d space +typedef struct Camera3D { + Vector3 position; // Camera position + Vector3 target; // Camera target it looks-at + Vector3 up; // Camera up vector (rotation over its axis) + float fovy; // Camera field-of-view aperture in Y (degrees) in perspective, used as near plane width in orthographic + int projection; // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC +} Camera3D; + +typedef Camera3D Camera; // Camera type fallback, defaults to Camera3D + +// Camera2D, defines position/orientation in 2d space +typedef struct Camera2D { + Vector2 offset; // Camera offset (displacement from target) + Vector2 target; // Camera target (rotation and zoom origin) + float rotation; // Camera rotation in degrees + float zoom; // Camera zoom (scaling), should be 1.0f by default +} Camera2D; + +// Mesh, vertex data and vao/vbo +typedef struct Mesh { + int vertexCount; // Number of vertices stored in arrays + int triangleCount; // Number of triangles stored (indexed or not) + + // Vertex attributes data + float *vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) + float *texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) + float *texcoords2; // Vertex texture second coordinates (UV - 2 components per vertex) (shader-location = 5) + float *normals; // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) + float *tangents; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) + unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) + unsigned short *indices; // Vertex indices (in case vertex data comes indexed) + + // Animation vertex data + float *animVertices; // Animated vertex positions (after bones transformations) + float *animNormals; // Animated normals (after bones transformations) + unsigned char *boneIds; // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning) + float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) + + // OpenGL identifiers + unsigned int vaoId; // OpenGL Vertex Array Object id + unsigned int *vboId; // OpenGL Vertex Buffer Objects id (default vertex data) +} Mesh; + +// Shader +typedef struct Shader { + unsigned int id; // Shader program id + int *locs; // Shader locations array (RL_MAX_SHADER_LOCATIONS) +} Shader; + +// MaterialMap +typedef struct MaterialMap { + Texture2D texture; // Material map texture + Color color; // Material map color + float value; // Material map value +} MaterialMap; + +// Material, includes shader and maps +typedef struct Material { + Shader shader; // Material shader + MaterialMap *maps; // Material maps array (MAX_MATERIAL_MAPS) + float params[4]; // Material generic parameters (if required) +} Material; + +// Transform, vertex transformation data +typedef struct Transform { + Vector3 translation; // Translation + Quaternion rotation; // Rotation + Vector3 scale; // Scale +} Transform; + +// Bone, skeletal animation bone +typedef struct BoneInfo { + char name[32]; // Bone name + int parent; // Bone parent +} BoneInfo; + +// Model, meshes, materials and animation data +typedef struct Model { + Matrix transform; // Local transform matrix + + int meshCount; // Number of meshes + int materialCount; // Number of materials + Mesh *meshes; // Meshes array + Material *materials; // Materials array + int *meshMaterial; // Mesh material number + + // Animation data + int boneCount; // Number of bones + BoneInfo *bones; // Bones information (skeleton) + Transform *bindPose; // Bones base transformation (pose) +} Model; + +// ModelAnimation +typedef struct ModelAnimation { + int boneCount; // Number of bones + int frameCount; // Number of animation frames + BoneInfo *bones; // Bones information (skeleton) + Transform **framePoses; // Poses array by frame + char name[32]; // Animation name +} ModelAnimation; + +// Ray, ray for raycasting +typedef struct Ray { + Vector3 position; // Ray position (origin) + Vector3 direction; // Ray direction +} Ray; + +// RayCollision, ray hit information +typedef struct RayCollision { + bool hit; // Did the ray hit something? + float distance; // Distance to the nearest hit + Vector3 point; // Point of the nearest hit + Vector3 normal; // Surface normal of hit +} RayCollision; + +// BoundingBox +typedef struct BoundingBox { + Vector3 min; // Minimum vertex box-corner + Vector3 max; // Maximum vertex box-corner +} BoundingBox; + +// Wave, audio wave data +typedef struct Wave { + unsigned int frameCount; // Total number of frames (considering channels) + unsigned int sampleRate; // Frequency (samples per second) + unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + unsigned int channels; // Number of channels (1-mono, 2-stereo, ...) + void *data; // Buffer data pointer +} Wave; + +// Opaque structs declaration +// NOTE: Actual structs are defined internally in raudio module +typedef struct rAudioBuffer rAudioBuffer; +typedef struct rAudioProcessor rAudioProcessor; + +// AudioStream, custom audio stream +typedef struct AudioStream { + rAudioBuffer *buffer; // Pointer to internal data used by the audio system + rAudioProcessor *processor; // Pointer to internal data processor, useful for audio effects + + unsigned int sampleRate; // Frequency (samples per second) + unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) + unsigned int channels; // Number of channels (1-mono, 2-stereo, ...) +} AudioStream; + +// Sound +typedef struct Sound { + AudioStream stream; // Audio stream + unsigned int frameCount; // Total number of frames (considering channels) +} Sound; + +// Music, audio stream, anything longer than ~10 seconds should be streamed +typedef struct Music { + AudioStream stream; // Audio stream + unsigned int frameCount; // Total number of frames (considering channels) + bool looping; // Music looping enable + + int ctxType; // Type of music context (audio filetype) + void *ctxData; // Audio context data, depends on type +} Music; + +// VrDeviceInfo, Head-Mounted-Display device parameters +typedef struct VrDeviceInfo { + int hResolution; // Horizontal resolution in pixels + int vResolution; // Vertical resolution in pixels + float hScreenSize; // Horizontal size in meters + float vScreenSize; // Vertical size in meters + float vScreenCenter; // Screen center in meters + float eyeToScreenDistance; // Distance between eye and display in meters + float lensSeparationDistance; // Lens separation distance in meters + float interpupillaryDistance; // IPD (distance between pupils) in meters + float lensDistortionValues[4]; // Lens distortion constant parameters + float chromaAbCorrection[4]; // Chromatic aberration correction parameters +} VrDeviceInfo; + +// VrStereoConfig, VR stereo rendering configuration for simulator +typedef struct VrStereoConfig { + Matrix projection[2]; // VR projection matrices (per eye) + Matrix viewOffset[2]; // VR view offset matrices (per eye) + float leftLensCenter[2]; // VR left lens center + float rightLensCenter[2]; // VR right lens center + float leftScreenCenter[2]; // VR left screen center + float rightScreenCenter[2]; // VR right screen center + float scale[2]; // VR distortion scale + float scaleIn[2]; // VR distortion scale in +} VrStereoConfig; + +// File path list +typedef struct FilePathList { + unsigned int capacity; // Filepaths max entries + unsigned int count; // Filepaths entries count + char **paths; // Filepaths entries +} FilePathList; + +// Automation event +typedef struct AutomationEvent { + unsigned int frame; // Event frame + unsigned int type; // Event type (AutomationEventType) + int params[4]; // Event parameters (if required) +} AutomationEvent; + +// Automation event list +typedef struct AutomationEventList { + unsigned int capacity; // Events max entries (MAX_AUTOMATION_EVENTS) + unsigned int count; // Events entries count + AutomationEvent *events; // Events entries +} AutomationEventList; + +//---------------------------------------------------------------------------------- +// Enumerators Definition +//---------------------------------------------------------------------------------- +// System/Window config flags +// NOTE: Every bit registers one state (use it with bit masks) +// By default all flags are set to 0 +typedef enum { + FLAG_VSYNC_HINT = 0x00000040, // Set to try enabling V-Sync on GPU + FLAG_FULLSCREEN_MODE = 0x00000002, // Set to run program in fullscreen + FLAG_WINDOW_RESIZABLE = 0x00000004, // Set to allow resizable window + FLAG_WINDOW_UNDECORATED = 0x00000008, // Set to disable window decoration (frame and buttons) + FLAG_WINDOW_HIDDEN = 0x00000080, // Set to hide window + FLAG_WINDOW_MINIMIZED = 0x00000200, // Set to minimize window (iconify) + FLAG_WINDOW_MAXIMIZED = 0x00000400, // Set to maximize window (expanded to monitor) + FLAG_WINDOW_UNFOCUSED = 0x00000800, // Set to window non focused + FLAG_WINDOW_TOPMOST = 0x00001000, // Set to window always on top + FLAG_WINDOW_ALWAYS_RUN = 0x00000100, // Set to allow windows running while minimized + FLAG_WINDOW_TRANSPARENT = 0x00000010, // Set to allow transparent framebuffer + FLAG_WINDOW_HIGHDPI = 0x00002000, // Set to support HighDPI + FLAG_WINDOW_MOUSE_PASSTHROUGH = 0x00004000, // Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED + FLAG_BORDERLESS_WINDOWED_MODE = 0x00008000, // Set to run program in borderless windowed mode + FLAG_MSAA_4X_HINT = 0x00000020, // Set to try enabling MSAA 4X + FLAG_INTERLACED_HINT = 0x00010000 // Set to try enabling interlaced video format (for V3D) +} ConfigFlags; + +// Trace log level +// NOTE: Organized by priority level +typedef enum { + LOG_ALL = 0, // Display all logs + LOG_TRACE, // Trace logging, intended for internal use only + LOG_DEBUG, // Debug logging, used for internal debugging, it should be disabled on release builds + LOG_INFO, // Info logging, used for program execution info + LOG_WARNING, // Warning logging, used on recoverable failures + LOG_ERROR, // Error logging, used on unrecoverable failures + LOG_FATAL, // Fatal logging, used to abort program: exit(EXIT_FAILURE) + LOG_NONE // Disable logging +} TraceLogLevel; + +// Keyboard keys (US keyboard layout) +// NOTE: Use GetKeyPressed() to allow redefining +// required keys for alternative layouts +typedef enum { + KEY_NULL = 0, // Key: NULL, used for no key pressed + // Alphanumeric keys + KEY_APOSTROPHE = 39, // Key: ' + KEY_COMMA = 44, // Key: , + KEY_MINUS = 45, // Key: - + KEY_PERIOD = 46, // Key: . + KEY_SLASH = 47, // Key: / + KEY_ZERO = 48, // Key: 0 + KEY_ONE = 49, // Key: 1 + KEY_TWO = 50, // Key: 2 + KEY_THREE = 51, // Key: 3 + KEY_FOUR = 52, // Key: 4 + KEY_FIVE = 53, // Key: 5 + KEY_SIX = 54, // Key: 6 + KEY_SEVEN = 55, // Key: 7 + KEY_EIGHT = 56, // Key: 8 + KEY_NINE = 57, // Key: 9 + KEY_SEMICOLON = 59, // Key: ; + KEY_EQUAL = 61, // Key: = + KEY_A = 65, // Key: A | a + KEY_B = 66, // Key: B | b + KEY_C = 67, // Key: C | c + KEY_D = 68, // Key: D | d + KEY_E = 69, // Key: E | e + KEY_F = 70, // Key: F | f + KEY_G = 71, // Key: G | g + KEY_H = 72, // Key: H | h + KEY_I = 73, // Key: I | i + KEY_J = 74, // Key: J | j + KEY_K = 75, // Key: K | k + KEY_L = 76, // Key: L | l + KEY_M = 77, // Key: M | m + KEY_N = 78, // Key: N | n + KEY_O = 79, // Key: O | o + KEY_P = 80, // Key: P | p + KEY_Q = 81, // Key: Q | q + KEY_R = 82, // Key: R | r + KEY_S = 83, // Key: S | s + KEY_T = 84, // Key: T | t + KEY_U = 85, // Key: U | u + KEY_V = 86, // Key: V | v + KEY_W = 87, // Key: W | w + KEY_X = 88, // Key: X | x + KEY_Y = 89, // Key: Y | y + KEY_Z = 90, // Key: Z | z + KEY_LEFT_BRACKET = 91, // Key: [ + KEY_BACKSLASH = 92, // Key: '\' + KEY_RIGHT_BRACKET = 93, // Key: ] + KEY_GRAVE = 96, // Key: ` + // Function keys + KEY_SPACE = 32, // Key: Space + KEY_ESCAPE = 256, // Key: Esc + KEY_ENTER = 257, // Key: Enter + KEY_TAB = 258, // Key: Tab + KEY_BACKSPACE = 259, // Key: Backspace + KEY_INSERT = 260, // Key: Ins + KEY_DELETE = 261, // Key: Del + KEY_RIGHT = 262, // Key: Cursor right + KEY_LEFT = 263, // Key: Cursor left + KEY_DOWN = 264, // Key: Cursor down + KEY_UP = 265, // Key: Cursor up + KEY_PAGE_UP = 266, // Key: Page up + KEY_PAGE_DOWN = 267, // Key: Page down + KEY_HOME = 268, // Key: Home + KEY_END = 269, // Key: End + KEY_CAPS_LOCK = 280, // Key: Caps lock + KEY_SCROLL_LOCK = 281, // Key: Scroll down + KEY_NUM_LOCK = 282, // Key: Num lock + KEY_PRINT_SCREEN = 283, // Key: Print screen + KEY_PAUSE = 284, // Key: Pause + KEY_F1 = 290, // Key: F1 + KEY_F2 = 291, // Key: F2 + KEY_F3 = 292, // Key: F3 + KEY_F4 = 293, // Key: F4 + KEY_F5 = 294, // Key: F5 + KEY_F6 = 295, // Key: F6 + KEY_F7 = 296, // Key: F7 + KEY_F8 = 297, // Key: F8 + KEY_F9 = 298, // Key: F9 + KEY_F10 = 299, // Key: F10 + KEY_F11 = 300, // Key: F11 + KEY_F12 = 301, // Key: F12 + KEY_LEFT_SHIFT = 340, // Key: Shift left + KEY_LEFT_CONTROL = 341, // Key: Control left + KEY_LEFT_ALT = 342, // Key: Alt left + KEY_LEFT_SUPER = 343, // Key: Super left + KEY_RIGHT_SHIFT = 344, // Key: Shift right + KEY_RIGHT_CONTROL = 345, // Key: Control right + KEY_RIGHT_ALT = 346, // Key: Alt right + KEY_RIGHT_SUPER = 347, // Key: Super right + KEY_KB_MENU = 348, // Key: KB menu + // Keypad keys + KEY_KP_0 = 320, // Key: Keypad 0 + KEY_KP_1 = 321, // Key: Keypad 1 + KEY_KP_2 = 322, // Key: Keypad 2 + KEY_KP_3 = 323, // Key: Keypad 3 + KEY_KP_4 = 324, // Key: Keypad 4 + KEY_KP_5 = 325, // Key: Keypad 5 + KEY_KP_6 = 326, // Key: Keypad 6 + KEY_KP_7 = 327, // Key: Keypad 7 + KEY_KP_8 = 328, // Key: Keypad 8 + KEY_KP_9 = 329, // Key: Keypad 9 + KEY_KP_DECIMAL = 330, // Key: Keypad . + KEY_KP_DIVIDE = 331, // Key: Keypad / + KEY_KP_MULTIPLY = 332, // Key: Keypad * + KEY_KP_SUBTRACT = 333, // Key: Keypad - + KEY_KP_ADD = 334, // Key: Keypad + + KEY_KP_ENTER = 335, // Key: Keypad Enter + KEY_KP_EQUAL = 336, // Key: Keypad = + // Android key buttons + KEY_BACK = 4, // Key: Android back button + KEY_MENU = 82, // Key: Android menu button + KEY_VOLUME_UP = 24, // Key: Android volume up button + KEY_VOLUME_DOWN = 25 // Key: Android volume down button +} KeyboardKey; + +// Add backwards compatibility support for deprecated names +#define MOUSE_LEFT_BUTTON MOUSE_BUTTON_LEFT +#define MOUSE_RIGHT_BUTTON MOUSE_BUTTON_RIGHT +#define MOUSE_MIDDLE_BUTTON MOUSE_BUTTON_MIDDLE + +// Mouse buttons +typedef enum { + MOUSE_BUTTON_LEFT = 0, // Mouse button left + MOUSE_BUTTON_RIGHT = 1, // Mouse button right + MOUSE_BUTTON_MIDDLE = 2, // Mouse button middle (pressed wheel) + MOUSE_BUTTON_SIDE = 3, // Mouse button side (advanced mouse device) + MOUSE_BUTTON_EXTRA = 4, // Mouse button extra (advanced mouse device) + MOUSE_BUTTON_FORWARD = 5, // Mouse button forward (advanced mouse device) + MOUSE_BUTTON_BACK = 6, // Mouse button back (advanced mouse device) +} MouseButton; + +// Mouse cursor +typedef enum { + MOUSE_CURSOR_DEFAULT = 0, // Default pointer shape + MOUSE_CURSOR_ARROW = 1, // Arrow shape + MOUSE_CURSOR_IBEAM = 2, // Text writing cursor shape + MOUSE_CURSOR_CROSSHAIR = 3, // Cross shape + MOUSE_CURSOR_POINTING_HAND = 4, // Pointing hand cursor + MOUSE_CURSOR_RESIZE_EW = 5, // Horizontal resize/move arrow shape + MOUSE_CURSOR_RESIZE_NS = 6, // Vertical resize/move arrow shape + MOUSE_CURSOR_RESIZE_NWSE = 7, // Top-left to bottom-right diagonal resize/move arrow shape + MOUSE_CURSOR_RESIZE_NESW = 8, // The top-right to bottom-left diagonal resize/move arrow shape + MOUSE_CURSOR_RESIZE_ALL = 9, // The omnidirectional resize/move cursor shape + MOUSE_CURSOR_NOT_ALLOWED = 10 // The operation-not-allowed shape +} MouseCursor; + +// Gamepad buttons +typedef enum { + GAMEPAD_BUTTON_UNKNOWN = 0, // Unknown button, just for error checking + GAMEPAD_BUTTON_LEFT_FACE_UP, // Gamepad left DPAD up button + GAMEPAD_BUTTON_LEFT_FACE_RIGHT, // Gamepad left DPAD right button + GAMEPAD_BUTTON_LEFT_FACE_DOWN, // Gamepad left DPAD down button + GAMEPAD_BUTTON_LEFT_FACE_LEFT, // Gamepad left DPAD left button + GAMEPAD_BUTTON_RIGHT_FACE_UP, // Gamepad right button up (i.e. PS3: Triangle, Xbox: Y) + GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, // Gamepad right button right (i.e. PS3: Square, Xbox: X) + GAMEPAD_BUTTON_RIGHT_FACE_DOWN, // Gamepad right button down (i.e. PS3: Cross, Xbox: A) + GAMEPAD_BUTTON_RIGHT_FACE_LEFT, // Gamepad right button left (i.e. PS3: Circle, Xbox: B) + GAMEPAD_BUTTON_LEFT_TRIGGER_1, // Gamepad top/back trigger left (first), it could be a trailing button + GAMEPAD_BUTTON_LEFT_TRIGGER_2, // Gamepad top/back trigger left (second), it could be a trailing button + GAMEPAD_BUTTON_RIGHT_TRIGGER_1, // Gamepad top/back trigger right (one), it could be a trailing button + GAMEPAD_BUTTON_RIGHT_TRIGGER_2, // Gamepad top/back trigger right (second), it could be a trailing button + GAMEPAD_BUTTON_MIDDLE_LEFT, // Gamepad center buttons, left one (i.e. PS3: Select) + GAMEPAD_BUTTON_MIDDLE, // Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX) + GAMEPAD_BUTTON_MIDDLE_RIGHT, // Gamepad center buttons, right one (i.e. PS3: Start) + GAMEPAD_BUTTON_LEFT_THUMB, // Gamepad joystick pressed button left + GAMEPAD_BUTTON_RIGHT_THUMB // Gamepad joystick pressed button right +} GamepadButton; + +// Gamepad axis +typedef enum { + GAMEPAD_AXIS_LEFT_X = 0, // Gamepad left stick X axis + GAMEPAD_AXIS_LEFT_Y = 1, // Gamepad left stick Y axis + GAMEPAD_AXIS_RIGHT_X = 2, // Gamepad right stick X axis + GAMEPAD_AXIS_RIGHT_Y = 3, // Gamepad right stick Y axis + GAMEPAD_AXIS_LEFT_TRIGGER = 4, // Gamepad back trigger left, pressure level: [1..-1] + GAMEPAD_AXIS_RIGHT_TRIGGER = 5 // Gamepad back trigger right, pressure level: [1..-1] +} GamepadAxis; + +// Material map index +typedef enum { + MATERIAL_MAP_ALBEDO = 0, // Albedo material (same as: MATERIAL_MAP_DIFFUSE) + MATERIAL_MAP_METALNESS, // Metalness material (same as: MATERIAL_MAP_SPECULAR) + MATERIAL_MAP_NORMAL, // Normal material + MATERIAL_MAP_ROUGHNESS, // Roughness material + MATERIAL_MAP_OCCLUSION, // Ambient occlusion material + MATERIAL_MAP_EMISSION, // Emission material + MATERIAL_MAP_HEIGHT, // Heightmap material + MATERIAL_MAP_CUBEMAP, // Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MATERIAL_MAP_IRRADIANCE, // Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MATERIAL_MAP_PREFILTER, // Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP) + MATERIAL_MAP_BRDF // Brdf material +} MaterialMapIndex; + +#define MATERIAL_MAP_DIFFUSE MATERIAL_MAP_ALBEDO +#define MATERIAL_MAP_SPECULAR MATERIAL_MAP_METALNESS + +// Shader location index +typedef enum { + SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position + SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01 + SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02 + SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal + SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent + SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color + SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection + SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform) + SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection + SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform) + SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal + SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view + SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color + SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color + SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color + SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE) + SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR) + SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal + SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness + SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion + SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission + SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height + SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap + SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance + SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter + SHADER_LOC_MAP_BRDF // Shader location: sampler2d texture: brdf +} ShaderLocationIndex; + +#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO +#define SHADER_LOC_MAP_SPECULAR SHADER_LOC_MAP_METALNESS + +// Shader uniform data type +typedef enum { + SHADER_UNIFORM_FLOAT = 0, // Shader uniform type: float + SHADER_UNIFORM_VEC2, // Shader uniform type: vec2 (2 float) + SHADER_UNIFORM_VEC3, // Shader uniform type: vec3 (3 float) + SHADER_UNIFORM_VEC4, // Shader uniform type: vec4 (4 float) + SHADER_UNIFORM_INT, // Shader uniform type: int + SHADER_UNIFORM_IVEC2, // Shader uniform type: ivec2 (2 int) + SHADER_UNIFORM_IVEC3, // Shader uniform type: ivec3 (3 int) + SHADER_UNIFORM_IVEC4, // Shader uniform type: ivec4 (4 int) + SHADER_UNIFORM_SAMPLER2D // Shader uniform type: sampler2d +} ShaderUniformDataType; + +// Shader attribute data types +typedef enum { + SHADER_ATTRIB_FLOAT = 0, // Shader attribute type: float + SHADER_ATTRIB_VEC2, // Shader attribute type: vec2 (2 float) + SHADER_ATTRIB_VEC3, // Shader attribute type: vec3 (3 float) + SHADER_ATTRIB_VEC4 // Shader attribute type: vec4 (4 float) +} ShaderAttributeDataType; + +// Pixel formats +// NOTE: Support depends on OpenGL version and platform +typedef enum { + PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) + PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels) + PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp + PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp + PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) + PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) + PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp + PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float) + PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) + PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) + PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float) + PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float) + PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float) + PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) + PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) + PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp + PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp + PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp + PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp + PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp + PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp +} PixelFormat; + +// Texture parameters: filter mode +// NOTE 1: Filtering considers mipmaps if available in the texture +// NOTE 2: Filter is accordingly set for minification and magnification +typedef enum { + TEXTURE_FILTER_POINT = 0, // No filter, just pixel approximation + TEXTURE_FILTER_BILINEAR, // Linear filtering + TEXTURE_FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps) + TEXTURE_FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x + TEXTURE_FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x + TEXTURE_FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x +} TextureFilter; + +// Texture parameters: wrap mode +typedef enum { + TEXTURE_WRAP_REPEAT = 0, // Repeats texture in tiled mode + TEXTURE_WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode + TEXTURE_WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode + TEXTURE_WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode +} TextureWrap; + +// Cubemap layouts +typedef enum { + CUBEMAP_LAYOUT_AUTO_DETECT = 0, // Automatically detect layout type + CUBEMAP_LAYOUT_LINE_VERTICAL, // Layout is defined by a vertical line with faces + CUBEMAP_LAYOUT_LINE_HORIZONTAL, // Layout is defined by a horizontal line with faces + CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR, // Layout is defined by a 3x4 cross with cubemap faces + CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE, // Layout is defined by a 4x3 cross with cubemap faces + CUBEMAP_LAYOUT_PANORAMA // Layout is defined by a panorama image (equirrectangular map) +} CubemapLayout; + +// Font type, defines generation method +typedef enum { + FONT_DEFAULT = 0, // Default font generation, anti-aliased + FONT_BITMAP, // Bitmap font generation, no anti-aliasing + FONT_SDF // SDF font generation, requires external shader +} FontType; + +// Color blending modes (pre-defined) +typedef enum { + BLEND_ALPHA = 0, // Blend textures considering alpha (default) + BLEND_ADDITIVE, // Blend textures adding colors + BLEND_MULTIPLIED, // Blend textures multiplying colors + BLEND_ADD_COLORS, // Blend textures adding colors (alternative) + BLEND_SUBTRACT_COLORS, // Blend textures subtracting colors (alternative) + BLEND_ALPHA_PREMULTIPLY, // Blend premultiplied textures considering alpha + BLEND_CUSTOM, // Blend textures using custom src/dst factors (use rlSetBlendFactors()) + BLEND_CUSTOM_SEPARATE // Blend textures using custom rgb/alpha separate src/dst factors (use rlSetBlendFactorsSeparate()) +} BlendMode; + +// Gesture +// NOTE: Provided as bit-wise flags to enable only desired gestures +typedef enum { + GESTURE_NONE = 0, // No gesture + GESTURE_TAP = 1, // Tap gesture + GESTURE_DOUBLETAP = 2, // Double tap gesture + GESTURE_HOLD = 4, // Hold gesture + GESTURE_DRAG = 8, // Drag gesture + GESTURE_SWIPE_RIGHT = 16, // Swipe right gesture + GESTURE_SWIPE_LEFT = 32, // Swipe left gesture + GESTURE_SWIPE_UP = 64, // Swipe up gesture + GESTURE_SWIPE_DOWN = 128, // Swipe down gesture + GESTURE_PINCH_IN = 256, // Pinch in gesture + GESTURE_PINCH_OUT = 512 // Pinch out gesture +} Gesture; + +// Camera system modes +typedef enum { + CAMERA_CUSTOM = 0, // Custom camera + CAMERA_FREE, // Free camera + CAMERA_ORBITAL, // Orbital camera + CAMERA_FIRST_PERSON, // First person camera + CAMERA_THIRD_PERSON // Third person camera +} CameraMode; + +// Camera projection +typedef enum { + CAMERA_PERSPECTIVE = 0, // Perspective projection + CAMERA_ORTHOGRAPHIC // Orthographic projection +} CameraProjection; + +// N-patch layout +typedef enum { + NPATCH_NINE_PATCH = 0, // Npatch layout: 3x3 tiles + NPATCH_THREE_PATCH_VERTICAL, // Npatch layout: 1x3 tiles + NPATCH_THREE_PATCH_HORIZONTAL // Npatch layout: 3x1 tiles +} NPatchLayout; + +// Callbacks to hook some internal functions +// WARNING: These callbacks are intended for advance users +typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); // Logging: Redirect trace log messages +typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, int *dataSize); // FileIO: Load binary data +typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, int dataSize); // FileIO: Save binary data +typedef char *(*LoadFileTextCallback)(const char *fileName); // FileIO: Load text data +typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); // FileIO: Save text data + +//------------------------------------------------------------------------------------ +// Global Variables Definition +//------------------------------------------------------------------------------------ +// It's lonely here... + +//------------------------------------------------------------------------------------ +// Window and Graphics Device Functions (Module: core) +//------------------------------------------------------------------------------------ + +#if defined(__cplusplus) +extern "C" { // Prevents name mangling of functions +#endif + +// Window-related functions +RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context +RLAPI void CloseWindow(void); // Close window and unload OpenGL context +RLAPI bool WindowShouldClose(void); // Check if application should close (KEY_ESCAPE pressed or windows close icon clicked) +RLAPI bool IsWindowReady(void); // Check if window has been initialized successfully +RLAPI bool IsWindowFullscreen(void); // Check if window is currently fullscreen +RLAPI bool IsWindowHidden(void); // Check if window is currently hidden (only PLATFORM_DESKTOP) +RLAPI bool IsWindowMinimized(void); // Check if window is currently minimized (only PLATFORM_DESKTOP) +RLAPI bool IsWindowMaximized(void); // Check if window is currently maximized (only PLATFORM_DESKTOP) +RLAPI bool IsWindowFocused(void); // Check if window is currently focused (only PLATFORM_DESKTOP) +RLAPI bool IsWindowResized(void); // Check if window has been resized last frame +RLAPI bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled +RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags (only PLATFORM_DESKTOP) +RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags +RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) +RLAPI void ToggleBorderlessWindowed(void); // Toggle window state: borderless windowed (only PLATFORM_DESKTOP) +RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) +RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP) +RLAPI void RestoreWindow(void); // Set window state: not minimized/maximized (only PLATFORM_DESKTOP) +RLAPI void SetWindowIcon(Image image); // Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) +RLAPI void SetWindowIcons(Image *images, int count); // Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) +RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB) +RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP) +RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window +RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) +RLAPI void SetWindowMaxSize(int width, int height); // Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE) +RLAPI void SetWindowSize(int width, int height); // Set window dimensions +RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) +RLAPI void SetWindowFocused(void); // Set window focused (only PLATFORM_DESKTOP) +RLAPI void *GetWindowHandle(void); // Get native window handle +RLAPI int GetScreenWidth(void); // Get current screen width +RLAPI int GetScreenHeight(void); // Get current screen height +RLAPI int GetRenderWidth(void); // Get current render width (it considers HiDPI) +RLAPI int GetRenderHeight(void); // Get current render height (it considers HiDPI) +RLAPI int GetMonitorCount(void); // Get number of connected monitors +RLAPI int GetCurrentMonitor(void); // Get current connected monitor +RLAPI Vector2 GetMonitorPosition(int monitor); // Get specified monitor position +RLAPI int GetMonitorWidth(int monitor); // Get specified monitor width (current video mode used by monitor) +RLAPI int GetMonitorHeight(int monitor); // Get specified monitor height (current video mode used by monitor) +RLAPI int GetMonitorPhysicalWidth(int monitor); // Get specified monitor physical width in millimetres +RLAPI int GetMonitorPhysicalHeight(int monitor); // Get specified monitor physical height in millimetres +RLAPI int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate +RLAPI Vector2 GetWindowPosition(void); // Get window position XY on monitor +RLAPI Vector2 GetWindowScaleDPI(void); // Get window scale DPI factor +RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the specified monitor +RLAPI void SetClipboardText(const char *text); // Set clipboard text content +RLAPI const char *GetClipboardText(void); // Get clipboard text content +RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling +RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling + +// Cursor-related functions +RLAPI void ShowCursor(void); // Shows cursor +RLAPI void HideCursor(void); // Hides cursor +RLAPI bool IsCursorHidden(void); // Check if cursor is not visible +RLAPI void EnableCursor(void); // Enables cursor (unlock cursor) +RLAPI void DisableCursor(void); // Disables cursor (lock cursor) +RLAPI bool IsCursorOnScreen(void); // Check if cursor is on the screen + +// Drawing-related functions +RLAPI void ClearBackground(Color color); // Set background color (framebuffer clear color) +RLAPI void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing +RLAPI void EndDrawing(void); // End canvas drawing and swap buffers (double buffering) +RLAPI void BeginMode2D(Camera2D camera); // Begin 2D mode with custom camera (2D) +RLAPI void EndMode2D(void); // Ends 2D mode with custom camera +RLAPI void BeginMode3D(Camera3D camera); // Begin 3D mode with custom camera (3D) +RLAPI void EndMode3D(void); // Ends 3D mode and returns to default 2D orthographic mode +RLAPI void BeginTextureMode(RenderTexture2D target); // Begin drawing to render texture +RLAPI void EndTextureMode(void); // Ends drawing to render texture +RLAPI void BeginShaderMode(Shader shader); // Begin custom shader drawing +RLAPI void EndShaderMode(void); // End custom shader drawing (use default shader) +RLAPI void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied, subtract, custom) +RLAPI void EndBlendMode(void); // End blending mode (reset to default: alpha blending) +RLAPI void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing) +RLAPI void EndScissorMode(void); // End scissor mode +RLAPI void BeginVrStereoMode(VrStereoConfig config); // Begin stereo rendering (requires VR simulator) +RLAPI void EndVrStereoMode(void); // End stereo rendering (requires VR simulator) + +// VR stereo config functions for VR simulator +RLAPI VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); // Load VR stereo config for VR simulator device parameters +RLAPI void UnloadVrStereoConfig(VrStereoConfig config); // Unload VR stereo config + +// Shader management functions +// NOTE: Shader functionality is not available on OpenGL 1.1 +RLAPI Shader LoadShader(const char *vsFileName, const char *fsFileName); // Load shader from files and bind default locations +RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode); // Load shader from code strings and bind default locations +RLAPI bool IsShaderReady(Shader shader); // Check if a shader is ready +RLAPI int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location +RLAPI int GetShaderLocationAttrib(Shader shader, const char *attribName); // Get shader attribute location +RLAPI void SetShaderValue(Shader shader, int locIndex, const void *value, int uniformType); // Set shader uniform value +RLAPI void SetShaderValueV(Shader shader, int locIndex, const void *value, int uniformType, int count); // Set shader uniform value vector +RLAPI void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); // Set shader uniform value (matrix 4x4) +RLAPI void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); // Set shader uniform value for texture (sampler2d) +RLAPI void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM) + +// Screen-space-related functions +RLAPI Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Get a ray trace from mouse position +RLAPI Matrix GetCameraMatrix(Camera camera); // Get camera transform matrix (view matrix) +RLAPI Matrix GetCameraMatrix2D(Camera2D camera); // Get camera 2d transform matrix +RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Get the screen space position for a 3d world space position +RLAPI Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); // Get the world space position for a 2d camera screen space position +RLAPI Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); // Get size position for a 3d world space position +RLAPI Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Get the screen space position for a 2d camera world space position + +// Timing-related functions +RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum) +RLAPI float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time) +RLAPI double GetTime(void); // Get elapsed time in seconds since InitWindow() +RLAPI int GetFPS(void); // Get current FPS + +// Custom frame control functions +// NOTE: Those functions are intended for advance users that want full control over the frame processing +// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timing + PollInputEvents() +// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL +RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing) +RLAPI void PollInputEvents(void); // Register all input events +RLAPI void WaitTime(double seconds); // Wait for some time (halt program execution) + +// Random values generation functions +RLAPI void SetRandomSeed(unsigned int seed); // Set the seed for the random number generator +RLAPI int GetRandomValue(int min, int max); // Get a random value between min and max (both included) +RLAPI int *LoadRandomSequence(unsigned int count, int min, int max); // Load random values sequence, no values repeated +RLAPI void UnloadRandomSequence(int *sequence); // Unload random values sequence + +// Misc. functions +RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format) +RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS) +RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available) + +// NOTE: Following functions implemented in module [utils] +//------------------------------------------------------------------ +RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) +RLAPI void SetTraceLogLevel(int logLevel); // Set the current threshold (minimum) log level +RLAPI void *MemAlloc(unsigned int size); // Internal memory allocator +RLAPI void *MemRealloc(void *ptr, unsigned int size); // Internal memory reallocator +RLAPI void MemFree(void *ptr); // Internal memory free + +// Set custom callbacks +// WARNING: Callbacks setup is intended for advance users +RLAPI void SetTraceLogCallback(TraceLogCallback callback); // Set custom trace log +RLAPI void SetLoadFileDataCallback(LoadFileDataCallback callback); // Set custom file binary data loader +RLAPI void SetSaveFileDataCallback(SaveFileDataCallback callback); // Set custom file binary data saver +RLAPI void SetLoadFileTextCallback(LoadFileTextCallback callback); // Set custom file text data loader +RLAPI void SetSaveFileTextCallback(SaveFileTextCallback callback); // Set custom file text data saver + +// Files management functions +RLAPI unsigned char *LoadFileData(const char *fileName, int *dataSize); // Load file data as byte array (read) +RLAPI void UnloadFileData(unsigned char *data); // Unload file data allocated by LoadFileData() +RLAPI bool SaveFileData(const char *fileName, void *data, int dataSize); // Save data to file from byte array (write), returns true on success +RLAPI bool ExportDataAsCode(const unsigned char *data, int dataSize, const char *fileName); // Export data to code (.h), returns true on success +RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string +RLAPI void UnloadFileText(char *text); // Unload file text data allocated by LoadFileText() +RLAPI bool SaveFileText(const char *fileName, char *text); // Save text data to file (write), string must be '\0' terminated, returns true on success +//------------------------------------------------------------------ + +// File system functions +RLAPI bool FileExists(const char *fileName); // Check if file exists +RLAPI bool DirectoryExists(const char *dirPath); // Check if a directory path exists +RLAPI bool IsFileExtension(const char *fileName, const char *ext); // Check file extension (including point: .png, .wav) +RLAPI int GetFileLength(const char *fileName); // Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) +RLAPI const char *GetFileExtension(const char *fileName); // Get pointer to extension for a filename string (includes dot: '.png') +RLAPI const char *GetFileName(const char *filePath); // Get pointer to filename for a path string +RLAPI const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (uses static string) +RLAPI const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string) +RLAPI const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string) +RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string) +RLAPI const char *GetApplicationDirectory(void); // Get the directory of the running application (uses static string) +RLAPI bool ChangeDirectory(const char *dir); // Change working directory, return true on success +RLAPI bool IsPathFile(const char *path); // Check if a given path is a file or a directory +RLAPI FilePathList LoadDirectoryFiles(const char *dirPath); // Load directory filepaths +RLAPI FilePathList LoadDirectoryFilesEx(const char *basePath, const char *filter, bool scanSubdirs); // Load directory filepaths with extension filtering and recursive directory scan +RLAPI void UnloadDirectoryFiles(FilePathList files); // Unload filepaths +RLAPI bool IsFileDropped(void); // Check if a file has been dropped into window +RLAPI FilePathList LoadDroppedFiles(void); // Load dropped filepaths +RLAPI void UnloadDroppedFiles(FilePathList files); // Unload dropped filepaths +RLAPI long GetFileModTime(const char *fileName); // Get file modification time (last write time) + +// Compression/Encoding functionality +RLAPI unsigned char *CompressData(const unsigned char *data, int dataSize, int *compDataSize); // Compress data (DEFLATE algorithm), memory must be MemFree() +RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // Decompress data (DEFLATE algorithm), memory must be MemFree() +RLAPI char *EncodeDataBase64(const unsigned char *data, int dataSize, int *outputSize); // Encode data to Base64 string, memory must be MemFree() +RLAPI unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize); // Decode Base64 string data, memory must be MemFree() + +// Automation events functionality +RLAPI AutomationEventList LoadAutomationEventList(const char *fileName); // Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS +RLAPI void UnloadAutomationEventList(AutomationEventList *list); // Unload automation events list from file +RLAPI bool ExportAutomationEventList(AutomationEventList list, const char *fileName); // Export automation events list as text file +RLAPI void SetAutomationEventList(AutomationEventList *list); // Set automation event list to record to +RLAPI void SetAutomationEventBaseFrame(int frame); // Set automation event internal base frame to start recording +RLAPI void StartAutomationEventRecording(void); // Start recording automation events (AutomationEventList must be set) +RLAPI void StopAutomationEventRecording(void); // Stop recording automation events +RLAPI void PlayAutomationEvent(AutomationEvent event); // Play a recorded automation event + +//------------------------------------------------------------------------------------ +// Input Handling Functions (Module: core) +//------------------------------------------------------------------------------------ + +// Input-related functions: keyboard +RLAPI bool IsKeyPressed(int key); // Check if a key has been pressed once +RLAPI bool IsKeyPressedRepeat(int key); // Check if a key has been pressed again (Only PLATFORM_DESKTOP) +RLAPI bool IsKeyDown(int key); // Check if a key is being pressed +RLAPI bool IsKeyReleased(int key); // Check if a key has been released once +RLAPI bool IsKeyUp(int key); // Check if a key is NOT being pressed +RLAPI int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty +RLAPI int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty +RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC) + +// Input-related functions: gamepads +RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available +RLAPI const char *GetGamepadName(int gamepad); // Get gamepad internal name id +RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button has been pressed once +RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button is being pressed +RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button has been released once +RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Check if a gamepad button is NOT being pressed +RLAPI int GetGamepadButtonPressed(void); // Get the last gamepad button pressed +RLAPI int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad +RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis +RLAPI int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB) + +// Input-related functions: mouse +RLAPI bool IsMouseButtonPressed(int button); // Check if a mouse button has been pressed once +RLAPI bool IsMouseButtonDown(int button); // Check if a mouse button is being pressed +RLAPI bool IsMouseButtonReleased(int button); // Check if a mouse button has been released once +RLAPI bool IsMouseButtonUp(int button); // Check if a mouse button is NOT being pressed +RLAPI int GetMouseX(void); // Get mouse position X +RLAPI int GetMouseY(void); // Get mouse position Y +RLAPI Vector2 GetMousePosition(void); // Get mouse position XY +RLAPI Vector2 GetMouseDelta(void); // Get mouse delta between frames +RLAPI void SetMousePosition(int x, int y); // Set mouse position XY +RLAPI void SetMouseOffset(int offsetX, int offsetY); // Set mouse offset +RLAPI void SetMouseScale(float scaleX, float scaleY); // Set mouse scaling +RLAPI float GetMouseWheelMove(void); // Get mouse wheel movement for X or Y, whichever is larger +RLAPI Vector2 GetMouseWheelMoveV(void); // Get mouse wheel movement for both X and Y +RLAPI void SetMouseCursor(int cursor); // Set mouse cursor + +// Input-related functions: touch +RLAPI int GetTouchX(void); // Get touch position X for touch point 0 (relative to screen size) +RLAPI int GetTouchY(void); // Get touch position Y for touch point 0 (relative to screen size) +RLAPI Vector2 GetTouchPosition(int index); // Get touch position XY for a touch point index (relative to screen size) +RLAPI int GetTouchPointId(int index); // Get touch point identifier for given index +RLAPI int GetTouchPointCount(void); // Get number of touch points + +//------------------------------------------------------------------------------------ +// Gestures and Touch Handling Functions (Module: rgestures) +//------------------------------------------------------------------------------------ +RLAPI void SetGesturesEnabled(unsigned int flags); // Enable a set of gestures using flags +RLAPI bool IsGestureDetected(unsigned int gesture); // Check if a gesture have been detected +RLAPI int GetGestureDetected(void); // Get latest detected gesture +RLAPI float GetGestureHoldDuration(void); // Get gesture hold time in milliseconds +RLAPI Vector2 GetGestureDragVector(void); // Get gesture drag vector +RLAPI float GetGestureDragAngle(void); // Get gesture drag angle +RLAPI Vector2 GetGesturePinchVector(void); // Get gesture pinch delta +RLAPI float GetGesturePinchAngle(void); // Get gesture pinch angle + +//------------------------------------------------------------------------------------ +// Camera System Functions (Module: rcamera) +//------------------------------------------------------------------------------------ +RLAPI void UpdateCamera(Camera *camera, int mode); // Update camera position for selected mode +RLAPI void UpdateCameraPro(Camera *camera, Vector3 movement, Vector3 rotation, float zoom); // Update camera movement/rotation + +//------------------------------------------------------------------------------------ +// Basic Shapes Drawing Functions (Module: shapes) +//------------------------------------------------------------------------------------ +// Set texture and rectangle to be used on shapes drawing +// NOTE: It can be useful when using basic shapes and one single font, +// defining a font char white rectangle would allow drawing everything in a single draw call +RLAPI void SetShapesTexture(Texture2D texture, Rectangle source); // Set texture and rectangle to be used on shapes drawing + +// Basic shapes drawing functions +RLAPI void DrawPixel(int posX, int posY, Color color); // Draw a pixel +RLAPI void DrawPixelV(Vector2 position, Color color); // Draw a pixel (Vector version) +RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line +RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (using gl lines) +RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line (using triangles/quads) +RLAPI void DrawLineStrip(Vector2 *points, int pointCount, Color color); // Draw lines sequence (using gl lines) +RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw line segment cubic-bezier in-out interpolation +RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle +RLAPI void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw a piece of a circle +RLAPI void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw circle sector outline +RLAPI void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); // Draw a gradient-filled circle +RLAPI void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version) +RLAPI void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline +RLAPI void DrawCircleLinesV(Vector2 center, float radius, Color color); // Draw circle outline (Vector version) +RLAPI void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse +RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline +RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring +RLAPI void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring outline +RLAPI void DrawRectangle(int posX, int posY, int width, int height, Color color); // Draw a color-filled rectangle +RLAPI void DrawRectangleV(Vector2 position, Vector2 size, Color color); // Draw a color-filled rectangle (Vector version) +RLAPI void DrawRectangleRec(Rectangle rec, Color color); // Draw a color-filled rectangle +RLAPI void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); // Draw a color-filled rectangle with pro parameters +RLAPI void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2);// Draw a vertical-gradient-filled rectangle +RLAPI void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2);// Draw a horizontal-gradient-filled rectangle +RLAPI void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // Draw a gradient-filled rectangle with custom vertex colors +RLAPI void DrawRectangleLines(int posX, int posY, int width, int height, Color color); // Draw rectangle outline +RLAPI void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); // Draw rectangle outline with extended parameters +RLAPI void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle with rounded edges +RLAPI void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); // Draw rectangle with rounded edges outline +RLAPI void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) +RLAPI void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline (vertex in counter-clockwise order!) +RLAPI void DrawTriangleFan(Vector2 *points, int pointCount, Color color); // Draw a triangle fan defined by points (first vertex is the center) +RLAPI void DrawTriangleStrip(Vector2 *points, int pointCount, Color color); // Draw a triangle strip defined by points +RLAPI void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a regular polygon (Vector version) +RLAPI void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides +RLAPI void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); // Draw a polygon outline of n sides with extended parameters + +// Splines drawing functions +RLAPI void DrawSplineLinear(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Linear, minimum 2 points +RLAPI void DrawSplineBasis(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: B-Spline, minimum 4 points +RLAPI void DrawSplineCatmullRom(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Catmull-Rom, minimum 4 points +RLAPI void DrawSplineBezierQuadratic(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...] +RLAPI void DrawSplineBezierCubic(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...] +RLAPI void DrawSplineSegmentLinear(Vector2 p1, Vector2 p2, float thick, Color color); // Draw spline segment: Linear, 2 points +RLAPI void DrawSplineSegmentBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: B-Spline, 4 points +RLAPI void DrawSplineSegmentCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: Catmull-Rom, 4 points +RLAPI void DrawSplineSegmentBezierQuadratic(Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color); // Draw spline segment: Quadratic Bezier, 2 points, 1 control point +RLAPI void DrawSplineSegmentBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color); // Draw spline segment: Cubic Bezier, 2 points, 2 control points + +// Spline segment point evaluation functions, for a given t [0.0f .. 1.0f] +RLAPI Vector2 GetSplinePointLinear(Vector2 startPos, Vector2 endPos, float t); // Get (evaluate) spline point: Linear +RLAPI Vector2 GetSplinePointBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: B-Spline +RLAPI Vector2 GetSplinePointCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: Catmull-Rom +RLAPI Vector2 GetSplinePointBezierQuad(Vector2 p1, Vector2 c2, Vector2 p3, float t); // Get (evaluate) spline point: Quadratic Bezier +RLAPI Vector2 GetSplinePointBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t); // Get (evaluate) spline point: Cubic Bezier + +// Basic shapes collision detection functions +RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles +RLAPI bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles +RLAPI bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle +RLAPI bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle +RLAPI bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); // Check if point is inside circle +RLAPI bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); // Check if point is inside a triangle +RLAPI bool CheckCollisionPointPoly(Vector2 point, Vector2 *points, int pointCount); // Check if point is within a polygon described by array of vertices +RLAPI bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint); // Check the collision between two lines defined by two points each, returns collision point by reference +RLAPI bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold); // Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] +RLAPI Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision + +//------------------------------------------------------------------------------------ +// Texture Loading and Drawing Functions (Module: textures) +//------------------------------------------------------------------------------------ + +// Image loading functions +// NOTE: These functions do not require GPU access +RLAPI Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM) +RLAPI Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data +RLAPI Image LoadImageSvg(const char *fileNameOrString, int width, int height); // Load image from SVG file data or string with specified size +RLAPI Image LoadImageAnim(const char *fileName, int *frames); // Load image sequence from file (frames appended to image.data) +RLAPI Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. '.png' +RLAPI Image LoadImageFromTexture(Texture2D texture); // Load image from GPU texture data +RLAPI Image LoadImageFromScreen(void); // Load image from screen buffer and (screenshot) +RLAPI bool IsImageReady(Image image); // Check if an image is ready +RLAPI void UnloadImage(Image image); // Unload image from CPU memory (RAM) +RLAPI bool ExportImage(Image image, const char *fileName); // Export image data to file, returns true on success +RLAPI unsigned char *ExportImageToMemory(Image image, const char *fileType, int *fileSize); // Export image to memory buffer +RLAPI bool ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes, returns true on success + +// Image generation functions +RLAPI Image GenImageColor(int width, int height, Color color); // Generate image: plain color +RLAPI Image GenImageGradientLinear(int width, int height, int direction, Color start, Color end); // Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient +RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient +RLAPI Image GenImageGradientSquare(int width, int height, float density, Color inner, Color outer); // Generate image: square gradient +RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked +RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise +RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise +RLAPI Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm, bigger tileSize means bigger cells +RLAPI Image GenImageText(int width, int height, const char *text); // Generate image: grayscale image from text data + +// Image manipulation functions +RLAPI Image ImageCopy(Image image); // Create an image duplicate (useful for transformations) +RLAPI Image ImageFromImage(Image image, Rectangle rec); // Create an image from another image piece +RLAPI Image ImageText(const char *text, int fontSize, Color color); // Create an image from text (default font) +RLAPI Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint); // Create an image from text (custom sprite font) +RLAPI void ImageFormat(Image *image, int newFormat); // Convert image data to desired format +RLAPI void ImageToPOT(Image *image, Color fill); // Convert image to POT (power-of-two) +RLAPI void ImageCrop(Image *image, Rectangle crop); // Crop an image to a defined rectangle +RLAPI void ImageAlphaCrop(Image *image, float threshold); // Crop image depending on alpha value +RLAPI void ImageAlphaClear(Image *image, Color color, float threshold); // Clear alpha channel to desired color +RLAPI void ImageAlphaMask(Image *image, Image alphaMask); // Apply alpha mask to image +RLAPI void ImageAlphaPremultiply(Image *image); // Premultiply alpha channel +RLAPI void ImageBlurGaussian(Image *image, int blurSize); // Apply Gaussian blur using a box blur approximation +RLAPI void ImageResize(Image *image, int newWidth, int newHeight); // Resize image (Bicubic scaling algorithm) +RLAPI void ImageResizeNN(Image *image, int newWidth,int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) +RLAPI void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); // Resize canvas and fill with color +RLAPI void ImageMipmaps(Image *image); // Compute all mipmap levels for a provided image +RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) +RLAPI void ImageFlipVertical(Image *image); // Flip image vertically +RLAPI void ImageFlipHorizontal(Image *image); // Flip image horizontally +RLAPI void ImageRotate(Image *image, int degrees); // Rotate image by input angle in degrees (-359 to 359) +RLAPI void ImageRotateCW(Image *image); // Rotate image clockwise 90deg +RLAPI void ImageRotateCCW(Image *image); // Rotate image counter-clockwise 90deg +RLAPI void ImageColorTint(Image *image, Color color); // Modify image color: tint +RLAPI void ImageColorInvert(Image *image); // Modify image color: invert +RLAPI void ImageColorGrayscale(Image *image); // Modify image color: grayscale +RLAPI void ImageColorContrast(Image *image, float contrast); // Modify image color: contrast (-100 to 100) +RLAPI void ImageColorBrightness(Image *image, int brightness); // Modify image color: brightness (-255 to 255) +RLAPI void ImageColorReplace(Image *image, Color color, Color replace); // Modify image color: replace color +RLAPI Color *LoadImageColors(Image image); // Load color data from image as a Color array (RGBA - 32bit) +RLAPI Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorCount); // Load colors palette from image as a Color array (RGBA - 32bit) +RLAPI void UnloadImageColors(Color *colors); // Unload color data loaded with LoadImageColors() +RLAPI void UnloadImagePalette(Color *colors); // Unload colors palette loaded with LoadImagePalette() +RLAPI Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle +RLAPI Color GetImageColor(Image image, int x, int y); // Get image pixel color at (x, y) position + +// Image drawing functions +// NOTE: Image software-rendering functions (CPU) +RLAPI void ImageClearBackground(Image *dst, Color color); // Clear image background with given color +RLAPI void ImageDrawPixel(Image *dst, int posX, int posY, Color color); // Draw pixel within an image +RLAPI void ImageDrawPixelV(Image *dst, Vector2 position, Color color); // Draw pixel within an image (Vector version) +RLAPI void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw line within an image +RLAPI void ImageDrawLineV(Image *dst, Vector2 start, Vector2 end, Color color); // Draw line within an image (Vector version) +RLAPI void ImageDrawCircle(Image *dst, int centerX, int centerY, int radius, Color color); // Draw a filled circle within an image +RLAPI void ImageDrawCircleV(Image *dst, Vector2 center, int radius, Color color); // Draw a filled circle within an image (Vector version) +RLAPI void ImageDrawCircleLines(Image *dst, int centerX, int centerY, int radius, Color color); // Draw circle outline within an image +RLAPI void ImageDrawCircleLinesV(Image *dst, Vector2 center, int radius, Color color); // Draw circle outline within an image (Vector version) +RLAPI void ImageDrawRectangle(Image *dst, int posX, int posY, int width, int height, Color color); // Draw rectangle within an image +RLAPI void ImageDrawRectangleV(Image *dst, Vector2 position, Vector2 size, Color color); // Draw rectangle within an image (Vector version) +RLAPI void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); // Draw rectangle within an image +RLAPI void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); // Draw rectangle lines within an image +RLAPI void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); // Draw a source image within a destination image (tint applied to source) +RLAPI void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) within an image (destination) +RLAPI void ImageDrawTextEx(Image *dst, Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text (custom sprite font) within an image (destination) + +// Texture loading functions +// NOTE: These functions require GPU access +RLAPI Texture2D LoadTexture(const char *fileName); // Load texture from file into GPU memory (VRAM) +RLAPI Texture2D LoadTextureFromImage(Image image); // Load texture from image data +RLAPI TextureCubemap LoadTextureCubemap(Image image, int layout); // Load cubemap from image, multiple image cubemap layouts supported +RLAPI RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer) +RLAPI bool IsTextureReady(Texture2D texture); // Check if a texture is ready +RLAPI void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM) +RLAPI bool IsRenderTextureReady(RenderTexture2D target); // Check if a render texture is ready +RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM) +RLAPI void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data +RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data + +// Texture configuration functions +RLAPI void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture +RLAPI void SetTextureFilter(Texture2D texture, int filter); // Set texture scaling filter mode +RLAPI void SetTextureWrap(Texture2D texture, int wrap); // Set texture wrapping mode + +// Texture drawing functions +RLAPI void DrawTexture(Texture2D texture, int posX, int posY, Color tint); // Draw a Texture2D +RLAPI void DrawTextureV(Texture2D texture, Vector2 position, Color tint); // Draw a Texture2D with position defined as Vector2 +RLAPI void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters +RLAPI void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle +RLAPI void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters +RLAPI void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); // Draws a texture (or part of it) that stretches or shrinks nicely + +// Color/pixel related functions +RLAPI Color Fade(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f +RLAPI int ColorToInt(Color color); // Get hexadecimal value for a Color +RLAPI Vector4 ColorNormalize(Color color); // Get Color normalized as float [0..1] +RLAPI Color ColorFromNormalized(Vector4 normalized); // Get Color from normalized values [0..1] +RLAPI Vector3 ColorToHSV(Color color); // Get HSV values for a Color, hue [0..360], saturation/value [0..1] +RLAPI Color ColorFromHSV(float hue, float saturation, float value); // Get a Color from HSV values, hue [0..360], saturation/value [0..1] +RLAPI Color ColorTint(Color color, Color tint); // Get color multiplied with another color +RLAPI Color ColorBrightness(Color color, float factor); // Get color with brightness correction, brightness factor goes from -1.0f to 1.0f +RLAPI Color ColorContrast(Color color, float contrast); // Get color with contrast correction, contrast values between -1.0f and 1.0f +RLAPI Color ColorAlpha(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f +RLAPI Color ColorAlphaBlend(Color dst, Color src, Color tint); // Get src alpha-blended into dst color with tint +RLAPI Color GetColor(unsigned int hexValue); // Get Color structure from hexadecimal value +RLAPI Color GetPixelColor(void *srcPtr, int format); // Get Color from a source pixel pointer of certain format +RLAPI void SetPixelColor(void *dstPtr, Color color, int format); // Set color formatted into destination pixel pointer +RLAPI int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes for certain format + +//------------------------------------------------------------------------------------ +// Font Loading and Text Drawing Functions (Module: text) +//------------------------------------------------------------------------------------ + +// Font loading/unloading functions +RLAPI Font GetFontDefault(void); // Get the default Font +RLAPI Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM) +RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set +RLAPI Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style) +RLAPI Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf' +RLAPI bool IsFontReady(Font font); // Check if a font is ready +RLAPI GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount, int type); // Load font data for further use +RLAPI Image GenImageFontAtlas(const GlyphInfo *glyphs, Rectangle **glyphRecs, int glyphCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info +RLAPI void UnloadFontData(GlyphInfo *glyphs, int glyphCount); // Unload font chars info data (RAM) +RLAPI void UnloadFont(Font font); // Unload font from GPU memory (VRAM) +RLAPI bool ExportFontAsCode(Font font, const char *fileName); // Export font as code file, returns true on success + +// Text drawing functions +RLAPI void DrawFPS(int posX, int posY); // Draw current FPS +RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) +RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters +RLAPI void DrawTextPro(Font font, const char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); // Draw text using Font and pro parameters (rotation) +RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint) +RLAPI void DrawTextCodepoints(Font font, const int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint) + +// Text font info functions +RLAPI void SetTextLineSpacing(int spacing); // Set vertical line spacing when drawing with line-breaks +RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font +RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font +RLAPI int GetGlyphIndex(Font font, int codepoint); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found +RLAPI GlyphInfo GetGlyphInfo(Font font, int codepoint); // Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found +RLAPI Rectangle GetGlyphAtlasRec(Font font, int codepoint); // Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + +// Text codepoints management functions (unicode characters) +RLAPI char *LoadUTF8(const int *codepoints, int length); // Load UTF-8 text encoded from codepoints array +RLAPI void UnloadUTF8(char *text); // Unload UTF-8 text encoded from codepoints array +RLAPI int *LoadCodepoints(const char *text, int *count); // Load all codepoints from a UTF-8 text string, codepoints count returned by parameter +RLAPI void UnloadCodepoints(int *codepoints); // Unload codepoints data from memory +RLAPI int GetCodepointCount(const char *text); // Get total number of codepoints in a UTF-8 encoded string +RLAPI int GetCodepoint(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI int GetCodepointNext(const char *text, int *codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI int GetCodepointPrevious(const char *text, int *codepointSize); // Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI const char *CodepointToUTF8(int codepoint, int *utf8Size); // Encode one codepoint into UTF-8 byte array (array length returned as parameter) + +// Text strings management functions (no UTF-8 strings, only byte chars) +// NOTE: Some strings allocate memory internally for returned strings, just be careful! +RLAPI int TextCopy(char *dst, const char *src); // Copy one string to another, returns bytes copied +RLAPI bool TextIsEqual(const char *text1, const char *text2); // Check if two text string are equal +RLAPI unsigned int TextLength(const char *text); // Get text length, checks for '\0' ending +RLAPI const char *TextFormat(const char *text, ...); // Text formatting with variables (sprintf() style) +RLAPI const char *TextSubtext(const char *text, int position, int length); // Get a piece of a text string +RLAPI char *TextReplace(char *text, const char *replace, const char *by); // Replace text string (WARNING: memory must be freed!) +RLAPI char *TextInsert(const char *text, const char *insert, int position); // Insert text in a position (WARNING: memory must be freed!) +RLAPI const char *TextJoin(const char **textList, int count, const char *delimiter); // Join text strings with delimiter +RLAPI const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings +RLAPI void TextAppend(char *text, const char *append, int *position); // Append text at specific position and move cursor! +RLAPI int TextFindIndex(const char *text, const char *find); // Find first text occurrence within a string +RLAPI const char *TextToUpper(const char *text); // Get upper case version of provided string +RLAPI const char *TextToLower(const char *text); // Get lower case version of provided string +RLAPI const char *TextToPascal(const char *text); // Get Pascal case notation version of provided string +RLAPI int TextToInteger(const char *text); // Get integer value from text (negative values not supported) + +//------------------------------------------------------------------------------------ +// Basic 3d Shapes Drawing Functions (Module: models) +//------------------------------------------------------------------------------------ + +// Basic geometric 3D shapes drawing functions +RLAPI void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space +RLAPI void DrawPoint3D(Vector3 position, Color color); // Draw a point in 3D space, actually a small line +RLAPI void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); // Draw a circle in 3D world space +RLAPI void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) +RLAPI void DrawTriangleStrip3D(Vector3 *points, int pointCount, Color color); // Draw a triangle strip defined by points +RLAPI void DrawCube(Vector3 position, float width, float height, float length, Color color); // Draw cube +RLAPI void DrawCubeV(Vector3 position, Vector3 size, Color color); // Draw cube (Vector version) +RLAPI void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); // Draw cube wires +RLAPI void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); // Draw cube wires (Vector version) +RLAPI void DrawSphere(Vector3 centerPos, float radius, Color color); // Draw sphere +RLAPI void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere with extended parameters +RLAPI void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere wires +RLAPI void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone +RLAPI void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); // Draw a cylinder with base at startPos and top at endPos +RLAPI void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone wires +RLAPI void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); // Draw a cylinder wires with base at startPos and top at endPos +RLAPI void DrawCapsule(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); // Draw a capsule with the center of its sphere caps at startPos and endPos +RLAPI void DrawCapsuleWires(Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color); // Draw capsule wireframe with the center of its sphere caps at startPos and endPos +RLAPI void DrawPlane(Vector3 centerPos, Vector2 size, Color color); // Draw a plane XZ +RLAPI void DrawRay(Ray ray, Color color); // Draw a ray line +RLAPI void DrawGrid(int slices, float spacing); // Draw a grid (centered at (0, 0, 0)) + +//------------------------------------------------------------------------------------ +// Model 3d Loading and Drawing Functions (Module: models) +//------------------------------------------------------------------------------------ + +// Model management functions +RLAPI Model LoadModel(const char *fileName); // Load model from files (meshes and materials) +RLAPI Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material) +RLAPI bool IsModelReady(Model model); // Check if a model is ready +RLAPI void UnloadModel(Model model); // Unload model (including meshes) from memory (RAM and/or VRAM) +RLAPI BoundingBox GetModelBoundingBox(Model model); // Compute model bounding box limits (considers all meshes) + +// Model drawing functions +RLAPI void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set) +RLAPI void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters +RLAPI void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set) +RLAPI void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model wires (with texture if set) with extended parameters +RLAPI void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires) +RLAPI void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); // Draw a billboard texture +RLAPI void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); // Draw a billboard texture defined by source +RLAPI void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint); // Draw a billboard texture defined by source and rotation + +// Mesh management functions +RLAPI void UploadMesh(Mesh *mesh, bool dynamic); // Upload mesh vertex data in GPU and provide VAO/VBO ids +RLAPI void UpdateMeshBuffer(Mesh mesh, int index, const void *data, int dataSize, int offset); // Update mesh vertex data in GPU for a specific buffer index +RLAPI void UnloadMesh(Mesh mesh); // Unload mesh data from CPU and GPU +RLAPI void DrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform +RLAPI void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, int instances); // Draw multiple mesh instances with material and different transforms +RLAPI bool ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file, returns true on success +RLAPI BoundingBox GetMeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits +RLAPI void GenMeshTangents(Mesh *mesh); // Compute mesh tangents + +// Mesh generation functions +RLAPI Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh +RLAPI Mesh GenMeshPlane(float width, float length, int resX, int resZ); // Generate plane mesh (with subdivisions) +RLAPI Mesh GenMeshCube(float width, float height, float length); // Generate cuboid mesh +RLAPI Mesh GenMeshSphere(float radius, int rings, int slices); // Generate sphere mesh (standard sphere) +RLAPI Mesh GenMeshHemiSphere(float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap) +RLAPI Mesh GenMeshCylinder(float radius, float height, int slices); // Generate cylinder mesh +RLAPI Mesh GenMeshCone(float radius, float height, int slices); // Generate cone/pyramid mesh +RLAPI Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); // Generate torus mesh +RLAPI Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh +RLAPI Mesh GenMeshHeightmap(Image heightmap, Vector3 size); // Generate heightmap mesh from image data +RLAPI Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); // Generate cubes-based map mesh from image data + +// Material loading/unloading functions +RLAPI Material *LoadMaterials(const char *fileName, int *materialCount); // Load materials from model file +RLAPI Material LoadMaterialDefault(void); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) +RLAPI bool IsMaterialReady(Material material); // Check if a material is ready +RLAPI void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) +RLAPI void SetMaterialTexture(Material *material, int mapType, Texture2D texture); // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) +RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh + +// Model animations loading/unloading functions +RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file +RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose +RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data +RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data +RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match + +// Collision detection functions +RLAPI bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); // Check collision between two spheres +RLAPI bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Check collision between two bounding boxes +RLAPI bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); // Check collision between box and sphere +RLAPI RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); // Get collision info between ray and sphere +RLAPI RayCollision GetRayCollisionBox(Ray ray, BoundingBox box); // Get collision info between ray and box +RLAPI RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); // Get collision info between ray and mesh +RLAPI RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle +RLAPI RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4); // Get collision info between ray and quad + +//------------------------------------------------------------------------------------ +// Audio Loading and Playing Functions (Module: audio) +//------------------------------------------------------------------------------------ +typedef void (*AudioCallback)(void *bufferData, unsigned int frames); + +// Audio device management functions +RLAPI void InitAudioDevice(void); // Initialize audio device and context +RLAPI void CloseAudioDevice(void); // Close the audio device and context +RLAPI bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully +RLAPI void SetMasterVolume(float volume); // Set master volume (listener) +RLAPI float GetMasterVolume(void); // Get master volume (listener) + +// Wave/Sound loading/unloading functions +RLAPI Wave LoadWave(const char *fileName); // Load wave data from file +RLAPI Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load wave from memory buffer, fileType refers to extension: i.e. '.wav' +RLAPI bool IsWaveReady(Wave wave); // Checks if wave data is ready +RLAPI Sound LoadSound(const char *fileName); // Load sound from file +RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound from wave data +RLAPI Sound LoadSoundAlias(Sound source); // Create a new sound that shares the same sample data as the source sound, does not own the sound data +RLAPI bool IsSoundReady(Sound sound); // Checks if a sound is ready +RLAPI void UpdateSound(Sound sound, const void *data, int sampleCount); // Update sound buffer with new data +RLAPI void UnloadWave(Wave wave); // Unload wave data +RLAPI void UnloadSound(Sound sound); // Unload sound +RLAPI void UnloadSoundAlias(Sound alias); // Unload a sound alias (does not deallocate sample data) +RLAPI bool ExportWave(Wave wave, const char *fileName); // Export wave data to file, returns true on success +RLAPI bool ExportWaveAsCode(Wave wave, const char *fileName); // Export wave sample data to code (.h), returns true on success + +// Wave/Sound management functions +RLAPI void PlaySound(Sound sound); // Play a sound +RLAPI void StopSound(Sound sound); // Stop playing a sound +RLAPI void PauseSound(Sound sound); // Pause a sound +RLAPI void ResumeSound(Sound sound); // Resume a paused sound +RLAPI bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing +RLAPI void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level) +RLAPI void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level) +RLAPI void SetSoundPan(Sound sound, float pan); // Set pan for a sound (0.5 is center) +RLAPI Wave WaveCopy(Wave wave); // Copy a wave to a new wave +RLAPI void WaveCrop(Wave *wave, int initSample, int finalSample); // Crop a wave to defined samples range +RLAPI void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format +RLAPI float *LoadWaveSamples(Wave wave); // Load samples data from wave as a 32bit float data array +RLAPI void UnloadWaveSamples(float *samples); // Unload samples data loaded with LoadWaveSamples() + +// Music management functions +RLAPI Music LoadMusicStream(const char *fileName); // Load music stream from file +RLAPI Music LoadMusicStreamFromMemory(const char *fileType, const unsigned char *data, int dataSize); // Load music stream from data +RLAPI bool IsMusicReady(Music music); // Checks if a music stream is ready +RLAPI void UnloadMusicStream(Music music); // Unload music stream +RLAPI void PlayMusicStream(Music music); // Start music playing +RLAPI bool IsMusicStreamPlaying(Music music); // Check if music is playing +RLAPI void UpdateMusicStream(Music music); // Updates buffers for music streaming +RLAPI void StopMusicStream(Music music); // Stop music playing +RLAPI void PauseMusicStream(Music music); // Pause music playing +RLAPI void ResumeMusicStream(Music music); // Resume playing paused music +RLAPI void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds) +RLAPI void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level) +RLAPI void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level) +RLAPI void SetMusicPan(Music music, float pan); // Set pan for a music (0.5 is center) +RLAPI float GetMusicTimeLength(Music music); // Get music time length (in seconds) +RLAPI float GetMusicTimePlayed(Music music); // Get current music time played (in seconds) + +// AudioStream management functions +RLAPI AudioStream LoadAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Load audio stream (to stream raw audio pcm data) +RLAPI bool IsAudioStreamReady(AudioStream stream); // Checks if an audio stream is ready +RLAPI void UnloadAudioStream(AudioStream stream); // Unload audio stream and free memory +RLAPI void UpdateAudioStream(AudioStream stream, const void *data, int frameCount); // Update audio stream buffers with data +RLAPI bool IsAudioStreamProcessed(AudioStream stream); // Check if any audio stream buffers requires refill +RLAPI void PlayAudioStream(AudioStream stream); // Play audio stream +RLAPI void PauseAudioStream(AudioStream stream); // Pause audio stream +RLAPI void ResumeAudioStream(AudioStream stream); // Resume audio stream +RLAPI bool IsAudioStreamPlaying(AudioStream stream); // Check if audio stream is playing +RLAPI void StopAudioStream(AudioStream stream); // Stop audio stream +RLAPI void SetAudioStreamVolume(AudioStream stream, float volume); // Set volume for audio stream (1.0 is max level) +RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level) +RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (0.5 is centered) +RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams +RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data + +RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream, receives the samples as <float>s +RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream + +RLAPI void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as <float>s +RLAPI void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline + +#if defined(__cplusplus) +} +#endif + +#endif // RAYLIB_H diff --git a/raylib.c.v b/raylib.c.v @@ -0,0 +1,2312 @@ +module vraylib + +#flag -I @VMODROOT/c +#flag -l raylib + +#include "raylib.h" + +@[typedef] +struct C.Vector2 { +pub mut: + x f32 + y f32 +} + +pub type Vector2 = C.Vector2 + +@[typedef] +struct C.Vector3 { +pub mut: + x f32 + y f32 + z f32 +} + +pub type Vector3 = C.Vector3 + +@[typedef] +struct C.Vector4 { +pub mut: + x f32 + y f32 + z f32 + w f32 +} + +pub type Vector4 = C.Vector4 + +pub type Quaternion = C.Vector4 + +@[typedef] +struct C.Matrix { +pub mut: + m0 f32 + m4 f32 + m8 f32 + m12 f32 + m1 f32 + m5 f32 + m9 f32 + m13 f32 + m2 f32 + m6 f32 + m10 f32 + m14 f32 + m3 f32 + m7 f32 + m11 f32 + m15 f32 +} + +pub type Matrix = C.Matrix + +@[typedef] +struct C.Color { +pub mut: + r u8 + g u8 + b u8 + a u8 +} + +pub type Color = C.Color + +@[typedef] +struct C.Rectangle { +pub mut: + x f32 + y f32 + width f32 + height f32 +} + +pub type Rectangle = C.Rectangle + +@[typedef] +struct C.Image { +pub mut: + data voidptr + width int + height int + mipmaps int + format int +} + +pub type Image = C.Image + +@[typedef] +struct C.Texture { +pub mut: + id u32 + width int + height int + mipmaps int + format int +} + +pub type Texture = C.Texture + +pub type Texture2D = C.Texture +pub type TextureCubemap = C.Texture + +@[typedef] +struct C.RenderTexture { +pub mut: + id u32 + texture Texture + depth Texture +} + +pub type RenderTexture = C.RenderTexture + +pub type RenderTexture2D = C.RenderTexture + +@[typedef] +struct C.NPatchInfo { +pub mut: + source Rectangle + left int + top int + right int + bottom int + layout int +} + +pub type NPatchInfo = C.NPatchInfo + +@[typedef] +struct C.GlyphInfo { +pub mut: + value int + offsetX int + offsetY int + advanceX int + image Image +} + +pub type GlyphInfo = C.GlyphInfo + +@[typedef] +struct C.Font { +pub mut: + baseSize int + glyphCount int + glyphPadding int + texture Texture2D + recs &Rectangle + glyphs &GlyphInfo +} + +pub type Font = C.Font + +@[typedef] +struct C.Camera3D { +pub mut: + position Vector3 + target Vector3 + up Vector3 + fovy f32 + projection int +} + +pub type Camera3D = C.Camera3D + +pub type Camera = C.Camera3D + +@[typedef] +struct C.Camera2D { +pub mut: + offset Vector2 + target Vector2 + rotation f32 + zoom f32 +} + +pub type Camera2D = C.Camera2D + +@[typedef] +struct C.Mesh { +pub mut: + vertexCount int + triangleCount int + vertices &f32 + texcoords &f32 + texcoords2 &f32 + normals &f32 + tangents &f32 + colors &u8 + indices &u16 + animVertices &f32 + animNormals &f32 + boneIds &u8 + boneWeights &f32 + vaoId u32 + vboId &u32 +} + +pub type Mesh = C.Mesh + +@[typedef] +struct C.Shader { +pub mut: + id u32 + locs &int +} + +pub type Shader = C.Shader + +@[typedef] +struct C.MaterialMap { +pub mut: + texture Texture2D + color Color + value f32 +} + +pub type MaterialMap = C.MaterialMap + +@[typedef] +struct C.Material { +pub mut: + shader Shader + maps &MaterialMap + params [4]f32 +} + +pub type Material = C.Material + +@[typedef] +struct C.Transform { +pub mut: + translation Vector3 + rotation Quaternion + scale Vector3 +} + +pub type Transform = C.Transform + +@[typedef] +struct C.BoneInfo { +pub mut: + name [32]i8 + parent int +} + +pub type BoneInfo = C.BoneInfo + +@[typedef] +struct C.Model { +pub mut: + transform Matrix + meshCount int + materialCount int + meshes &Mesh + materials &Material + meshMaterial &int + boneCount int + bones &BoneInfo + bindPose &Transform +} + +pub type Model = C.Model + +@[typedef] +struct C.ModelAnimation { +pub mut: + boneCount int + frameCount int + bones &BoneInfo + framePoses &&Transform + name [32]i8 +} + +pub type ModelAnimation = C.ModelAnimation + +@[typedef] +struct C.Ray { +pub mut: + position Vector3 + direction Vector3 +} + +pub type Ray = C.Ray + +@[typedef] +struct C.RayCollision { +pub mut: + hit bool + distance f32 + point Vector3 + normal Vector3 +} + +pub type RayCollision = C.RayCollision + +@[typedef] +struct C.BoundingBox { +pub mut: + min Vector3 + max Vector3 +} + +pub type BoundingBox = C.BoundingBox + +@[typedef] +struct C.Wave { +pub mut: + frameCount u32 + sampleRate u32 + sampleSize u32 + channels u32 + data voidptr +} + +pub type Wave = C.Wave + +@[typedef] +struct C.AudioStream { +pub mut: + buffer C.rAudioBuffer + processor C.rAudioProcessor + sampleRate u32 + sampleSize u32 + channels u32 +} + +pub type AudioStream = C.AudioStream + +@[typedef] +struct C.Sound { +pub mut: + stream AudioStream + frameCount u32 +} + +pub type Sound = C.Sound + +@[typedef] +struct C.Music { +pub mut: + stream AudioStream + frameCount u32 + looping bool + ctxType int + ctxData voidptr +} + +pub type Music = C.Music + +@[typedef] +struct C.VrDeviceInfo { +pub mut: + hResolution int + vResolution int + hScreenSize f32 + vScreenSize f32 + eyeToScreenDistance f32 + lensSeparationDistance f32 + interpupillaryDistance f32 + lensDistortionValues [4]f32 + chromaAbCorrection [4]f32 +} + +pub type VrDeviceInfo = C.VrDeviceInfo + +@[typedef] +struct C.VrStereoConfig { +pub mut: + projection [2]Matrix + viewOffset [2]Matrix + leftLensCenter [2]f32 + rightLensCenter [2]f32 + leftScreenCenter [2]f32 + rightScreenCenter [2]f32 + scale [2]f32 + scaleIn [2]f32 +} + +pub type VrStereoConfig = C.VrStereoConfig + +@[typedef] +struct C.FilePathList { +pub mut: + capacity u32 + count u32 + paths &&u8 +} + +pub type FilePathList = C.FilePathList + +@[typedef] +struct C.AutomationEvent { +pub mut: + frame u32 + type_ u32 + params [4]int +} + +pub type AutomationEvent = C.AutomationEvent + +@[typedef] +struct C.AutomationEventList { +pub mut: + capacity u32 + count u32 + events &AutomationEvent +} + +pub type AutomationEventList = C.AutomationEventList + +pub const ( + lightgray = Color{ 200, 200, 200, 255 } + gray = Color{ 130, 130, 130, 255 } + darkgray = Color{ 80, 80, 80, 255 } + yellow = Color{ 253, 249, 0, 255 } + gold = Color{ 255, 203, 0, 255 } + orange = Color{ 255, 161, 0, 255 } + pink = Color{ 255, 109, 194, 255 } + red = Color{ 230, 41, 55, 255 } + maroon = Color{ 190, 33, 55, 255 } + green = Color{ 0, 228, 48, 255 } + lime = Color{ 0, 158, 47, 255 } + darkgreen = Color{ 0, 117, 44, 255 } + skyblue = Color{ 102, 191, 255, 255 } + blue = Color{ 0, 121, 241, 255 } + darkblue = Color{ 0, 82, 172, 255 } + purple = Color{ 200, 122, 255, 255 } + violet = Color{ 135, 60, 190, 255 } + darkpurple = Color{ 112, 31, 126, 255 } + beige = Color{ 211, 176, 131, 255 } + brown = Color{ 127, 106, 79, 255 } + darkbrown = Color{ 76, 63, 47, 255 } + + white = Color{ 255, 255, 255, 255 } + black = Color{ 0, 0, 0, 255 } + blank = Color{ 0, 0, 0, 0 } + magenta = Color{ 255, 0, 255, 255 } + raywhite = Color{ 245, 245, 245, 255 } +) + +pub enum ConfigFlags { + flag_vsync_hint = 64 + flag_fullscreen_mode = 2 + flag_window_resizable = 4 + flag_window_undecorated = 8 + flag_window_hidden = 128 + flag_window_minimized = 512 + flag_window_maximized = 1024 + flag_window_unfocused = 2048 + flag_window_topmost = 4096 + flag_window_always_run = 256 + flag_window_transparent = 16 + flag_window_highdpi = 8192 + flag_window_mouse_passthrough = 16384 + flag_borderless_windowed_mode = 32768 + flag_msaa_4x_hint = 32 + flag_interlaced_hint = 65536 +} + +pub enum TraceLogLevel { + log_all = 0 + log_trace + log_debug + log_info + log_warning + log_error + log_fatal + log_none +} + +pub enum KeyboardKey { + 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 = 5 + key_volume_up = 24 + key_volume_down = 25 +} + +pub enum MouseButton { + 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 +} + +pub enum MouseCursor { + 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 +} + +pub enum GamepadButton { + gamepad_button_unknown = 0 + gamepad_button_left_face_up + gamepad_button_left_face_right + gamepad_button_left_face_down + gamepad_button_left_face_left + gamepad_button_right_face_up + gamepad_button_right_face_right + gamepad_button_right_face_down + gamepad_button_right_face_left + gamepad_button_left_trigger_1 + gamepad_button_left_trigger_2 + gamepad_button_right_trigger_1 + gamepad_button_right_trigger_2 + gamepad_button_middle_left + gamepad_button_middle + gamepad_button_middle_right + gamepad_button_left_thumb + gamepad_button_right_thumb +} + +pub enum GamepadAxis { + 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 +} + +pub enum MaterialMapIndex { + material_map_albedo = 0 + material_map_metalness + material_map_normal + material_map_roughness + material_map_occlusion + material_map_emission + material_map_height + material_map_cubemap + material_map_irradiance + material_map_prefilter + material_map_brdf +} + +pub enum ShaderLocationIndex { + shader_loc_vertex_position = 0 + shader_loc_vertex_texcoord01 + shader_loc_vertex_texcoord02 + shader_loc_vertex_normal + shader_loc_vertex_tangent + shader_loc_vertex_color + shader_loc_matrix_mvp + shader_loc_matrix_view + shader_loc_matrix_projection + shader_loc_matrix_model + shader_loc_matrix_normal + shader_loc_vector_view + shader_loc_color_diffuse + shader_loc_color_specular + shader_loc_color_ambient + shader_loc_map_albedo + shader_loc_map_metalness + shader_loc_map_normal + shader_loc_map_roughness + shader_loc_map_occlusion + shader_loc_map_emission + shader_loc_map_height + shader_loc_map_cubemap + shader_loc_map_irradiance + shader_loc_map_prefilter + shader_loc_map_brdf +} + +pub enum ShaderUniformDataType { + shader_uniform_float = 0 + shader_uniform_vec2 + shader_uniform_vec3 + shader_uniform_vec4 + shader_uniform_int + shader_uniform_ivec2 + shader_uniform_ivec3 + shader_uniform_ivec4 + shader_uniform_sampler2d +} + +pub enum ShaderAttributeDataType { + shader_attrib_float = 0 + shader_attrib_vec2 + shader_attrib_vec3 + shader_attrib_vec4 +} + +pub enum PixelFormat { + pixelformat_uncompressed_grayscale = 1 + pixelformat_uncompressed_gray_alpha + pixelformat_uncompressed_r5g6b5 + pixelformat_uncompressed_r8g8b8 + pixelformat_uncompressed_r5g5b5a1 + pixelformat_uncompressed_r4g4b4a4 + pixelformat_uncompressed_r8g8b8a8 + pixelformat_uncompressed_r32 + pixelformat_uncompressed_r32g32b32 + pixelformat_uncompressed_r32g32b32a32 + pixelformat_uncompressed_r16 + pixelformat_uncompressed_r16g16b16 + pixelformat_uncompressed_r16g16b16a16 + pixelformat_compressed_dxt1_rgb + pixelformat_compressed_dxt1_rgba + pixelformat_compressed_dxt3_rgba + pixelformat_compressed_dxt5_rgba + pixelformat_compressed_etc1_rgb + pixelformat_compressed_etc2_rgb + pixelformat_compressed_etc2_eac_rgba + pixelformat_compressed_pvrt_rgb + pixelformat_compressed_pvrt_rgba + pixelformat_compressed_astc_4x4_rgba + pixelformat_compressed_astc_8x8_rgba +} + +pub enum TextureFilter { + texture_filter_point = 0 + texture_filter_bilinear + texture_filter_trilinear + texture_filter_anisotropic_4x + texture_filter_anisotropic_8x + texture_filter_anisotropic_16x +} + +pub enum TextureWrap { + texture_wrap_repeat = 0 + texture_wrap_clamp + texture_wrap_mirror_repeat + texture_wrap_mirror_clamp +} + +pub enum CubemapLayout { + cubemap_layout_auto_detect = 0 + cubemap_layout_line_vertical + cubemap_layout_line_horizontal + cubemap_layout_cross_three_by_four + cubemap_layout_cross_four_by_three + cubemap_layout_panorama +} + +pub enum FontType { + font_default = 0 + font_bitmap + font_sdf +} + +pub enum BlendMode { + blend_alpha = 0 + blend_additive + blend_multiplied + blend_add_colors + blend_subtract_colors + blend_alpha_premultiply + blend_custom + blend_custom_separate +} + +pub enum Gesture { + 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 +} + +pub enum CameraMode { + camera_custom = 0 + camera_free + camera_orbital + camera_first_person + camera_third_person +} + +pub enum CameraProjection { + camera_perspective = 0 + camera_orthographic +} + +pub enum NPatchLayout { + npatch_nine_patch = 0 + npatch_three_patch_vertical + npatch_three_patch_horizontal +} + +//pub type TraceLogCallback = fn (int, &u8, Va_list) + +pub type LoadFileDataCallback = fn (&u8, &int) &u8 + +pub type SaveFileDataCallback = fn (&u8, voidptr, int) bool + +pub type LoadFileTextCallback = fn (&u8) &u8 + +pub type SaveFileTextCallback = fn (&u8, &u8) bool + +pub type AudioCallback = fn (voidptr, u32) + +fn C.InitWindow(width int, height int, title &u8) + +@[inline] +pub fn init_window(width int, height int, title string) { + C.InitWindow(width, height, title.str) +} + +fn C.CloseWindow() + +@[inline] +pub fn close_window() { + C.CloseWindow() +} + +fn C.WindowShouldClose() bool + +@[inline] +pub fn window_should_close() bool { + return C.WindowShouldClose() +} + +fn C.SetWindowState(flags u32) + +@[inline] +pub fn set_window_state(flags u32) { + C.SetWindowState(flags) +} + +fn C.ClearWindowState(flags u32) + +@[inline] +pub fn clear_window_state(flags u32) { + C.ClearWindowState(flags) +} + +fn C.ToggleFullscreen() + +@[inline] +pub fn toggle_fullscreen() { + C.ToggleFullscreen() +} + +fn C.ToggleBorderlessWindowed() + +@[inline] +pub fn toggle_borderless_windowed() { + C.ToggleBorderlessWindowed() +} + +fn C.MaximizeWindow() + +@[inline] +pub fn maximize_window() { + C.MaximizeWindow() +} + +fn C.MinimizeWindow() + +@[inline] +pub fn minimize_window() { + C.MinimizeWindow() +} + +fn C.RestoreWindow() + +@[inline] +pub fn restore_window() { + C.RestoreWindow() +} + +fn C.SetWindowIcon(image Image) + +@[inline] +pub fn set_window_icon(image Image) { + C.SetWindowIcon(image) +} + +fn C.SetWindowIcons(images &Image, count int) + +@[inline] +pub fn set_window_icons(images []Image) { + C.SetWindowIcons(images.data, images.len) +} + +fn C.SetWindowTitle(title &i8) + +@[inline] +pub fn set_window_title(title &i8) { + C.SetWindowTitle(title) +} + +fn C.SetWindowPosition(x int, y int) + +@[inline] +pub fn set_window_position(x int, y int) { + C.SetWindowPosition(x, y) +} + +fn C.SetWindowMonitor(monitor int) + +@[inline] +pub fn set_window_monitor(monitor int) { + C.SetWindowMonitor(monitor) +} + +fn C.SetWindowMinSize(width int, height int) + +@[inline] +pub fn set_window_min_size(width int, height int) { + C.SetWindowMinSize(width, height) +} + +fn C.SetWindowMaxSize(width int, height int) + +@[inline] +pub fn set_window_max_size(width int, height int) { + C.SetWindowMaxSize(width, height) +} + +fn C.SetWindowSize(width int, height int) + +@[inline] +pub fn set_window_size(width int, height int) { + C.SetWindowSize(width, height) +} + +fn C.SetWindowOpacity(opacity f32) + +@[inline] +pub fn set_window_opacity(opacity f32) { + C.SetWindowOpacity(opacity) +} + +fn C.SetWindowFocused() + +@[inline] +pub fn set_window_focused() { + C.SetWindowFocused() +} + +fn C.GetWindowHandle() voidptr + +@[inline] +pub fn get_window_handle() voidptr { + return C.GetWindowHandle() +} + +fn C.GetScreenWidth() int + +@[inline] +pub fn get_screen_width() int { + return C.GetScreenWidth() +} + +fn C.GetScreenHeight() int + +@[inline] +pub fn get_screen_height() int { + return C.GetScreenHeight() +} + +fn C.GetRenderWidth() int + +@[inline] +pub fn get_render_width() int { + return C.GetRenderWidth() +} + +fn C.GetRenderHeight() int + +@[inline] +pub fn get_render_height() int { + return C.GetRenderHeight() +} + +fn C.GetMonitorCount() int + +@[inline] +pub fn get_monitor_count() int { + return C.GetMonitorCount() +} + +fn C.GetCurrentMonitor() int + +@[inline] +pub fn get_current_monitor() int { + return C.GetCurrentMonitor() +} + +fn C.GetMonitorPosition(monitor int) Vector2 + +@[inline] +pub fn get_monitor_position(monitor int) Vector2 { + return C.GetMonitorPosition(monitor) +} + +fn C.GetMonitorWidth(monitor int) int + +@[inline] +pub fn get_monitor_width(monitor int) int { + return C.GetMonitorWidth(monitor) +} + +fn C.GetMonitorHeight(monitor int) int + +@[inline] +pub fn get_monitor_height(monitor int) int { + return C.GetMonitorHeight(monitor) +} + +fn C.GetMonitorPhysicalWidth(monitor int) int + +@[inline] +pub fn get_monitor_physical_width(monitor int) int { + return C.GetMonitorPhysicalWidth(monitor) +} + +fn C.GetMonitorPhysicalHeight(monitor int) int + +@[inline] +pub fn get_monitor_physical_height(monitor int) int { + return C.GetMonitorPhysicalHeight(monitor) +} + +fn C.GetMonitorRefreshRate(monitor int) int + +@[inline] +pub fn get_monitor_refresh_rate(monitor int) int { + return C.GetMonitorRefreshRate(monitor) +} + +fn C.GetWindowPosition() Vector2 + +@[inline] +pub fn get_window_position() Vector2 { + return C.GetWindowPosition() +} + +fn C.GetWindowScaleDPI() Vector2 + +@[inline] +pub fn get_window_scale_dpi() Vector2 { + return C.GetWindowScaleDPI() +} + +fn C.GetMonitorName(monitor int) &i8 + +@[inline] +pub fn get_monitor_name(monitor int) &i8 { + return C.GetMonitorName(monitor) +} + +fn C.SetClipboardText(text &i8) + +@[inline] +pub fn set_clipboard_text(text &i8) { + C.SetClipboardText(text) +} + +fn C.GetClipboardText() &i8 + +@[inline] +pub fn get_clipboard_text() &i8 { + return C.GetClipboardText() +} + +fn C.EnableEventWaiting() + +@[inline] +pub fn enable_event_waiting() { + C.EnableEventWaiting() +} + +fn C.DisableEventWaiting() + +@[inline] +pub fn disable_event_waiting() { + C.DisableEventWaiting() +} + +fn C.ShowCursor() + +@[inline] +pub fn show_cursor() { + C.ShowCursor() +} + +fn C.HideCursor() + +@[inline] +pub fn hide_cursor() { + C.HideCursor() +} + +fn C.EnableCursor() + +@[inline] +pub fn enable_cursor() { + C.EnableCursor() +} + +fn C.DisableCursor() + +@[inline] +pub fn disable_cursor() { + C.DisableCursor() +} + +fn C.ClearBackground(color Color) + +@[inline] +pub fn clear_background(color Color) { + C.ClearBackground(color) +} + +fn C.BeginDrawing() + +@[inline] +pub fn begin_drawing() { + C.BeginDrawing() +} + +fn C.EndDrawing() + +@[inline] +pub fn end_drawing() { + C.EndDrawing() +} + +fn C.BeginMode2D(camera Camera2D) + +@[inline] +pub fn begin_mode_2d(camera Camera2D) { + C.BeginMode2D(camera) +} + +fn C.EndMode2D() + +@[inline] +pub fn end_mode_2d() { + C.EndMode2D() +} + +fn C.BeginMode3D(camera Camera3D) + +@[inline] +pub fn begin_mode_3d(camera Camera3D) { + C.BeginMode3D(camera) +} + +fn C.EndMode3D() + +@[inline] +pub fn end_mode_3d() { + C.EndMode3D() +} + +fn C.BeginTextureMode(target RenderTexture2D) + +@[inline] +pub fn begin_texture_mode(target RenderTexture2D) { + C.BeginTextureMode(target) +} + +fn C.EndTextureMode() + +@[inline] +pub fn end_texture_mode() { + C.EndTextureMode() +} + +fn C.BeginShaderMode(shader Shader) + +@[inline] +pub fn begin_shader_mode(shader Shader) { + C.BeginShaderMode(shader) +} + +fn C.EndShaderMode() + +@[inline] +pub fn end_shader_mode() { + C.EndShaderMode() +} + +fn C.BeginBlendMode(mode int) + +@[inline] +pub fn begin_blend_mode(mode int) { + C.BeginBlendMode(mode) +} + +fn C.EndBlendMode() + +@[inline] +pub fn end_blend_mode() { + C.EndBlendMode() +} + +fn C.BeginScissorMode(x int, y int, width int, height int) + +@[inline] +pub fn begin_scissor_mode(x int, y int, width int, height int) { + C.BeginScissorMode(x, y, width, height) +} + +fn C.EndScissorMode() + +@[inline] +pub fn end_scissor_mode() { + C.EndScissorMode() +} + +fn C.BeginVrStereoMode(config VrStereoConfig) + +@[inline] +pub fn begin_vr_stereo_mode(config VrStereoConfig) { + C.BeginVrStereoMode(config) +} + +fn C.EndVrStereoMode() + +@[inline] +pub fn end_vr_stereo_mode() { + C.EndVrStereoMode() +} + +fn C.LoadVrStereoConfig(device VrDeviceInfo) VrStereoConfig + +@[inline] +pub fn load_vr_stereo_config(device VrDeviceInfo) VrStereoConfig { + return C.LoadVrStereoConfig(device) +} + +fn C.UnloadVrStereoConfig(config VrStereoConfig) + +@[inline] +pub fn unload_vr_stereo_config(config VrStereoConfig) { + C.UnloadVrStereoConfig(config) +} + +fn C.LoadShader(vsfilename &i8, fsfilename &i8) Shader + +@[inline] +pub fn load_shader(vsfilename &i8, fsfilename &i8) Shader { + return C.LoadShader(vsfilename, fsfilename) +} + +fn C.LoadShaderFromMemory(vscode &i8, fscode &i8) Shader + +@[inline] +pub fn load_shader_from_memory(vscode &i8, fscode &i8) Shader { + return C.LoadShaderFromMemory(vscode, fscode) +} + +fn C.GetShaderLocation(shader Shader, uniformname &i8) int + +@[inline] +pub fn get_shader_location(shader Shader, uniformname &i8) int { + return C.GetShaderLocation(shader, uniformname) +} + +fn C.GetShaderLocationAttrib(shader Shader, attribname &i8) int + +@[inline] +pub fn get_shader_location_attrib(shader Shader, attribname &i8) int { + return C.GetShaderLocationAttrib(shader, attribname) +} + +fn C.SetShaderValue(shader Shader, locindex int, value voidptr, uniformtype int) + +@[inline] +pub fn set_shader_value(shader Shader, locindex int, value voidptr, uniformtype int) { + C.SetShaderValue(shader, locindex, value, uniformtype) +} + +fn C.SetShaderValueV(shader Shader, locindex int, value voidptr, uniformtype int, count int) + +@[inline] +pub fn set_shader_value_v(shader Shader, locindex int, value voidptr, uniformtype int, count int) { + C.SetShaderValueV(shader, locindex, value, uniformtype, count) +} + +fn C.SetShaderValueMatrix(shader Shader, locindex int, mat Matrix) + +@[inline] +pub fn set_shader_value_matrix(shader Shader, locindex int, mat Matrix) { + C.SetShaderValueMatrix(shader, locindex, mat) +} + +fn C.SetShaderValueTexture(shader Shader, locindex int, texture Texture2D) + +@[inline] +pub fn set_shader_value_texture(shader Shader, locindex int, texture Texture2D) { + C.SetShaderValueTexture(shader, locindex, texture) +} + +fn C.UnloadShader(shader Shader) + +@[inline] +pub fn unload_shader(shader Shader) { + C.UnloadShader(shader) +} + +fn C.GetMouseRay(mouseposition Vector2, camera Camera) Ray + +@[inline] +pub fn get_mouse_ray(mouseposition Vector2, camera Camera) Ray { + return C.GetMouseRay(mouseposition, camera) +} + +fn C.GetCameraMatrix(camera Camera) Matrix + +@[inline] +pub fn get_camera_matrix(camera Camera) Matrix { + return C.GetCameraMatrix(camera) +} + +fn C.GetCameraMatrix2D(camera Camera2D) Matrix + +@[inline] +pub fn get_camera_matrix_2d(camera Camera2D) Matrix { + return C.GetCameraMatrix2D(camera) +} + +fn C.GetWorldToScreen(position Vector3, camera Camera) Vector2 + +@[inline] +pub fn get_world_to_screen(position Vector3, camera Camera) Vector2 { + return C.GetWorldToScreen(position, camera) +} + +fn C.GetScreenToWorld2D(position Vector2, camera Camera2D) Vector2 + +@[inline] +pub fn get_screen_to_world_2d(position Vector2, camera Camera2D) Vector2 { + return C.GetScreenToWorld2D(position, camera) +} + +fn C.GetWorldToScreenEx(position Vector3, camera Camera, width int, height int) Vector2 + +@[inline] +pub fn get_world_to_screen_ex(position Vector3, camera Camera, width int, height int) Vector2 { + return C.GetWorldToScreenEx(position, camera, width, height) +} + +fn C.GetWorldToScreen2D(position Vector2, camera Camera2D) Vector2 + +@[inline] +pub fn get_world_to_screen_2d(position Vector2, camera Camera2D) Vector2 { + return C.GetWorldToScreen2D(position, camera) +} + +fn C.SetTargetFPS(fps int) + +@[inline] +pub fn set_target_fps(fps int) { + C.SetTargetFPS(fps) +} + +fn C.GetFrameTime() f32 + +@[inline] +pub fn get_frame_time() f32 { + return C.GetFrameTime() +} + +fn C.GetTime() f64 + +@[inline] +pub fn get_time() f64 { + return C.GetTime() +} + +fn C.GetFPS() int + +@[inline] +pub fn get_fps() int { + return C.GetFPS() +} + +fn C.SwapScreenBuffer() + +@[inline] +pub fn swap_screen_buffer() { + C.SwapScreenBuffer() +} + +fn C.PollInputEvents() + +@[inline] +pub fn poll_input_events() { + C.PollInputEvents() +} + +fn C.WaitTime(seconds f64) + +@[inline] +pub fn wait_time(seconds f64) { + C.WaitTime(seconds) +} + +fn C.SetRandomSeed(seed u32) + +@[inline] +pub fn set_random_seed(seed u32) { + C.SetRandomSeed(seed) +} + +fn C.GetRandomValue(min int, max int) int + +@[inline] +pub fn get_random_value(min int, max int) int { + return C.GetRandomValue(min, max) +} + +fn C.LoadRandomSequence(count u32, min int, max int) &int + +@[inline] +pub fn load_random_sequence(count u32, min int, max int) &int { + return C.LoadRandomSequence(count, min, max) +} + +fn C.UnloadRandomSequence(sequence &int) + +@[inline] +pub fn unload_random_sequence(sequence &int) { + C.UnloadRandomSequence(sequence) +} + +fn C.TakeScreenshot(filename &i8) + +@[inline] +pub fn take_screenshot(filename &i8) { + C.TakeScreenshot(filename) +} + +fn C.SetConfigFlags(flags u32) + +@[inline] +pub fn set_config_flags(flags u32) { + C.SetConfigFlags(flags) +} + +fn C.OpenURL(url &u8) + +@[inline] +pub fn open_url(url string) { + C.OpenURL(url.str) +} + +fn C.TraceLog(loglevel int, args ...&u8) + +@[inline] +pub fn trace_log(loglevel int, text string) { + // The TraceLog is printf-like function. but since V supports + // string interpolation, we can just pass the string + C.TraceLog(loglevel, text.str) +} + +fn C.SetTraceLogLevel(loglevel int) + +@[inline] +pub fn set_trace_log_level(loglevel int) { + C.SetTraceLogLevel(loglevel) +} + +fn C.MemAlloc(size u32) voidptr + +@[inline] +pub fn mem_alloc(size u32) voidptr { + return C.MemAlloc(size) +} + +fn C.MemRealloc(ptr voidptr, size u32) voidptr + +@[inline] +pub fn mem_realloc(ptr voidptr, size u32) voidptr { + return C.MemRealloc(ptr, size) +} + +fn C.MemFree(ptr voidptr) + +@[inline] +pub fn mem_free(ptr voidptr) { + C.MemFree(ptr) +} + +/* +fn C.SetTraceLogCallback(callback TraceLogCallback) + +@[inline] +pub fn set_trace_log_callback(callback TraceLogCallback) { + C.SetTraceLogCallback(callback) +} +*/ + +fn C.SetLoadFileDataCallback(callback LoadFileDataCallback) + +@[inline] +pub fn set_load_file_data_callback(callback LoadFileDataCallback) { + C.SetLoadFileDataCallback(callback) +} + +fn C.SetSaveFileDataCallback(callback SaveFileDataCallback) + +@[inline] +pub fn set_save_file_data_callback(callback SaveFileDataCallback) { + C.SetSaveFileDataCallback(callback) +} + +fn C.SetLoadFileTextCallback(callback LoadFileTextCallback) + +fn C.SetSaveFileTextCallback(callback SaveFileTextCallback) + +fn C.LoadFileData(filename &i8, datasize &int) &u8 + +fn C.UnloadFileData(data &u8) + +fn C.LoadFileText(filename &i8) &i8 + +fn C.UnloadFileText(text &i8) + +fn C.GetFileLength(filename &i8) int + +fn C.GetFileExtension(filename &i8) &i8 + +fn C.GetFileName(filepath &i8) &i8 + +fn C.GetFileNameWithoutExt(filepath &i8) &i8 + +fn C.GetDirectoryPath(filepath &i8) &i8 + +fn C.GetPrevDirectoryPath(dirpath &i8) &i8 + +fn C.GetWorkingDirectory() &i8 + +fn C.GetApplicationDirectory() &i8 + +fn C.LoadDirectoryFiles(dirpath &i8) FilePathList + +fn C.LoadDirectoryFilesEx(basepath &i8, filter &i8, scansubdirs bool) FilePathList + +fn C.UnloadDirectoryFiles(files FilePathList) + +fn C.LoadDroppedFiles() FilePathList + +fn C.UnloadDroppedFiles(files FilePathList) + +fn C.GetFileModTime(filename &i8) int + +fn C.CompressData(data &u8, datasize int, compdatasize &int) &u8 + +fn C.DecompressData(compdata &u8, compdatasize int, datasize &int) &u8 + +fn C.EncodeDataBase64(data &u8, datasize int, outputsize &int) &i8 + +fn C.DecodeDataBase64(data &u8, outputsize &int) &u8 + +fn C.LoadAutomationEventList(filename &i8) AutomationEventList + +fn C.UnloadAutomationEventList(list AutomationEventList) + +fn C.SetAutomationEventList(list &AutomationEventList) + +fn C.SetAutomationEventBaseFrame(frame int) + +fn C.StartAutomationEventRecording() + +fn C.StopAutomationEventRecording() + +fn C.PlayAutomationEvent(event AutomationEvent) + +fn C.GetKeyPressed() int + +fn C.GetCharPressed() int + +fn C.SetExitKey(key int) + +fn C.GetGamepadName(gamepad int) &i8 + +fn C.GetGamepadButtonPressed() int + +fn C.GetGamepadAxisCount(gamepad int) int + +fn C.GetGamepadAxisMovement(gamepad int, axis int) f32 + +fn C.SetGamepadMappings(mappings &i8) int + +fn C.GetMouseX() int + +fn C.GetMouseY() int + +fn C.GetMousePosition() Vector2 + +fn C.GetMouseDelta() Vector2 + +fn C.SetMousePosition(x int, y int) + +fn C.SetMouseOffset(offsetx int, offsety int) + +fn C.SetMouseScale(scalex f32, scaley f32) + +fn C.GetMouseWheelMove() f32 + +fn C.GetMouseWheelMoveV() Vector2 + +fn C.SetMouseCursor(cursor int) + +fn C.GetTouchX() int + +fn C.GetTouchY() int + +fn C.GetTouchPosition(index int) Vector2 + +fn C.GetTouchPointId(index int) int + +fn C.GetTouchPointCount() int + +fn C.SetGesturesEnabled(flags u32) + +fn C.GetGestureDetected() int + +fn C.GetGestureHoldDuration() f32 + +fn C.GetGestureDragVector() Vector2 + +fn C.GetGestureDragAngle() f32 + +fn C.GetGesturePinchVector() Vector2 + +fn C.GetGesturePinchAngle() f32 + +fn C.UpdateCamera(camera &Camera, mode int) + +fn C.UpdateCameraPro(camera &Camera, movement Vector3, rotation Vector3, zoom f32) + +fn C.SetShapesTexture(texture Texture2D, source Rectangle) + +fn C.GetShapesTexture() Texture2D + +fn C.GetShapesTextureRectangle() Rectangle + +fn C.DrawPixel(posx int, posy int, color Color) + +fn C.DrawPixelV(position Vector2, color Color) + +fn C.DrawLine(startposx int, startposy int, endposx int, endposy int, color Color) + +fn C.DrawLineV(startpos Vector2, endpos Vector2, color Color) + +fn C.DrawLineEx(startpos Vector2, endpos Vector2, thick f32, color Color) + +fn C.DrawLineStrip(points &Vector2, pointcount int, color Color) + +fn C.DrawLineBezier(startpos Vector2, endpos Vector2, thick f32, color Color) + +fn C.DrawCircle(centerx int, centery int, radius f32, color Color) + +fn C.DrawCircleSector(center Vector2, radius f32, startangle f32, endangle f32, segments int, color Color) + +fn C.DrawCircleSectorLines(center Vector2, radius f32, startangle f32, endangle f32, segments int, color Color) + +fn C.DrawCircleGradient(centerx int, centery int, radius f32, color1 Color, color2 Color) + +fn C.DrawCircleV(center Vector2, radius f32, color Color) + +fn C.DrawCircleLines(centerx int, centery int, radius f32, color Color) + +fn C.DrawCircleLinesV(center Vector2, radius f32, color Color) + +fn C.DrawEllipse(centerx int, centery int, radiush f32, radiusv f32, color Color) + +fn C.DrawEllipseLines(centerx int, centery int, radiush f32, radiusv f32, color Color) + +fn C.DrawRing(center Vector2, innerradius f32, outerradius f32, startangle f32, endangle f32, segments int, color Color) + +fn C.DrawRingLines(center Vector2, innerradius f32, outerradius f32, startangle f32, endangle f32, segments int, color Color) + +fn C.DrawRectangle(posx int, posy int, width int, height int, color Color) + +fn C.DrawRectangleV(position Vector2, size Vector2, color Color) + +fn C.DrawRectangleRec(rec Rectangle, color Color) + +fn C.DrawRectanglePro(rec Rectangle, origin Vector2, rotation f32, color Color) + +fn C.DrawRectangleGradientV(posx int, posy int, width int, height int, color1 Color, color2 Color) + +fn C.DrawRectangleGradientH(posx int, posy int, width int, height int, color1 Color, color2 Color) + +fn C.DrawRectangleGradientEx(rec Rectangle, col1 Color, col2 Color, col3 Color, col4 Color) + +fn C.DrawRectangleLines(posx int, posy int, width int, height int, color Color) + +fn C.DrawRectangleLinesEx(rec Rectangle, linethick f32, color Color) + +fn C.DrawRectangleRounded(rec Rectangle, roundness f32, segments int, color Color) + +fn C.DrawRectangleRoundedLines(rec Rectangle, roundness f32, segments int, linethick f32, color Color) + +fn C.DrawTriangle(v1 Vector2, v2 Vector2, v3 Vector2, color Color) + +fn C.DrawTriangleLines(v1 Vector2, v2 Vector2, v3 Vector2, color Color) + +fn C.DrawTriangleFan(points &Vector2, pointcount int, color Color) + +fn C.DrawTriangleStrip(points &Vector2, pointcount int, color Color) + +fn C.DrawPoly(center Vector2, sides int, radius f32, rotation f32, color Color) + +fn C.DrawPolyLines(center Vector2, sides int, radius f32, rotation f32, color Color) + +fn C.DrawPolyLinesEx(center Vector2, sides int, radius f32, rotation f32, linethick f32, color Color) + +fn C.DrawSplineLinear(points &Vector2, pointcount int, thick f32, color Color) + +fn C.DrawSplineBasis(points &Vector2, pointcount int, thick f32, color Color) + +fn C.DrawSplineCatmullRom(points &Vector2, pointcount int, thick f32, color Color) + +fn C.DrawSplineBezierQuadratic(points &Vector2, pointcount int, thick f32, color Color) + +fn C.DrawSplineBezierCubic(points &Vector2, pointcount int, thick f32, color Color) + +fn C.DrawSplineSegmentLinear(p1 Vector2, p2 Vector2, thick f32, color Color) + +fn C.DrawSplineSegmentBasis(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, thick f32, color Color) + +fn C.DrawSplineSegmentCatmullRom(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, thick f32, color Color) + +fn C.DrawSplineSegmentBezierQuadratic(p1 Vector2, c2 Vector2, p3 Vector2, thick f32, color Color) + +fn C.DrawSplineSegmentBezierCubic(p1 Vector2, c2 Vector2, c3 Vector2, p4 Vector2, thick f32, color Color) + +fn C.GetSplinePointLinear(startpos Vector2, endpos Vector2, t f32) Vector2 + +fn C.GetSplinePointBasis(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, t f32) Vector2 + +fn C.GetSplinePointCatmullRom(p1 Vector2, p2 Vector2, p3 Vector2, p4 Vector2, t f32) Vector2 + +fn C.GetSplinePointBezierQuad(p1 Vector2, c2 Vector2, p3 Vector2, t f32) Vector2 + +fn C.GetSplinePointBezierCubic(p1 Vector2, c2 Vector2, c3 Vector2, p4 Vector2, t f32) Vector2 + +fn C.GetCollisionRec(rec1 Rectangle, rec2 Rectangle) Rectangle + +fn C.LoadImage(filename &i8) Image + +fn C.LoadImageRaw(filename &i8, width int, height int, format int, headersize int) Image + +fn C.LoadImageSvg(filenameorstring &i8, width int, height int) Image + +fn C.LoadImageAnim(filename &i8, frames &int) Image + +fn C.LoadImageAnimFromMemory(filetype &i8, filedata &u8, datasize int, frames &int) Image + +fn C.LoadImageFromMemory(filetype &i8, filedata &u8, datasize int) Image + +fn C.LoadImageFromTexture(texture Texture2D) Image + +fn C.LoadImageFromScreen() Image + +fn C.UnloadImage(image Image) + +fn C.ExportImageToMemory(image Image, filetype &i8, filesize &int) &u8 + +fn C.GenImageColor(width int, height int, color Color) Image + +fn C.GenImageGradientLinear(width int, height int, direction int, start Color, end Color) Image + +fn C.GenImageGradientRadial(width int, height int, density f32, inner Color, outer Color) Image + +fn C.GenImageGradientSquare(width int, height int, density f32, inner Color, outer Color) Image + +fn C.GenImageChecked(width int, height int, checksx int, checksy int, col1 Color, col2 Color) Image + +fn C.GenImageWhiteNoise(width int, height int, factor f32) Image + +fn C.GenImagePerlinNoise(width int, height int, offsetx int, offsety int, scale f32) Image + +fn C.GenImageCellular(width int, height int, tilesize int) Image + +fn C.GenImageText(width int, height int, text &i8) Image + +fn C.ImageCopy(image Image) Image + +fn C.ImageFromImage(image Image, rec Rectangle) Image + +fn C.ImageText(text &i8, fontsize int, color Color) Image + +fn C.ImageTextEx(font Font, text &i8, fontsize f32, spacing f32, tint Color) Image + +fn C.ImageFormat(image &Image, newformat int) + +fn C.ImageToPOT(image &Image, fill Color) + +fn C.ImageCrop(image &Image, crop Rectangle) + +fn C.ImageAlphaCrop(image &Image, threshold f32) + +fn C.ImageAlphaClear(image &Image, color Color, threshold f32) + +fn C.ImageAlphaMask(image &Image, alphamask Image) + +fn C.ImageAlphaPremultiply(image &Image) + +fn C.ImageBlurGaussian(image &Image, blursize int) + +fn C.ImageKernelConvolution(image &Image, kernel &f32, kernelsize int) + +fn C.ImageResize(image &Image, newwidth int, newheight int) + +fn C.ImageResizeNN(image &Image, newwidth int, newheight int) + +fn C.ImageResizeCanvas(image &Image, newwidth int, newheight int, offsetx int, offsety int, fill Color) + +fn C.ImageMipmaps(image &Image) + +fn C.ImageDither(image &Image, rbpp int, gbpp int, bbpp int, abpp int) + +fn C.ImageFlipVertical(image &Image) + +fn C.ImageFlipHorizontal(image &Image) + +fn C.ImageRotate(image &Image, degrees int) + +fn C.ImageRotateCW(image &Image) + +fn C.ImageRotateCCW(image &Image) + +fn C.ImageColorTint(image &Image, color Color) + +fn C.ImageColorInvert(image &Image) + +fn C.ImageColorGrayscale(image &Image) + +fn C.ImageColorContrast(image &Image, contrast f32) + +fn C.ImageColorBrightness(image &Image, brightness int) + +fn C.ImageColorReplace(image &Image, color Color, replace Color) + +fn C.LoadImageColors(image Image) &Color + +fn C.LoadImagePalette(image Image, maxpalettesize int, colorcount &int) &Color + +fn C.UnloadImageColors(colors &Color) + +fn C.UnloadImagePalette(colors &Color) + +fn C.GetImageAlphaBorder(image Image, threshold f32) Rectangle + +fn C.GetImageColor(image Image, x int, y int) Color + +fn C.ImageClearBackground(dst &Image, color Color) + +fn C.ImageDrawPixel(dst &Image, posx int, posy int, color Color) + +fn C.ImageDrawPixelV(dst &Image, position Vector2, color Color) + +fn C.ImageDrawLine(dst &Image, startposx int, startposy int, endposx int, endposy int, color Color) + +fn C.ImageDrawLineV(dst &Image, start Vector2, end Vector2, color Color) + +fn C.ImageDrawCircle(dst &Image, centerx int, centery int, radius int, color Color) + +fn C.ImageDrawCircleV(dst &Image, center Vector2, radius int, color Color) + +fn C.ImageDrawCircleLines(dst &Image, centerx int, centery int, radius int, color Color) + +fn C.ImageDrawCircleLinesV(dst &Image, center Vector2, radius int, color Color) + +fn C.ImageDrawRectangle(dst &Image, posx int, posy int, width int, height int, color Color) + +fn C.ImageDrawRectangleV(dst &Image, position Vector2, size Vector2, color Color) + +fn C.ImageDrawRectangleRec(dst &Image, rec Rectangle, color Color) + +fn C.ImageDrawRectangleLines(dst &Image, rec Rectangle, thick int, color Color) + +fn C.ImageDraw(dst &Image, src Image, srcrec Rectangle, dstrec Rectangle, tint Color) + +fn C.ImageDrawText(dst &Image, text &i8, posx int, posy int, fontsize int, color Color) + +fn C.ImageDrawTextEx(dst &Image, font Font, text &i8, position Vector2, fontsize f32, spacing f32, tint Color) + +fn C.LoadTexture(filename &i8) Texture2D + +fn C.LoadTextureFromImage(image Image) Texture2D + +fn C.LoadTextureCubemap(image Image, layout int) TextureCubemap + +fn C.LoadRenderTexture(width int, height int) RenderTexture2D + +fn C.UnloadTexture(texture Texture2D) + +fn C.UnloadRenderTexture(target RenderTexture2D) + +fn C.UpdateTexture(texture Texture2D, pixels voidptr) + +fn C.UpdateTextureRec(texture Texture2D, rec Rectangle, pixels voidptr) + +fn C.GenTextureMipmaps(texture &Texture2D) + +fn C.SetTextureFilter(texture Texture2D, filter int) + +fn C.SetTextureWrap(texture Texture2D, wrap int) + +fn C.DrawTexture(texture Texture2D, posx int, posy int, tint Color) + +fn C.DrawTextureV(texture Texture2D, position Vector2, tint Color) + +fn C.DrawTextureEx(texture Texture2D, position Vector2, rotation f32, scale f32, tint Color) + +fn C.DrawTextureRec(texture Texture2D, source Rectangle, position Vector2, tint Color) + +fn C.DrawTexturePro(texture Texture2D, source Rectangle, dest Rectangle, origin Vector2, rotation f32, tint Color) + +fn C.DrawTextureNPatch(texture Texture2D, npatchinfo NPatchInfo, dest Rectangle, origin Vector2, rotation f32, tint Color) + +fn C.Fade(color Color, alpha f32) Color + +fn C.ColorToInt(color Color) int + +fn C.ColorNormalize(color Color) Vector4 + +fn C.ColorFromNormalized(normalized Vector4) Color + +fn C.ColorToHSV(color Color) Vector3 + +fn C.ColorFromHSV(hue f32, saturation f32, value f32) Color + +fn C.ColorTint(color Color, tint Color) Color + +fn C.ColorBrightness(color Color, factor f32) Color + +fn C.ColorContrast(color Color, contrast f32) Color + +fn C.ColorAlpha(color Color, alpha f32) Color + +fn C.ColorAlphaBlend(dst Color, src Color, tint Color) Color + +fn C.GetColor(hexvalue u32) Color + +fn C.GetPixelColor(srcptr voidptr, format int) Color + +fn C.SetPixelColor(dstptr voidptr, color Color, format int) + +fn C.GetPixelDataSize(width int, height int, format int) int + +fn C.GetFontDefault() Font + +fn C.LoadFont(filename &i8) Font + +fn C.LoadFontEx(filename &i8, fontsize int, codepoints &int, codepointcount int) Font + +fn C.LoadFontFromImage(image Image, key Color, firstchar int) Font + +fn C.LoadFontFromMemory(filetype &i8, filedata &u8, datasize int, fontsize int, codepoints &int, codepointcount int) Font + +fn C.LoadFontData(filedata &u8, datasize int, fontsize int, codepoints &int, codepointcount int, type_ int) &GlyphInfo + +fn C.GenImageFontAtlas(glyphs &GlyphInfo, glyphrecs &&Rectangle, glyphcount int, fontsize int, padding int, packmethod int) Image + +fn C.UnloadFontData(glyphs &GlyphInfo, glyphcount int) + +fn C.UnloadFont(font Font) + +fn C.DrawFPS(posx int, posy int) + +fn C.DrawText(text &i8, posx int, posy int, fontsize int, color Color) + +@[inline] +pub fn draw_text(text string, posx int, posy int, fontsize int, color Color) { + C.DrawText(text.str, posx, posy, fontsize, color) +} + +fn C.DrawTextEx(font Font, text &i8, position Vector2, fontsize f32, spacing f32, tint Color) + +@[inline] +pub fn draw_text_ex(font Font, text string, position Vector2, fontsize f32, spacing f32, tint Color) { + C.DrawTextEx(font, text.str, position, fontsize, spacing, tint) +} + +fn C.DrawTextPro(font Font, text &i8, position Vector2, origin Vector2, rotation f32, fontsize f32, spacing f32, tint Color) + +fn C.DrawTextCodepoint(font Font, codepoint int, position Vector2, fontsize f32, tint Color) + +fn C.DrawTextCodepoints(font Font, codepoints &int, codepointcount int, position Vector2, fontsize f32, spacing f32, tint Color) + +fn C.SetTextLineSpacing(spacing int) + +fn C.MeasureText(text &i8, fontsize int) int + +fn C.MeasureTextEx(font Font, text &i8, fontsize f32, spacing f32) Vector2 + +fn C.GetGlyphIndex(font Font, codepoint int) int + +fn C.GetGlyphInfo(font Font, codepoint int) GlyphInfo + +fn C.GetGlyphAtlasRec(font Font, codepoint int) Rectangle + +fn C.LoadUTF8(codepoints &int, length int) &i8 + +fn C.UnloadUTF8(text &i8) + +fn C.LoadCodepoints(text &i8, count &int) &int + +fn C.UnloadCodepoints(codepoints &int) + +fn C.GetCodepointCount(text &i8) int + +fn C.GetCodepoint(text &i8, codepointsize &int) int + +fn C.GetCodepointNext(text &i8, codepointsize &int) int + +fn C.GetCodepointPrevious(text &i8, codepointsize &int) int + +fn C.CodepointToUTF8(codepoint int, utf8size &int) &i8 + +fn C.TextCopy(dst &i8, src &i8) int + +fn C.TextLength(text &i8) u32 + +fn C.TextFormat(text ...&i8) &i8 + +fn C.TextSubtext(text &i8, position int, length int) &i8 + +fn C.TextReplace(text &i8, replace &i8, by &i8) &i8 + +fn C.TextInsert(text &i8, insert &i8, position int) &i8 + +fn C.TextJoin(textlist &&u8, count int, delimiter &i8) &i8 + +fn C.TextSplit(text &i8, delimiter i8, count &int) &&u8 + +fn C.TextAppend(text &i8, append &i8, position &int) + +fn C.TextFindIndex(text &i8, find &i8) int + +fn C.TextToUpper(text &i8) &i8 + +fn C.TextToLower(text &i8) &i8 + +fn C.TextToPascal(text &i8) &i8 + +fn C.TextToInteger(text &i8) int + +fn C.TextToFloat(text &i8) f32 + +fn C.DrawLine3D(startpos Vector3, endpos Vector3, color Color) + +fn C.DrawPoint3D(position Vector3, color Color) + +fn C.DrawCircle3D(center Vector3, radius f32, rotationaxis Vector3, rotationangle f32, color Color) + +fn C.DrawTriangle3D(v1 Vector3, v2 Vector3, v3 Vector3, color Color) + +fn C.DrawTriangleStrip3D(points &Vector3, pointcount int, color Color) + +fn C.DrawCube(position Vector3, width f32, height f32, length f32, color Color) + +fn C.DrawCubeV(position Vector3, size Vector3, color Color) + +fn C.DrawCubeWires(position Vector3, width f32, height f32, length f32, color Color) + +fn C.DrawCubeWiresV(position Vector3, size Vector3, color Color) + +fn C.DrawSphere(centerpos Vector3, radius f32, color Color) + +fn C.DrawSphereEx(centerpos Vector3, radius f32, rings int, slices int, color Color) + +fn C.DrawSphereWires(centerpos Vector3, radius f32, rings int, slices int, color Color) + +fn C.DrawCylinder(position Vector3, radiustop f32, radiusbottom f32, height f32, slices int, color Color) + +fn C.DrawCylinderEx(startpos Vector3, endpos Vector3, startradius f32, endradius f32, sides int, color Color) + +fn C.DrawCylinderWires(position Vector3, radiustop f32, radiusbottom f32, height f32, slices int, color Color) + +fn C.DrawCylinderWiresEx(startpos Vector3, endpos Vector3, startradius f32, endradius f32, sides int, color Color) + +fn C.DrawCapsule(startpos Vector3, endpos Vector3, radius f32, slices int, rings int, color Color) + +fn C.DrawCapsuleWires(startpos Vector3, endpos Vector3, radius f32, slices int, rings int, color Color) + +fn C.DrawPlane(centerpos Vector3, size Vector2, color Color) + +fn C.DrawRay(ray Ray, color Color) + +fn C.DrawGrid(slices int, spacing f32) + +fn C.LoadModel(filename &i8) Model + +fn C.LoadModelFromMesh(mesh Mesh) Model + +fn C.UnloadModel(model Model) + +fn C.GetModelBoundingBox(model Model) BoundingBox + +fn C.DrawModel(model Model, position Vector3, scale f32, tint Color) + +fn C.DrawModelEx(model Model, position Vector3, rotationaxis Vector3, rotationangle f32, scale Vector3, tint Color) + +fn C.DrawModelWires(model Model, position Vector3, scale f32, tint Color) + +fn C.DrawModelWiresEx(model Model, position Vector3, rotationaxis Vector3, rotationangle f32, scale Vector3, tint Color) + +fn C.DrawBoundingBox(box BoundingBox, color Color) + +fn C.DrawBillboard(camera Camera, texture Texture2D, position Vector3, size f32, tint Color) + +fn C.DrawBillboardRec(camera Camera, texture Texture2D, source Rectangle, position Vector3, size Vector2, tint Color) + +fn C.DrawBillboardPro(camera Camera, texture Texture2D, source Rectangle, position Vector3, up Vector3, size Vector2, origin Vector2, rotation f32, tint Color) + +fn C.UploadMesh(mesh &Mesh, dynamic bool) + +fn C.UpdateMeshBuffer(mesh Mesh, index int, data voidptr, datasize int, offset int) + +fn C.UnloadMesh(mesh Mesh) + +fn C.DrawMesh(mesh Mesh, material Material, transform Matrix) + +fn C.DrawMeshInstanced(mesh Mesh, material Material, transforms &Matrix, instances int) + +fn C.GetMeshBoundingBox(mesh Mesh) BoundingBox + +fn C.GenMeshTangents(mesh &Mesh) + +fn C.GenMeshPoly(sides int, radius f32) Mesh + +fn C.GenMeshPlane(width f32, length f32, resx int, resz int) Mesh + +fn C.GenMeshCube(width f32, height f32, length f32) Mesh + +fn C.GenMeshSphere(radius f32, rings int, slices int) Mesh + +fn C.GenMeshHemiSphere(radius f32, rings int, slices int) Mesh + +fn C.GenMeshCylinder(radius f32, height f32, slices int) Mesh + +fn C.GenMeshCone(radius f32, height f32, slices int) Mesh + +fn C.GenMeshTorus(radius f32, size f32, radseg int, sides int) Mesh + +fn C.GenMeshKnot(radius f32, size f32, radseg int, sides int) Mesh + +fn C.GenMeshHeightmap(heightmap Image, size Vector3) Mesh + +fn C.GenMeshCubicmap(cubicmap Image, cubesize Vector3) Mesh + +fn C.LoadMaterials(filename &i8, materialcount &int) &Material + +fn C.LoadMaterialDefault() Material + +fn C.UnloadMaterial(material Material) + +fn C.SetMaterialTexture(material &Material, maptype int, texture Texture2D) + +fn C.SetModelMeshMaterial(model &Model, meshid int, materialid int) + +fn C.LoadModelAnimations(filename &i8, animcount &int) &ModelAnimation + +fn C.UpdateModelAnimation(model Model, anim ModelAnimation, frame int) + +fn C.UnloadModelAnimation(anim ModelAnimation) + +fn C.UnloadModelAnimations(animations &ModelAnimation, animcount int) + +fn C.GetRayCollisionSphere(ray Ray, center Vector3, radius f32) RayCollision + +fn C.GetRayCollisionBox(ray Ray, box BoundingBox) RayCollision + +fn C.GetRayCollisionMesh(ray Ray, mesh Mesh, transform Matrix) RayCollision + +fn C.GetRayCollisionTriangle(ray Ray, p1 Vector3, p2 Vector3, p3 Vector3) RayCollision + +fn C.GetRayCollisionQuad(ray Ray, p1 Vector3, p2 Vector3, p3 Vector3, p4 Vector3) RayCollision + +fn C.InitAudioDevice() + +fn C.CloseAudioDevice() + +fn C.SetMasterVolume(volume f32) + +fn C.GetMasterVolume() f32 + +fn C.LoadWave(filename &i8) Wave + +fn C.LoadWaveFromMemory(filetype &i8, filedata &u8, datasize int) Wave + +fn C.LoadSound(filename &i8) Sound + +fn C.LoadSoundFromWave(wave Wave) Sound + +fn C.LoadSoundAlias(source Sound) Sound + +fn C.UpdateSound(sound Sound, data voidptr, samplecount int) + +fn C.UnloadWave(wave Wave) + +fn C.UnloadSound(sound Sound) + +fn C.UnloadSoundAlias(alias Sound) + +fn C.PlaySound(sound Sound) + +fn C.StopSound(sound Sound) + +fn C.PauseSound(sound Sound) + +fn C.ResumeSound(sound Sound) + +fn C.SetSoundVolume(sound Sound, volume f32) + +fn C.SetSoundPitch(sound Sound, pitch f32) + +fn C.SetSoundPan(sound Sound, pan f32) + +fn C.WaveCopy(wave Wave) Wave + +fn C.WaveCrop(wave &Wave, initsample int, finalsample int) + +fn C.WaveFormat(wave &Wave, samplerate int, samplesize int, channels int) + +fn C.LoadWaveSamples(wave Wave) &f32 + +fn C.UnloadWaveSamples(samples &f32) + +fn C.LoadMusicStream(filename &i8) Music + +fn C.LoadMusicStreamFromMemory(filetype &i8, data &u8, datasize int) Music + +fn C.UnloadMusicStream(music Music) + +fn C.PlayMusicStream(music Music) + +fn C.UpdateMusicStream(music Music) + +fn C.StopMusicStream(music Music) + +fn C.PauseMusicStream(music Music) + +fn C.ResumeMusicStream(music Music) + +fn C.SeekMusicStream(music Music, position f32) + +fn C.SetMusicVolume(music Music, volume f32) + +fn C.SetMusicPitch(music Music, pitch f32) + +fn C.SetMusicPan(music Music, pan f32) + +fn C.GetMusicTimeLength(music Music) f32 + +fn C.GetMusicTimePlayed(music Music) f32 + +fn C.LoadAudioStream(samplerate u32, samplesize u32, channels u32) AudioStream + +fn C.UnloadAudioStream(stream AudioStream) + +fn C.UpdateAudioStream(stream AudioStream, data voidptr, framecount int) + +fn C.PlayAudioStream(stream AudioStream) + +fn C.PauseAudioStream(stream AudioStream) + +fn C.ResumeAudioStream(stream AudioStream) + +fn C.StopAudioStream(stream AudioStream) + +fn C.SetAudioStreamVolume(stream AudioStream, volume f32) + +fn C.SetAudioStreamPitch(stream AudioStream, pitch f32) + +fn C.SetAudioStreamPan(stream AudioStream, pan f32) + +fn C.SetAudioStreamBufferSizeDefault(size int) + +fn C.SetAudioStreamCallback(stream AudioStream, callback AudioCallback) + +fn C.AttachAudioStreamProcessor(stream AudioStream, processor AudioCallback) + +fn C.DetachAudioStreamProcessor(stream AudioStream, processor AudioCallback) + +fn C.AttachAudioMixedProcessor(processor AudioCallback) + +fn C.DetachAudioMixedProcessor(processor AudioCallback) diff --git a/v.mod b/v.mod @@ -0,0 +1,7 @@ +Module { + name: 'vraylib' + description: 'Raylib wrapper for V' + version: '0.0.0' + license: 'Zlib' + dependencies: [] +}