/********************************************************************************************** * * raylib v4.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 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 algorythm * [rcore] sdefl (Micha Mettke) for DEFLATE compression algorythm * [rtextures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...) * [rtextures] stb_image_write (Sean Barret) for image writting (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) * [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-2021 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. * **********************************************************************************************/ /** 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 */ /** * Some basic Defines * ------------------ */ /** * Some basic Defines * ------------------ */ /** Allow custom memory allocators */ /** NOTE: MSVC C++ compiler does not support compound literals (C99 feature) */ /** Plain structures in C++ (without constructors) can be initialized with { } */ /** 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 */ /** Some Basic Colors */ /** NOTE: Custom raylib color palette for amazing visuals on WHITE background */ /** ---------------------------------------------------------------------------------- /** Structures Definition /** ---------------------------------------------------------------------------------- */ /** Boolean type */ /** 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 apperture 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 second texture coordinates (useful for lightmaps) (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) */ int *boneIds; /** Vertex 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, vectex 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 */ } 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 nearest hit */ Vector3 point; /** Point of 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; typedef struct rAudioBuffer rAudioBuffer; /** AudioStream, custom audio stream */ typedef struct AudioStream { rAudioBuffer *buffer; /** Pointer to internal data used by the audio system */ 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; /** ---------------------------------------------------------------------------------- */ /** 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_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 */ /** 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 fordward (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 omni-directional 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; /** 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; /** 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_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 aproximation */ 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 an 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 (equirectangular 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_CUSTOM /** Belnd textures using custom src/dst factors (use rlSetBlendMode()) */ } BlendMode; /** Gesture */ /** NOTE: It could be used as flags to enable only some 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: This callbacks are intended for advance users */ typedef void (*TraceLogCallback)(int logLevel, const char *text, void * args); /** Logging: Redirect trace log messages */ typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, unsigned int *bytesRead); /** FileIO: Load binary data */ typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, unsigned int bytesToWrite); /** 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) */ /** ------------------------------------------------------------------------------------ */ /** Window-related functions */ void InitWindow(int width, int height, const char *title); /** Initialize window and OpenGL context */ bool WindowShouldClose(void); /** Check if KEY_ESCAPE pressed or Close icon pressed */ void CloseWindow(void); /** Close window and unload OpenGL context */ bool IsWindowReady(void); /** Check if window has been initialized successfully */ bool IsWindowFullscreen(void); /** Check if window is currently fullscreen */ bool IsWindowHidden(void); /** Check if window is currently hidden (only PLATFORM_DESKTOP) */ bool IsWindowMinimized(void); /** Check if window is currently minimized (only PLATFORM_DESKTOP) */ bool IsWindowMaximized(void); /** Check if window is currently maximized (only PLATFORM_DESKTOP) */ bool IsWindowFocused(void); /** Check if window is currently focused (only PLATFORM_DESKTOP) */ bool IsWindowResized(void); /** Check if window has been resized last frame */ bool IsWindowState(unsigned int flag); /** Check if one specific window flag is enabled */ void SetWindowState(unsigned int flags); /** Set window configuration state using flags */ void ClearWindowState(unsigned int flags); /** Clear window configuration state flags */ void ToggleFullscreen(void); /** Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) */ void MaximizeWindow(void); /** Set window state: maximized, if resizable (only PLATFORM_DESKTOP) */ void MinimizeWindow(void); /** Set window state: minimized, if resizable (only PLATFORM_DESKTOP) */ void RestoreWindow(void); /** Set window state: not minimized/maximized (only PLATFORM_DESKTOP) */ void SetWindowIcon(Image image); /** Set icon for window (only PLATFORM_DESKTOP) */ void SetWindowTitle(const char *title); /** Set title for window (only PLATFORM_DESKTOP) */ void SetWindowPosition(int x, int y); /** Set window position on screen (only PLATFORM_DESKTOP) */ void SetWindowMonitor(int monitor); /** Set monitor for the current window (fullscreen mode) */ void SetWindowMinSize(int width, int height); /** Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) */ void SetWindowSize(int width, int height); /** Set window dimensions */ void *GetWindowHandle(void); /** Get native window handle */ int GetScreenWidth(void); /** Get current screen width */ int GetScreenHeight(void); /** Get current screen height */ int GetMonitorCount(void); /** Get number of connected monitors */ int GetCurrentMonitor(void); /** Get current connected monitor */ Vector2 GetMonitorPosition(int monitor); /** Get specified monitor position */ int GetMonitorWidth(int monitor); /** Get specified monitor width (max available by monitor) */ int GetMonitorHeight(int monitor); /** Get specified monitor height (max available by monitor) */ int GetMonitorPhysicalWidth(int monitor); /** Get specified monitor physical width in millimetres */ int GetMonitorPhysicalHeight(int monitor); /** Get specified monitor physical height in millimetres */ int GetMonitorRefreshRate(int monitor); /** Get specified monitor refresh rate */ Vector2 GetWindowPosition(void); /** Get window position XY on monitor */ Vector2 GetWindowScaleDPI(void); /** Get window scale DPI factor */ const char *GetMonitorName(int monitor); /** Get the human-readable, UTF-8 encoded name of the primary monitor */ void SetClipboardText(const char *text); /** Set clipboard text content */ const char *GetClipboardText(void); /** Get clipboard text content */ /** 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 timming + PollInputEvents() */ /** To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL */ void SwapScreenBuffer(void); /** Swap back buffer with front buffer (screen drawing) */ void PollInputEvents(void); /** Register all input events */ void WaitTime(float ms); /** Wait for some milliseconds (halt program execution) */ /** Cursor-related functions */ void ShowCursor(void); /** Shows cursor */ void HideCursor(void); /** Hides cursor */ bool IsCursorHidden(void); /** Check if cursor is not visible */ void EnableCursor(void); /** Enables cursor (unlock cursor) */ void DisableCursor(void); /** Disables cursor (lock cursor) */ bool IsCursorOnScreen(void); /** Check if cursor is on the screen */ /** Drawing-related functions */ void ClearBackground(Color color); /** Set background color (framebuffer clear color) */ void BeginDrawing(void); /** Setup canvas (framebuffer) to start drawing */ void EndDrawing(void); /** End canvas drawing and swap buffers (double buffering) */ void BeginMode2D(Camera2D camera); /** Begin 2D mode with custom camera (2D) */ void EndMode2D(void); /** Ends 2D mode with custom camera */ void BeginMode3D(Camera3D camera); /** Begin 3D mode with custom camera (3D) */ void EndMode3D(void); /** Ends 3D mode and returns to default 2D orthographic mode */ void BeginTextureMode(RenderTexture2D target); /** Begin drawing to render texture */ void EndTextureMode(void); /** Ends drawing to render texture */ void BeginShaderMode(Shader shader); /** Begin custom shader drawing */ void EndShaderMode(void); /** End custom shader drawing (use default shader) */ void BeginBlendMode(int mode); /** Begin blending mode (alpha, additive, multiplied, subtract, custom) */ void EndBlendMode(void); /** End blending mode (reset to default: alpha blending) */ void BeginScissorMode(int x, int y, int width, int height); /** Begin scissor mode (define screen area for following drawing) */ void EndScissorMode(void); /** End scissor mode */ void BeginVrStereoMode(VrStereoConfig config); /** Begin stereo rendering (requires VR simulator) */ void EndVrStereoMode(void); /** End stereo rendering (requires VR simulator) */ /** VR stereo config functions for VR simulator */ VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); /** Load VR stereo config for VR simulator device parameters */ void UnloadVrStereoConfig(VrStereoConfig config); /** Unload VR stereo config */ /** Shader management functions */ /** NOTE: Shader functionality is not available on OpenGL 1.1 */ Shader LoadShader(const char *vsFileName, const char *fsFileName); /** Load shader from files and bind default locations */ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode); /** Load shader from code strings and bind default locations */ int GetShaderLocation(Shader shader, const char *uniformName); /** Get shader uniform location */ int GetShaderLocationAttrib(Shader shader, const char *attribName); /** Get shader attribute location */ void SetShaderValue(Shader shader, int locIndex, const void *value, int uniformType); /** Set shader uniform value */ void SetShaderValueV(Shader shader, int locIndex, const void *value, int uniformType, int count); /** Set shader uniform value vector */ void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); /** Set shader uniform value (matrix 4x4) */ void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); /** Set shader uniform value for texture (sampler2d) */ void UnloadShader(Shader shader); /** Unload shader from GPU memory (VRAM) */ /** Screen-space-related functions */ Ray GetMouseRay(Vector2 mousePosition, Camera camera); /** Get a ray trace from mouse position */ Matrix GetCameraMatrix(Camera camera); /** Get camera transform matrix (view matrix) */ Matrix GetCameraMatrix2D(Camera2D camera); /** Get camera 2d transform matrix */ Vector2 GetWorldToScreen(Vector3 position, Camera camera); /** Get the screen space position for a 3d world space position */ Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); /** Get size position for a 3d world space position */ Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); /** Get the screen space position for a 2d camera world space position */ Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); /** Get the world space position for a 2d camera screen space position */ /** Timing-related functions */ void SetTargetFPS(int fps); /** Set target FPS (maximum) */ int GetFPS(void); /** Get current FPS */ float GetFrameTime(void); /** Get time in seconds for last frame drawn (delta time) */ double GetTime(void); /** Get elapsed time in seconds since InitWindow() */ /** Misc. functions */ int GetRandomValue(int min, int max); /** Get a random value between min and max (both included) */ void SetRandomSeed(unsigned int seed); /** Set the seed for the random number generator */ void TakeScreenshot(const char *fileName); /** Takes a screenshot of current screen (filename extension defines format) */ void SetConfigFlags(unsigned int flags); /** Setup init configuration flags (view FLAGS) */ void TraceLog(int logLevel, const char *text, ...); /** Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) */ void SetTraceLogLevel(int logLevel); /** Set the current threshold (minimum) log level */ void *MemAlloc(int size); /** Internal memory allocator */ void *MemRealloc(void *ptr, int size); /** Internal memory reallocator */ void MemFree(void *ptr); /** Internal memory free */ /** Set custom callbacks */ /** WARNING: Callbacks setup is intended for advance users */ void SetTraceLogCallback(TraceLogCallback callback); /** Set custom trace log */ void SetLoadFileDataCallback(LoadFileDataCallback callback); /** Set custom file binary data loader */ void SetSaveFileDataCallback(SaveFileDataCallback callback); /** Set custom file binary data saver */ void SetLoadFileTextCallback(LoadFileTextCallback callback); /** Set custom file text data loader */ void SetSaveFileTextCallback(SaveFileTextCallback callback); /** Set custom file text data saver */ /** Files management functions */ unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); /** Load file data as byte array (read) */ void UnloadFileData(unsigned char *data); /** Unload file data allocated by LoadFileData() */ bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); /** Save data to file from byte array (write), returns true on success */ char *LoadFileText(const char *fileName); /** Load text data from file (read), returns a '\0' terminated string */ void UnloadFileText(char *text); /** Unload file text data allocated by LoadFileText() */ bool SaveFileText(const char *fileName, char *text); /** Save text data to file (write), string must be '\0' terminated, returns true on success */ bool FileExists(const char *fileName); /** Check if file exists */ bool DirectoryExists(const char *dirPath); /** Check if a directory path exists */ bool IsFileExtension(const char *fileName, const char *ext);/** Check file extension (including point: .png, .wav) */ const char *GetFileExtension(const char *fileName); /** Get pointer to extension for a filename string (includes dot: '.png') */ const char *GetFileName(const char *filePath); /** Get pointer to filename for a path string */ const char *GetFileNameWithoutExt(const char *filePath); /** Get filename string without extension (uses static string) */ const char *GetDirectoryPath(const char *filePath); /** Get full path for a given fileName with path (uses static string) */ const char *GetPrevDirectoryPath(const char *dirPath); /** Get previous directory path for a given path (uses static string) */ const char *GetWorkingDirectory(void); /** Get current working directory (uses static string) */ char **GetDirectoryFiles(const char *dirPath, int *count); /** Get filenames in a directory path (memory should be freed) */ void ClearDirectoryFiles(void); /** Clear directory files paths buffers (free memory) */ bool ChangeDirectory(const char *dir); /** Change working directory, return true on success */ bool IsFileDropped(void); /** Check if a file has been dropped into window */ char **GetDroppedFiles(int *count); /** Get dropped files names (memory should be freed) */ void ClearDroppedFiles(void); /** Clear dropped files paths buffer (free memory) */ long GetFileModTime(const char *fileName); /** Get file modification time (last write time) */ /** Compression/Encoding functionality */ unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength); /** Compress data (DEFLATE algorithm) */ unsigned char *DecompressData(unsigned char *compData, int compDataLength, int *dataLength); /** Decompress data (DEFLATE algorithm) */ char *EncodeDataBase64(const unsigned char *data, int dataLength, int *outputLength); /** Encode data to Base64 string */ unsigned char *DecodeDataBase64(unsigned char *data, int *outputLength); /** Decode Base64 string data */ /** Persistent storage management */ bool SaveStorageValue(unsigned int position, int value); /** Save integer value to storage file (to defined position), returns true on success */ int LoadStorageValue(unsigned int position); /** Load integer value from storage file (from defined position) */ void OpenURL(const char *url); /** Open URL with default system browser (if available) */ /** ------------------------------------------------------------------------------------ */ /** Input Handling Functions (Module: core) */ /** ------------------------------------------------------------------------------------ */ /** Input-related functions: keyboard */ bool IsKeyPressed(int key); /** Check if a key has been pressed once */ bool IsKeyDown(int key); /** Check if a key is being pressed */ bool IsKeyReleased(int key); /** Check if a key has been released once */ bool IsKeyUp(int key); /** Check if a key is NOT being pressed */ void SetExitKey(int key); /** Set a custom key to exit program (default is ESC) */ int GetKeyPressed(void); /** Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty */ int GetCharPressed(void); /** Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty */ /** Input-related functions: gamepads */ bool IsGamepadAvailable(int gamepad); /** Check if a gamepad is available */ const char *GetGamepadName(int gamepad); /** Get gamepad internal name id */ bool IsGamepadButtonPressed(int gamepad, int button); /** Check if a gamepad button has been pressed once */ bool IsGamepadButtonDown(int gamepad, int button); /** Check if a gamepad button is being pressed */ bool IsGamepadButtonReleased(int gamepad, int button); /** Check if a gamepad button has been released once */ bool IsGamepadButtonUp(int gamepad, int button); /** Check if a gamepad button is NOT being pressed */ int GetGamepadButtonPressed(void); /** Get the last gamepad button pressed */ int GetGamepadAxisCount(int gamepad); /** Get gamepad axis count for a gamepad */ float GetGamepadAxisMovement(int gamepad, int axis); /** Get axis movement value for a gamepad axis */ int SetGamepadMappings(const char *mappings); /** Set internal gamepad mappings (SDL_GameControllerDB) */ /** Input-related functions: mouse */ bool IsMouseButtonPressed(int button); /** Check if a mouse button has been pressed once */ bool IsMouseButtonDown(int button); /** Check if a mouse button is being pressed */ bool IsMouseButtonReleased(int button); /** Check if a mouse button has been released once */ bool IsMouseButtonUp(int button); /** Check if a mouse button is NOT being pressed */ int GetMouseX(void); /** Get mouse position X */ int GetMouseY(void); /** Get mouse position Y */ Vector2 GetMousePosition(void); /** Get mouse position XY */ Vector2 GetMouseDelta(void); /** Get mouse delta between frames */ void SetMousePosition(int x, int y); /** Set mouse position XY */ void SetMouseOffset(int offsetX, int offsetY); /** Set mouse offset */ void SetMouseScale(float scaleX, float scaleY); /** Set mouse scaling */ float GetMouseWheelMove(void); /** Get mouse wheel movement Y */ void SetMouseCursor(int cursor); /** Set mouse cursor */ /** Input-related functions: touch */ int GetTouchX(void); /** Get touch position X for touch point 0 (relative to screen size) */ int GetTouchY(void); /** Get touch position Y for touch point 0 (relative to screen size) */ Vector2 GetTouchPosition(int index); /** Get touch position XY for a touch point index (relative to screen size) */ int GetTouchPointId(int index); /** Get touch point identifier for given index */ int GetTouchPointCount(void); /** Get number of touch points */ /** ------------------------------------------------------------------------------------ */ /** Gestures and Touch Handling Functions (Module: rgestures) */ /** ------------------------------------------------------------------------------------ */ void SetGesturesEnabled(unsigned int flags); /** Enable a set of gestures using flags */ bool IsGestureDetected(int gesture); /** Check if a gesture have been detected */ int GetGestureDetected(void); /** Get latest detected gesture */ float GetGestureHoldDuration(void); /** Get gesture hold time in milliseconds */ Vector2 GetGestureDragVector(void); /** Get gesture drag vector */ float GetGestureDragAngle(void); /** Get gesture drag angle */ Vector2 GetGesturePinchVector(void); /** Get gesture pinch delta */ float GetGesturePinchAngle(void); /** Get gesture pinch angle */ /** ------------------------------------------------------------------------------------ */ /** Camera System Functions (Module: rcamera) */ /** ------------------------------------------------------------------------------------ */ void SetCameraMode(Camera camera, int mode); /** Set camera mode (multiple camera modes available) */ void UpdateCamera(Camera *camera); /** Update camera position for selected mode */ void SetCameraPanControl(int keyPan); /** Set camera pan key to combine with mouse movement (free camera) */ void SetCameraAltControl(int keyAlt); /** Set camera alt key to combine with mouse movement (free camera) */ void SetCameraSmoothZoomControl(int keySmoothZoom); /** Set camera smooth zoom key to combine with mouse (free camera) */ void SetCameraMoveControls(int keyFront, int keyBack, int keyRight, int keyLeft, int keyUp, int keyDown); /** Set camera move controls (1st person and 3rd person cameras) */ /** ------------------------------------------------------------------------------------ */ /** 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 */ void SetShapesTexture(Texture2D texture, Rectangle source); /** Set texture and rectangle to be used on shapes drawing */ /** Basic shapes drawing functions */ void DrawPixel(int posX, int posY, Color color); /** Draw a pixel */ void DrawPixelV(Vector2 position, Color color); /** Draw a pixel (Vector version) */ void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); /** Draw a line */ void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); /** Draw a line (Vector version) */ void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); /** Draw a line defining thickness */ void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); /** Draw a line using cubic-bezier curves in-out */ void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); /** Draw line using quadratic bezier curves with a control point */ void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color); /** Draw line using cubic bezier curves with 2 control points */ void DrawLineStrip(Vector2 *points, int pointCount, Color color); /** Draw lines sequence */ void DrawCircle(int centerX, int centerY, float radius, Color color); /** Draw a color-filled circle */ void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); /** Draw a piece of a circle */ void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); /** Draw circle sector outline */ void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); /** Draw a gradient-filled circle */ void DrawCircleV(Vector2 center, float radius, Color color); /** Draw a color-filled circle (Vector version) */ void DrawCircleLines(int centerX, int centerY, float radius, Color color); /** Draw circle outline */ void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); /** Draw ellipse */ void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); /** Draw ellipse outline */ void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); /** Draw ring */ void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); /** Draw ring outline */ void DrawRectangle(int posX, int posY, int width, int height, Color color); /** Draw a color-filled rectangle */ void DrawRectangleV(Vector2 position, Vector2 size, Color color); /** Draw a color-filled rectangle (Vector version) */ void DrawRectangleRec(Rectangle rec, Color color); /** Draw a color-filled rectangle */ void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); /** Draw a color-filled rectangle with pro parameters */ void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2);/** Draw a vertical-gradient-filled rectangle */ void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2);/** Draw a horizontal-gradient-filled rectangle */ void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); /** Draw a gradient-filled rectangle with custom vertex colors */ void DrawRectangleLines(int posX, int posY, int width, int height, Color color); /** Draw rectangle outline */ void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); /** Draw rectangle outline with extended parameters */ void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); /** Draw rectangle with rounded edges */ void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); /** Draw rectangle with rounded edges outline */ void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); /** Draw a color-filled triangle (vertex in counter-clockwise order!) */ void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); /** Draw triangle outline (vertex in counter-clockwise order!) */ void DrawTriangleFan(Vector2 *points, int pointCount, Color color); /** Draw a triangle fan defined by points (first vertex is the center) */ void DrawTriangleStrip(Vector2 *points, int pointCount, Color color); /** Draw a triangle strip defined by points */ void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); /** Draw a regular polygon (Vector version) */ void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); /** Draw a polygon outline of n sides */ void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); /** Draw a polygon outline of n sides with extended parameters */ /** Basic shapes collision detection functions */ bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); /** Check collision between two rectangles */ bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); /** Check collision between two circles */ bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); /** Check collision between circle and rectangle */ bool CheckCollisionPointRec(Vector2 point, Rectangle rec); /** Check if point is inside rectangle */ bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); /** Check if point is inside circle */ bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); /** Check if point is inside a triangle */ 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 */ 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] */ Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); /** Get collision rectangle for two rectangles collision */ /** ------------------------------------------------------------------------------------ */ /** Texture Loading and Drawing Functions (Module: textures) */ /** ------------------------------------------------------------------------------------ */ /** Image loading functions */ /** NOTE: This functions do not require GPU access */ Image LoadImage(const char *fileName); /** Load image from file into CPU memory (RAM) */ Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); /** Load image from RAW file data */ Image LoadImageAnim(const char *fileName, int *frames); /** Load image sequence from file (frames appended to image.data) */ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); /** Load image from memory buffer, fileType refers to extension: i.e. '.png' */ Image LoadImageFromTexture(Texture2D texture); /** Load image from GPU texture data */ Image LoadImageFromScreen(void); /** Load image from screen buffer and (screenshot) */ void UnloadImage(Image image); /** Unload image from CPU memory (RAM) */ bool ExportImage(Image image, const char *fileName); /** Export image data to file, returns true on success */ bool ExportImageAsCode(Image image, const char *fileName); /** Export image as code file defining an array of bytes, returns true on success */ /** Image generation functions */ Image GenImageColor(int width, int height, Color color); /** Generate image: plain color */ Image GenImageGradientV(int width, int height, Color top, Color bottom); /** Generate image: vertical gradient */ Image GenImageGradientH(int width, int height, Color left, Color right); /** Generate image: horizontal gradient */ Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); /** Generate image: radial gradient */ Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); /** Generate image: checked */ Image GenImageWhiteNoise(int width, int height, float factor); /** Generate image: white noise */ Image GenImageCellular(int width, int height, int tileSize); /** Generate image: cellular algorithm, bigger tileSize means bigger cells */ /** Image manipulation functions */ Image ImageCopy(Image image); /** Create an image duplicate (useful for transformations) */ Image ImageFromImage(Image image, Rectangle rec); /** Create an image from another image piece */ Image ImageText(const char *text, int fontSize, Color color); /** Create an image from text (default font) */ Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint); /** Create an image from text (custom sprite font) */ void ImageFormat(Image *image, int newFormat); /** Convert image data to desired format */ void ImageToPOT(Image *image, Color fill); /** Convert image to POT (power-of-two) */ void ImageCrop(Image *image, Rectangle crop); /** Crop an image to a defined rectangle */ void ImageAlphaCrop(Image *image, float threshold); /** Crop image depending on alpha value */ void ImageAlphaClear(Image *image, Color color, float threshold); /** Clear alpha channel to desired color */ void ImageAlphaMask(Image *image, Image alphaMask); /** Apply alpha mask to image */ void ImageAlphaPremultiply(Image *image); /** Premultiply alpha channel */ void ImageResize(Image *image, int newWidth, int newHeight); /** Resize image (Bicubic scaling algorithm) */ void ImageResizeNN(Image *image, int newWidth,int newHeight); /** Resize image (Nearest-Neighbor scaling algorithm) */ void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); /** Resize canvas and fill with color */ void ImageMipmaps(Image *image); /** Compute all mipmap levels for a provided image */ void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); /** Dither image data to 16bpp or lower (Floyd-Steinberg dithering) */ void ImageFlipVertical(Image *image); /** Flip image vertically */ void ImageFlipHorizontal(Image *image); /** Flip image horizontally */ void ImageRotateCW(Image *image); /** Rotate image clockwise 90deg */ void ImageRotateCCW(Image *image); /** Rotate image counter-clockwise 90deg */ void ImageColorTint(Image *image, Color color); /** Modify image color: tint */ void ImageColorInvert(Image *image); /** Modify image color: invert */ void ImageColorGrayscale(Image *image); /** Modify image color: grayscale */ void ImageColorContrast(Image *image, float contrast); /** Modify image color: contrast (-100 to 100) */ void ImageColorBrightness(Image *image, int brightness); /** Modify image color: brightness (-255 to 255) */ void ImageColorReplace(Image *image, Color color, Color replace); /** Modify image color: replace color */ Color *LoadImageColors(Image image); /** Load color data from image as a Color array (RGBA - 32bit) */ Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorCount); /** Load colors palette from image as a Color array (RGBA - 32bit) */ void UnloadImageColors(Color *colors); /** Unload color data loaded with LoadImageColors() */ void UnloadImagePalette(Color *colors); /** Unload colors palette loaded with LoadImagePalette() */ Rectangle GetImageAlphaBorder(Image image, float threshold); /** Get image alpha border rectangle */ 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) */ void ImageClearBackground(Image *dst, Color color); /** Clear image background with given color */ void ImageDrawPixel(Image *dst, int posX, int posY, Color color); /** Draw pixel within an image */ void ImageDrawPixelV(Image *dst, Vector2 position, Color color); /** Draw pixel within an image (Vector version) */ void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); /** Draw line within an image */ void ImageDrawLineV(Image *dst, Vector2 start, Vector2 end, Color color); /** Draw line within an image (Vector version) */ void ImageDrawCircle(Image *dst, int centerX, int centerY, int radius, Color color); /** Draw circle within an image */ void ImageDrawCircleV(Image *dst, Vector2 center, int radius, Color color); /** Draw circle within an image (Vector version) */ void ImageDrawRectangle(Image *dst, int posX, int posY, int width, int height, Color color); /** Draw rectangle within an image */ void ImageDrawRectangleV(Image *dst, Vector2 position, Vector2 size, Color color); /** Draw rectangle within an image (Vector version) */ void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); /** Draw rectangle within an image */ void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); /** Draw rectangle lines within an image */ void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); /** Draw a source image within a destination image (tint applied to source) */ void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color); /** Draw text (using default font) within an image (destination) */ 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 */ Texture2D LoadTexture(const char *fileName); /** Load texture from file into GPU memory (VRAM) */ Texture2D LoadTextureFromImage(Image image); /** Load texture from image data */ TextureCubemap LoadTextureCubemap(Image image, int layout); /** Load cubemap from image, multiple image cubemap layouts supported */ RenderTexture2D LoadRenderTexture(int width, int height); /** Load texture for rendering (framebuffer) */ void UnloadTexture(Texture2D texture); /** Unload texture from GPU memory (VRAM) */ void UnloadRenderTexture(RenderTexture2D target); /** Unload render texture from GPU memory (VRAM) */ void UpdateTexture(Texture2D texture, const void *pixels); /** Update GPU texture with new data */ void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); /** Update GPU texture rectangle with new data */ /** Texture configuration functions */ void GenTextureMipmaps(Texture2D *texture); /** Generate GPU mipmaps for a texture */ void SetTextureFilter(Texture2D texture, int filter); /** Set texture scaling filter mode */ void SetTextureWrap(Texture2D texture, int wrap); /** Set texture wrapping mode */ /** Texture drawing functions */ void DrawTexture(Texture2D texture, int posX, int posY, Color tint); /** Draw a Texture2D */ void DrawTextureV(Texture2D texture, Vector2 position, Color tint); /** Draw a Texture2D with position defined as Vector2 */ void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); /** Draw a Texture2D with extended parameters */ void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); /** Draw a part of a texture defined by a rectangle */ void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, Rectangle quad, Color tint); /** Draw texture quad with tiling and offset parameters */ void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint); /** Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest. */ 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 */ 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 */ void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointCount, Color tint); /** Draw a textured polygon */ /** Color/pixel related functions */ Color Fade(Color color, float alpha); /** Get color with alpha applied, alpha goes from 0.0f to 1.0f */ int ColorToInt(Color color); /** Get hexadecimal value for a Color */ Vector4 ColorNormalize(Color color); /** Get Color normalized as float [0..1] */ Color ColorFromNormalized(Vector4 normalized); /** Get Color from normalized values [0..1] */ Vector3 ColorToHSV(Color color); /** Get HSV values for a Color, hue [0..360], saturation/value [0..1] */ Color ColorFromHSV(float hue, float saturation, float value); /** Get a Color from HSV values, hue [0..360], saturation/value [0..1] */ Color ColorAlpha(Color color, float alpha); /** Get color with alpha applied, alpha goes from 0.0f to 1.0f */ Color ColorAlphaBlend(Color dst, Color src, Color tint); /** Get src alpha-blended into dst color with tint */ Color GetColor(unsigned int hexValue); /** Get Color structure from hexadecimal value */ Color GetPixelColor(void *srcPtr, int format); /** Get Color from a source pixel pointer of certain format */ void SetPixelColor(void *dstPtr, Color color, int format); /** Set color formatted into destination pixel pointer */ 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 */ Font GetFontDefault(void); /** Get the default Font */ Font LoadFont(const char *fileName); /** Load font from file into GPU memory (VRAM) */ Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount); /** Load font from file with extended parameters */ Font LoadFontFromImage(Image image, Color key, int firstChar); /** Load font from Image (XNA style) */ Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int glyphCount); /** Load font from memory buffer, fileType refers to extension: i.e. '.ttf' */ GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int glyphCount, int type); /** Load font data for further use */ Image GenImageFontAtlas(const GlyphInfo *chars, Rectangle **recs, int glyphCount, int fontSize, int padding, int packMethod); /** Generate image font atlas using chars info */ void UnloadFontData(GlyphInfo *chars, int glyphCount); /** Unload font chars info data (RAM) */ void UnloadFont(Font font); /** Unload Font from GPU memory (VRAM) */ /** Text drawing functions */ void DrawFPS(int posX, int posY); /** Draw current FPS */ void DrawText(const char *text, int posX, int posY, int fontSize, Color color); /** Draw text (using default font) */ void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); /** Draw text using font and additional parameters */ 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) */ void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); /** Draw one character (codepoint) */ /** Text font info functions */ int MeasureText(const char *text, int fontSize); /** Measure string width for default font */ Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); /** Measure string size for Font */ int GetGlyphIndex(Font font, int codepoint); /** Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found */ GlyphInfo GetGlyphInfo(Font font, int codepoint); /** Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found */ 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) */ int *LoadCodepoints(const char *text, int *count); /** Load all codepoints from a UTF-8 text string, codepoints count returned by parameter */ void UnloadCodepoints(int *codepoints); /** Unload codepoints data from memory */ int GetCodepointCount(const char *text); /** Get total number of codepoints in a UTF-8 encoded string */ int GetCodepoint(const char *text, int *bytesProcessed); /** Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure */ const char *CodepointToUTF8(int codepoint, int *byteSize); /** Encode one codepoint into UTF-8 byte array (array length returned as parameter) */ char *TextCodepointsToUTF8(int *codepoints, int length); /** Encode text as codepoints array into UTF-8 text string (WARNING: memory must be freed!) */ /** Text strings management functions (no UTF-8 strings, only byte chars) */ /** NOTE: Some strings allocate memory internally for returned strings, just be careful! */ int TextCopy(char *dst, const char *src); /** Copy one string to another, returns bytes copied */ bool TextIsEqual(const char *text1, const char *text2); /** Check if two text string are equal */ unsigned int TextLength(const char *text); /** Get text length, checks for '\0' ending */ const char *TextFormat(const char *text, ...); /** Text formatting with variables (sprintf() style) */ const char *TextSubtext(const char *text, int position, int length); /** Get a piece of a text string */ char *TextReplace(char *text, const char *replace, const char *by); /** Replace text string (WARNING: memory must be freed!) */ char *TextInsert(const char *text, const char *insert, int position); /** Insert text in a position (WARNING: memory must be freed!) */ const char *TextJoin(const char **textList, int count, const char *delimiter); /** Join text strings with delimiter */ const char **TextSplit(const char *text, char delimiter, int *count); /** Split text into multiple strings */ void TextAppend(char *text, const char *append, int *position); /** Append text at specific position and move cursor! */ int TextFindIndex(const char *text, const char *find); /** Find first text occurrence within a string */ const char *TextToUpper(const char *text); /** Get upper case version of provided string */ const char *TextToLower(const char *text); /** Get lower case version of provided string */ const char *TextToPascal(const char *text); /** Get Pascal case notation version of provided string */ 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 */ void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); /** Draw a line in 3D world space */ void DrawPoint3D(Vector3 position, Color color); /** Draw a point in 3D space, actually a small line */ void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); /** Draw a circle in 3D world space */ void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); /** Draw a color-filled triangle (vertex in counter-clockwise order!) */ void DrawTriangleStrip3D(Vector3 *points, int pointCount, Color color); /** Draw a triangle strip defined by points */ void DrawCube(Vector3 position, float width, float height, float length, Color color); /** Draw cube */ void DrawCubeV(Vector3 position, Vector3 size, Color color); /** Draw cube (Vector version) */ void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); /** Draw cube wires */ void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); /** Draw cube wires (Vector version) */ void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color); /** Draw cube textured */ void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, float width, float height, float length, Color color); /** Draw cube with a region of a texture */ void DrawSphere(Vector3 centerPos, float radius, Color color); /** Draw sphere */ void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); /** Draw sphere with extended parameters */ void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); /** Draw sphere wires */ void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); /** Draw a cylinder/cone */ 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 */ void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); /** Draw a cylinder/cone wires */ 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 */ void DrawPlane(Vector3 centerPos, Vector2 size, Color color); /** Draw a plane XZ */ void DrawRay(Ray ray, Color color); /** Draw a ray line */ 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 */ Model LoadModel(const char *fileName); /** Load model from files (meshes and materials) */ Model LoadModelFromMesh(Mesh mesh); /** Load model from generated mesh (default material) */ void UnloadModel(Model model); /** Unload model (including meshes) from memory (RAM and/or VRAM) */ void UnloadModelKeepMeshes(Model model); /** Unload model (but not meshes) from memory (RAM and/or VRAM) */ BoundingBox GetModelBoundingBox(Model model); /** Compute model bounding box limits (considers all meshes) */ /** Model drawing functions */ void DrawModel(Model model, Vector3 position, float scale, Color tint); /** Draw a model (with texture if set) */ void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); /** Draw a model with extended parameters */ void DrawModelWires(Model model, Vector3 position, float scale, Color tint); /** Draw a model wires (with texture if set) */ 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 */ void DrawBoundingBox(BoundingBox box, Color color); /** Draw bounding box (wires) */ void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); /** Draw a billboard texture */ void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); /** Draw a billboard texture defined by source */ 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 */ void UploadMesh(Mesh *mesh, bool dynamic); /** Upload mesh vertex data in GPU and provide VAO/VBO ids */ void UpdateMeshBuffer(Mesh mesh, int index, void *data, int dataSize, int offset); /** Update mesh vertex data in GPU for a specific buffer index */ void UnloadMesh(Mesh mesh); /** Unload mesh data from CPU and GPU */ void DrawMesh(Mesh mesh, Material material, Matrix transform); /** Draw a 3d mesh with material and transform */ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int instances); /** Draw multiple mesh instances with material and different transforms */ bool ExportMesh(Mesh mesh, const char *fileName); /** Export mesh data to file, returns true on success */ BoundingBox GetMeshBoundingBox(Mesh mesh); /** Compute mesh bounding box limits */ void GenMeshTangents(Mesh *mesh); /** Compute mesh tangents */ void GenMeshBinormals(Mesh *mesh); /** Compute mesh binormals */ /** Mesh generation functions */ Mesh GenMeshPoly(int sides, float radius); /** Generate polygonal mesh */ Mesh GenMeshPlane(float width, float length, int resX, int resZ); /** Generate plane mesh (with subdivisions) */ Mesh GenMeshCube(float width, float height, float length); /** Generate cuboid mesh */ Mesh GenMeshSphere(float radius, int rings, int slices); /** Generate sphere mesh (standard sphere) */ Mesh GenMeshHemiSphere(float radius, int rings, int slices); /** Generate half-sphere mesh (no bottom cap) */ Mesh GenMeshCylinder(float radius, float height, int slices); /** Generate cylinder mesh */ Mesh GenMeshCone(float radius, float height, int slices); /** Generate cone/pyramid mesh */ Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); /** Generate torus mesh */ Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); /** Generate trefoil knot mesh */ Mesh GenMeshHeightmap(Image heightmap, Vector3 size); /** Generate heightmap mesh from image data */ Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); /** Generate cubes-based map mesh from image data */ /** Material loading/unloading functions */ Material *LoadMaterials(const char *fileName, int *materialCount); /** Load materials from model file */ Material LoadMaterialDefault(void); /** Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) */ void UnloadMaterial(Material material); /** Unload material from GPU memory (VRAM) */ void SetMaterialTexture(Material *material, int mapType, Texture2D texture); /** Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) */ void SetModelMeshMaterial(Model *model, int meshId, int materialId); /** Set material for a mesh */ /** Model animations loading/unloading functions */ ModelAnimation *LoadModelAnimations(const char *fileName, unsigned int *animCount); /** Load model animations from file */ void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); /** Update model animation pose */ void UnloadModelAnimation(ModelAnimation anim); /** Unload animation data */ void UnloadModelAnimations(ModelAnimation* animations, unsigned int count); /** Unload animation array data */ bool IsModelAnimationValid(Model model, ModelAnimation anim); /** Check model animation skeleton match */ /** Collision detection functions */ bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); /** Check collision between two spheres */ bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); /** Check collision between two bounding boxes */ bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); /** Check collision between box and sphere */ RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); /** Get collision info between ray and sphere */ RayCollision GetRayCollisionBox(Ray ray, BoundingBox box); /** Get collision info between ray and box */ RayCollision GetRayCollisionModel(Ray ray, Model model); /** Get collision info between ray and model */ RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform); /** Get collision info between ray and mesh */ RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); /** Get collision info between ray and triangle */ 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) */ /** ------------------------------------------------------------------------------------ */ /** Audio device management functions */ void InitAudioDevice(void); /** Initialize audio device and context */ void CloseAudioDevice(void); /** Close the audio device and context */ bool IsAudioDeviceReady(void); /** Check if audio device has been initialized successfully */ void SetMasterVolume(float volume); /** Set master volume (listener) */ /** Wave/Sound loading/unloading functions */ Wave LoadWave(const char *fileName); /** Load wave data from file */ Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); /** Load wave from memory buffer, fileType refers to extension: i.e. '.wav' */ Sound LoadSound(const char *fileName); /** Load sound from file */ Sound LoadSoundFromWave(Wave wave); /** Load sound from wave data */ void UpdateSound(Sound sound, const void *data, int sampleCount); /** Update sound buffer with new data */ void UnloadWave(Wave wave); /** Unload wave data */ void UnloadSound(Sound sound); /** Unload sound */ bool ExportWave(Wave wave, const char *fileName); /** Export wave data to file, returns true on success */ bool ExportWaveAsCode(Wave wave, const char *fileName); /** Export wave sample data to code (.h), returns true on success */ /** Wave/Sound management functions */ void PlaySound(Sound sound); /** Play a sound */ void StopSound(Sound sound); /** Stop playing a sound */ void PauseSound(Sound sound); /** Pause a sound */ void ResumeSound(Sound sound); /** Resume a paused sound */ void PlaySoundMulti(Sound sound); /** Play a sound (using multichannel buffer pool) */ void StopSoundMulti(void); /** Stop any sound playing (using multichannel buffer pool) */ int GetSoundsPlaying(void); /** Get number of sounds playing in the multichannel */ bool IsSoundPlaying(Sound sound); /** Check if a sound is currently playing */ void SetSoundVolume(Sound sound, float volume); /** Set volume for a sound (1.0 is max level) */ void SetSoundPitch(Sound sound, float pitch); /** Set pitch for a sound (1.0 is base level) */ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); /** Convert wave data to desired format */ Wave WaveCopy(Wave wave); /** Copy a wave to a new wave */ void WaveCrop(Wave *wave, int initSample, int finalSample); /** Crop a wave to defined samples range */ float *LoadWaveSamples(Wave wave); /** Load samples data from wave as a floats array */ void UnloadWaveSamples(float *samples); /** Unload samples data loaded with LoadWaveSamples() */ /** Music management functions */ Music LoadMusicStream(const char *fileName); /** Load music stream from file */ Music LoadMusicStreamFromMemory(const char *fileType, unsigned char *data, int dataSize); /** Load music stream from data */ void UnloadMusicStream(Music music); /** Unload music stream */ void PlayMusicStream(Music music); /** Start music playing */ bool IsMusicStreamPlaying(Music music); /** Check if music is playing */ void UpdateMusicStream(Music music); /** Updates buffers for music streaming */ void StopMusicStream(Music music); /** Stop music playing */ void PauseMusicStream(Music music); /** Pause music playing */ void ResumeMusicStream(Music music); /** Resume playing paused music */ void SeekMusicStream(Music music, float position); /** Seek music to a position (in seconds) */ void SetMusicVolume(Music music, float volume); /** Set volume for music (1.0 is max level) */ void SetMusicPitch(Music music, float pitch); /** Set pitch for a music (1.0 is base level) */ float GetMusicTimeLength(Music music); /** Get music time length (in seconds) */ float GetMusicTimePlayed(Music music); /** Get current music time played (in seconds) */ /** AudioStream management functions */ AudioStream LoadAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); /** Load audio stream (to stream raw audio pcm data) */ void UnloadAudioStream(AudioStream stream); /** Unload audio stream and free memory */ void UpdateAudioStream(AudioStream stream, const void *data, int frameCount); /** Update audio stream buffers with data */ bool IsAudioStreamProcessed(AudioStream stream); /** Check if any audio stream buffers requires refill */ void PlayAudioStream(AudioStream stream); /** Play audio stream */ void PauseAudioStream(AudioStream stream); /** Pause audio stream */ void ResumeAudioStream(AudioStream stream); /** Resume audio stream */ bool IsAudioStreamPlaying(AudioStream stream); /** Check if audio stream is playing */ void StopAudioStream(AudioStream stream); /** Stop audio stream */ void SetAudioStreamVolume(AudioStream stream, float volume); /** Set volume for audio stream (1.0 is max level) */ void SetAudioStreamPitch(AudioStream stream, float pitch); /** Set pitch for audio stream (1.0 is base level) */ void SetAudioStreamBufferSizeDefault(int size); /** Default size for new audio streams */