2017-07-22 11:44:24 +03:00
/**********************************************************************************************
2014-09-03 18:51:28 +04:00
*
2018-09-18 22:30:52 +03:00
* raylib - A simple and easy - to - use library to enjoy videogames programming ( www . raylib . com )
2013-11-19 02:38:44 +04:00
*
2017-02-16 02:50:02 +03:00
* FEATURES :
2018-06-26 02:36:13 +03:00
* - NO external dependencies , all required libraries included with raylib
2019-04-11 00:50:48 +03:00
* - Multiplatform : Windows , Linux , FreeBSD , OpenBSD , NetBSD , DragonFly , MacOS , UWP , Android , Raspberry Pi , HTML5 .
2017-10-12 15:07:31 +03:00
* - Written in plain C code ( C99 ) in PascalCase / camelCase notation
2017-12-05 15:22:26 +03:00
* - Hardware accelerated with OpenGL ( 1.1 , 2.1 , 3.3 or ES2 - choose at compile )
2017-03-19 14:52:58 +03:00
* - Unique OpenGL abstraction layer ( usable as standalone module ) : [ rlgl ]
2019-04-11 00:50:48 +03:00
* - Powerful fonts module ( XNA SpriteFonts , BMFonts , TTF )
2017-12-05 15:22:26 +03:00
* - Outstanding texture formats support , including compressed formats ( DXT , ETC , ASTC )
* - Full 3 d support for 3 d Shapes , Models , Billboards , Heightmaps and more !
2017-10-12 15:07:31 +03:00
* - Flexible Materials system , supporting classic maps and PBR maps
2019-04-11 00:50:48 +03:00
* - Skeletal Animation support ( CPU bones - based animation )
2017-10-12 15:07:31 +03:00
* - Shaders support , including Model shaders and Postprocessing shaders
2017-12-05 15:22:26 +03:00
* - Powerful math module for Vector , Matrix and Quaternion operations : [ raymath ]
2018-06-26 02:36:13 +03:00
* - Audio loading and playing with streaming support ( WAV , OGG , MP3 , FLAC , XM , MOD )
2017-12-05 15:22:26 +03:00
* - VR stereo rendering with configurable HMD device parameters
2019-04-11 00:50:48 +03:00
* - Bindings to multiple programming languages available !
2016-11-16 20:46:13 +03:00
*
2017-02-16 02:50:02 +03:00
* NOTES :
2017-05-14 19:30:51 +03:00
* One custom font is loaded by default when InitWindow ( ) [ core ]
* If using OpenGL 3.3 or ES2 , one default shader is loaded automatically ( internally defined ) [ rlgl ]
2017-03-19 14:52:58 +03:00
* If using OpenGL 3.3 or ES2 , several vertex buffers ( VAO / VBO ) are created to manage lines - triangles - quads
2017-02-16 02:50:02 +03:00
*
2017-12-05 15:22:26 +03:00
* DEPENDENCIES ( included ) :
2019-04-11 00:50:48 +03:00
* [ core ] rglfw ( github . com / glfw / glfw ) for window / context management and input ( only PLATFORM_DESKTOP )
2019-04-11 01:11:11 +03:00
* [ rlgl ] glad ( github . com / Dav1dde / glad ) for OpenGL 3.3 extensions loading ( only PLATFORM_DESKTOP )
2019-04-11 00:50:48 +03:00
* [ raudio ] miniaudio ( github . com / dr - soft / miniaudio ) for audio device / context management
2017-03-19 14:52:58 +03:00
*
2017-12-05 15:22:26 +03:00
* OPTIONAL DEPENDENCIES ( included ) :
2019-04-11 00:50:48 +03:00
* [ core ] rgif ( Charlie Tangora , Ramon Santamaria ) for GIF recording
* [ textures ] stb_image ( Sean Barret ) for images loading ( BMP , TGA , PNG , JPEG , HDR . . . )
* [ textures ] stb_image_write ( Sean Barret ) for image writting ( BMP , TGA , PNG , JPG )
2019-08-03 12:07:41 +03:00
* [ textures ] stb_image_resize ( Sean Barret ) for image resizing algorithms
2019-04-11 00:50:48 +03:00
* [ textures ] stb_perlin ( Sean Barret ) for Perlin noise image generation
* [ text ] stb_truetype ( Sean Barret ) for ttf fonts loading
* [ text ] stb_rect_pack ( Sean Barret ) for rectangles packing
* [ models ] par_shapes ( Philip Rideout ) for parametric 3 d shapes generation
* [ models ] tinyobj_loader_c ( Syoyo Fujita ) for models loading ( OBJ , MTL )
* [ models ] cgltf ( Johannes Kuhlmann ) for models loading ( glTF )
* [ raudio ] stb_vorbis ( Sean Barret ) for OGG audio loading
* [ raudio ] dr_flac ( David Reid ) for FLAC audio file loading
* [ raudio ] dr_mp3 ( David Reid ) for MP3 audio file loading
* [ raudio ] jar_xm ( Joshua Reisenauer ) for XM audio module loading
* [ raudio ] jar_mod ( Joshua Reisenauer ) for MOD audio module loading
2013-11-19 02:38:44 +04:00
*
2014-01-23 15:36:18 +04:00
*
2017-02-16 02:50:02 +03:00
* LICENSE : zlib / libpng
2013-11-19 02:38:44 +04:00
*
2014-09-03 18:51:28 +04:00
* raylib is licensed under an unmodified zlib / libpng license , which is an OSI - certified ,
2013-11-23 16:30:54 +04:00
* BSD - like license that allows static linking with closed source software :
2014-09-03 18:51:28 +04:00
*
2020-01-05 22:01:54 +03:00
* Copyright ( c ) 2013 - 2020 Ramon Santamaria ( @ raysan5 )
2014-09-03 18:51:28 +04:00
*
* This software is provided " as-is " , without any express or implied warranty . In no event
2013-11-23 16:30:54 +04:00
* will the authors be held liable for any damages arising from the use of this software .
2013-11-19 02:38:44 +04:00
*
2014-09-03 18:51:28 +04:00
* Permission is granted to anyone to use this software for any purpose , including commercial
2013-11-23 16:30:54 +04:00
* applications , and to alter it and redistribute it freely , subject to the following restrictions :
2013-11-19 02:38:44 +04:00
*
2014-09-03 18:51:28 +04:00
* 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
2013-11-23 16:30:54 +04:00
* in the product documentation would be appreciated but is not required .
2013-11-19 02:38:44 +04:00
*
2013-11-23 16:30:54 +04:00
* 2. Altered source versions must be plainly marked as such , and must not be misrepresented
* as being the original software .
2013-11-19 02:38:44 +04:00
*
2013-11-23 16:30:54 +04:00
* 3. This notice may not be removed or altered from any source distribution .
2013-11-19 02:38:44 +04:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef RAYLIB_H
2014-04-19 18:36:49 +04:00
# define RAYLIB_H
2014-04-09 22:25:26 +04:00
2020-01-19 13:22:28 +03:00
# include <stdarg.h> // Required for: va_list - Only used by TraceLogCallback
2018-07-26 22:57:45 +03:00
2020-01-19 13:22:28 +03:00
# define RLAPI // We are building or using raylib as a static library (or Linux shared library)
# if defined(_WIN32)
// Microsoft attibutes to tell compiler that symbols are imported/exported from a .dll
# if defined(BUILD_LIBTYPE_SHARED)
# define RLAPI __declspec(dllexport) // We are building raylib as a Win32 shared library (.dll)
# elif defined(USE_LIBTYPE_SHARED)
# define RLAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll)
# endif
2016-08-13 12:31:15 +03:00
# endif
2013-11-19 02:38:44 +04:00
//----------------------------------------------------------------------------------
// Some basic Defines
//----------------------------------------------------------------------------------
# ifndef PI
2016-10-17 01:03:38 +03:00
# define PI 3.14159265358979323846f
2013-11-19 02:38:44 +04:00
# endif
2016-02-03 19:45:28 +03:00
# define DEG2RAD (PI / 180.0f)
# define RAD2DEG (180.0f / PI)
2013-11-19 02:38:44 +04:00
2018-12-03 13:04:32 +03:00
# define MAX_TOUCH_POINTS 10 // Maximum number of touch points supported
2016-08-07 14:38:48 +03:00
2019-04-23 15:55:35 +03:00
// Allow custom memory allocators
# ifndef RL_MALLOC
# define RL_MALLOC(sz) malloc(sz)
# endif
# ifndef RL_CALLOC
# define RL_CALLOC(n,sz) calloc(n,sz)
# endif
2020-01-19 13:23:38 +03:00
# ifndef RL_REALLOC
# define RL_REALLOC(n,sz) realloc(n,sz)
# endif
2019-04-23 15:55:35 +03:00
# ifndef RL_FREE
# define RL_FREE(p) free(p)
# endif
2019-10-21 18:38:23 +03:00
2016-08-10 00:03:29 +03:00
// NOTE: MSC C++ compiler does not support compound literals (C99 feature)
// Plain structures in C++ (without constructors) can be initialized from { } initializers.
2018-10-16 11:53:01 +03:00
# if defined(__cplusplus)
2019-07-24 23:38:57 +03:00
# define CLITERAL(type) type
2016-08-01 19:05:07 +03:00
# else
2019-07-24 23:38:57 +03:00
# define CLITERAL(type) (type)
2016-08-01 19:05:07 +03:00
# endif
2013-11-19 02:38:44 +04:00
2016-08-10 00:03:29 +03:00
// Some Basic Colors
// NOTE: Custom raylib color palette for amazing visuals on WHITE background
2019-07-24 23:38:57 +03:00
# 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
2016-08-10 00:03:29 +03:00
2019-07-24 23:38:57 +03:00
# 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
2019-07-24 23:38:06 +03:00
# define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo)
2016-08-10 00:03:29 +03:00
2018-12-26 15:26:34 +03:00
// Temporal hack to avoid breaking old codebases using
// deprecated raylib implementation of these functions
# define FormatText TextFormat
2018-12-26 15:57:10 +03:00
# define SubText TextSubtext
2019-01-19 14:34:04 +03:00
# define ShowWindow UnhideWindow
2018-12-26 15:26:34 +03:00
2013-11-19 02:38:44 +04:00
//----------------------------------------------------------------------------------
2017-04-21 01:08:00 +03:00
// Structures Definition
2013-11-19 02:38:44 +04:00
//----------------------------------------------------------------------------------
2019-04-11 01:11:11 +03:00
// Boolean type
# if defined(__STDC__) && __STDC_VERSION__ >= 199901L
# include <stdbool.h>
# elif !defined(__cplusplus) && !defined(bool)
typedef enum { false , true } bool ;
# endif
2014-04-09 22:25:26 +04:00
// Vector2 type
typedef struct Vector2 {
float x ;
float y ;
} Vector2 ;
// Vector3 type
typedef struct Vector3 {
float x ;
float y ;
float z ;
} Vector3 ;
2018-02-24 14:31:32 +03:00
// Vector4 type
typedef struct Vector4 {
float x ;
float y ;
float z ;
float w ;
} Vector4 ;
2018-07-09 11:23:53 +03:00
// Quaternion type, same as Vector4
2018-07-02 19:53:46 +03:00
typedef Vector4 Quaternion ;
2015-04-06 15:02:29 +03:00
// Matrix type (OpenGL style 4x4 - right handed, column major)
typedef struct Matrix {
float m0 , m4 , m8 , m12 ;
float m1 , m5 , m9 , m13 ;
float m2 , m6 , m10 , m14 ;
float m3 , m7 , m11 , m15 ;
} Matrix ;
2013-11-19 02:38:44 +04:00
// Color type, RGBA (32bit)
typedef struct Color {
2013-11-23 16:30:54 +04:00
unsigned char r ;
unsigned char g ;
unsigned char b ;
unsigned char a ;
2013-11-19 02:38:44 +04:00
} Color ;
// Rectangle type
typedef struct Rectangle {
2018-05-04 17:25:31 +03:00
float x ;
float y ;
float width ;
float height ;
2013-11-19 02:38:44 +04:00
} Rectangle ;
// Image type, bpp always RGBA (32bit)
// NOTE: Data stored in CPU memory (RAM)
typedef struct Image {
2015-05-05 00:46:31 +03:00
void * data ; // Image raw data
int width ; // Image base width
int height ; // Image base height
int mipmaps ; // Mipmap levels, 1 by default
2018-01-06 15:43:48 +03:00
int format ; // Data format (PixelFormat type)
2013-11-19 02:38:44 +04:00
} Image ;
2017-04-30 14:03:31 +03:00
// Texture2D type
2013-11-19 02:38:44 +04:00
// NOTE: Data stored in GPU memory
typedef struct Texture2D {
2015-05-05 00:46:31 +03:00
unsigned int id ; // OpenGL texture id
int width ; // Texture base width
int height ; // Texture base height
int mipmaps ; // Mipmap levels, 1 by default
2018-01-06 15:43:48 +03:00
int format ; // Data format (PixelFormat type)
2013-11-19 02:38:44 +04:00
} Texture2D ;
2018-07-09 11:23:53 +03:00
// Texture type, same as Texture2D
typedef Texture2D Texture ;
2019-02-04 15:27:36 +03:00
// TextureCubemap type, actually, same as Texture2D
typedef Texture2D TextureCubemap ;
2016-03-30 21:09:16 +03:00
// RenderTexture2D type, for texture rendering
typedef struct RenderTexture2D {
2016-12-25 04:01:13 +03:00
unsigned int id ; // OpenGL Framebuffer Object (FBO) id
2016-03-30 21:09:16 +03:00
Texture2D texture ; // Color buffer attachment texture
Texture2D depth ; // Depth buffer attachment texture
2019-02-06 16:21:44 +03:00
bool depthTexture ; // Track if depth attachment is a texture or renderbuffer
2016-03-30 21:09:16 +03:00
} RenderTexture2D ;
2018-07-09 11:23:53 +03:00
// RenderTexture type, same as RenderTexture2D
typedef RenderTexture2D RenderTexture ;
2018-09-05 11:59:05 +03:00
// N-Patch layout info
2018-08-08 22:39:10 +03:00
typedef struct NPatchInfo {
Rectangle sourceRec ; // Region in the texture
int left ; // left border offset
int top ; // top border offset
int right ; // right border offset
int bottom ; // bottom border offset
int type ; // layout of the n-patch: 3x3, 1x3 or 3x1
} NPatchInfo ;
2018-08-03 10:48:46 +03:00
2018-05-04 17:59:48 +03:00
// Font character info
2017-02-05 04:59:39 +03:00
typedef struct CharInfo {
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
BREAKING CHANGE: Read description
Changes:
- Font structure has been redesigned, CharInfo structure contained character rectangle within font texture, it has not much sense, considering that it was an information relative to the font atlas generated and not the character itself, so character rectangles have been moved out from CharInfo to Font.
- CharInfo included a data parameters to contain character pixel data (usually grayscale), generated on TTF font generation. It was inconsistent with other fonts types, so, now CharInfo includes directly an Image of the glyph.
- REDESIGNED: GenImageFontAtlas(), additional recs parameter added, loaded and filled inside the function to export atlas characters rectangles, instead of silently modify the input CharInfo data.
- REVIEWED: ImageTextEx(), funtion retrieved the font atlas image from the GPU, that was slow and problematic in several platforms. Now it uses directly the CharInfo image. Support for unicode codepoints has also been added.
- REDESIGNED: ImageDraw(), now it includes an additional parameter, the color tint, not only it could be useful for several situations but also function signature is more consistent with similar functions.
- ADDED: ImageFromImage() to generate a new image from a piece of another image.
- REVIEWED: GetNextCodepoint(), renamed parameters to be more clear.
Also all examples and games that were affected by those changes have been reviewed.
2019-07-24 16:05:14 +03:00
Image image ; // Character image data
2017-02-05 04:59:39 +03:00
} CharInfo ;
2018-05-04 17:59:48 +03:00
// Font type, includes texture and charSet array data
typedef struct Font {
2017-02-05 04:59:39 +03:00
int baseSize ; // Base size (default chars height)
int charsCount ; // Number of characters
BREAKING CHANGE: Read description
Changes:
- Font structure has been redesigned, CharInfo structure contained character rectangle within font texture, it has not much sense, considering that it was an information relative to the font atlas generated and not the character itself, so character rectangles have been moved out from CharInfo to Font.
- CharInfo included a data parameters to contain character pixel data (usually grayscale), generated on TTF font generation. It was inconsistent with other fonts types, so, now CharInfo includes directly an Image of the glyph.
- REDESIGNED: GenImageFontAtlas(), additional recs parameter added, loaded and filled inside the function to export atlas characters rectangles, instead of silently modify the input CharInfo data.
- REVIEWED: ImageTextEx(), funtion retrieved the font atlas image from the GPU, that was slow and problematic in several platforms. Now it uses directly the CharInfo image. Support for unicode codepoints has also been added.
- REDESIGNED: ImageDraw(), now it includes an additional parameter, the color tint, not only it could be useful for several situations but also function signature is more consistent with similar functions.
- ADDED: ImageFromImage() to generate a new image from a piece of another image.
- REVIEWED: GetNextCodepoint(), renamed parameters to be more clear.
Also all examples and games that were affected by those changes have been reviewed.
2019-07-24 16:05:14 +03:00
Texture2D texture ; // Characters texture atlas
Rectangle * recs ; // Characters rectangles in texture
2017-02-05 04:59:39 +03:00
CharInfo * chars ; // Characters info data
2018-05-04 17:59:48 +03:00
} Font ;
2018-07-09 11:23:53 +03:00
# define SpriteFont Font // SpriteFont type fallback, defaults to Font
2013-11-19 02:38:44 +04:00
2014-04-19 18:36:49 +04:00
// Camera type, defines a camera position/orientation in 3d space
2018-05-01 13:31:03 +03:00
typedef struct Camera3D {
2016-03-05 15:05:45 +03:00
Vector3 position ; // Camera position
Vector3 target ; // Camera target it looks-at
Vector3 up ; // Camera up vector (rotation over its axis)
2018-03-25 01:31:06 +03:00
float fovy ; // Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic
2018-04-11 11:13:00 +03:00
int type ; // Camera type, defines projection type: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
2018-05-01 13:31:03 +03:00
} Camera3D ;
2019-04-12 22:41:30 +03:00
typedef Camera3D Camera ; // Camera type fallback, defaults to Camera3D
2014-04-19 18:36:49 +04:00
2016-03-05 17:40:08 +03:00
// Camera2D type, defines a 2d camera
typedef struct Camera2D {
2016-03-27 19:32:36 +03:00
Vector2 offset ; // Camera offset (displacement from target)
2016-05-02 01:16:32 +03:00
Vector2 target ; // Camera target (rotation and zoom origin)
2016-03-05 17:40:08 +03:00
float rotation ; // Camera rotation in degrees
float zoom ; // Camera zoom (scaling), should be 1.0f by default
} Camera2D ;
2014-04-19 18:36:49 +04:00
// Vertex data definning a mesh
2017-07-21 10:34:09 +03:00
// NOTE: Data stored in CPU memory (and GPU)
2016-01-18 15:36:18 +03:00
typedef struct Mesh {
2017-07-19 11:09:34 +03:00
int vertexCount ; // Number of vertices stored in arrays
int triangleCount ; // Number of triangles stored (indexed or not)
2017-07-21 10:34:09 +03:00
2018-07-24 19:28:58 +03:00
// Default vertex data
2017-07-19 11:09:34 +03:00
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)
2018-02-24 14:31:32 +03:00
float * tangents ; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)
2017-07-19 11:09:34 +03:00
unsigned char * colors ; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
unsigned short * indices ; // Vertex indices (in case vertex data comes indexed)
2018-11-06 17:10:50 +03:00
2018-07-24 19:28:58 +03:00
// Animation vertex data
2019-04-04 14:33:54 +03:00
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)
2018-07-24 19:28:58 +03:00
// OpenGL identifiers
2016-05-31 20:12:37 +03:00
unsigned int vaoId ; // OpenGL Vertex Array Object id
2019-08-07 01:32:44 +03:00
unsigned int * vboId ; // OpenGL Vertex Buffer Objects id (default vertex data)
2016-01-18 15:36:18 +03:00
} Mesh ;
2014-04-19 18:36:49 +04:00
2017-07-17 01:33:40 +03:00
// Shader type (generic)
2015-03-01 18:00:52 +03:00
typedef struct Shader {
2019-08-07 01:32:44 +03:00
unsigned int id ; // Shader program id
int * locs ; // Shader locations array (MAX_SHADER_LOCATIONS)
2015-03-01 18:00:52 +03:00
} Shader ;
2017-07-17 01:33:40 +03:00
// Material texture map
2017-07-19 11:09:34 +03:00
typedef struct MaterialMap {
Texture2D texture ; // Material map texture
Color color ; // Material map color
float value ; // Material map value
} MaterialMap ;
2016-07-29 22:35:57 +03:00
2017-07-17 01:33:40 +03:00
// Material type (generic)
typedef struct Material {
2017-07-19 11:09:34 +03:00
Shader shader ; // Material shader
2019-08-07 01:32:44 +03:00
MaterialMap * maps ; // Material maps array (MAX_MATERIAL_MAPS)
2017-07-19 11:09:34 +03:00
float * params ; // Material generic parameters (if required)
2016-01-25 15:54:09 +03:00
} Material ;
2019-04-04 14:33:54 +03:00
// Transformation properties
typedef struct Transform {
2019-04-04 14:50:52 +03:00
Vector3 translation ; // Translation
2019-04-04 14:33:54 +03:00
Quaternion rotation ; // Rotation
Vector3 scale ; // Scale
} Transform ;
// Bone information
typedef struct BoneInfo {
char name [ 32 ] ; // Bone name
int parent ; // Bone parent
} BoneInfo ;
2016-05-20 13:28:07 +03:00
// Model type
2014-04-19 18:36:49 +04:00
typedef struct Model {
2016-05-31 20:12:37 +03:00
Matrix transform ; // Local transform matrix
2019-04-04 14:50:52 +03:00
2019-03-29 18:48:23 +03:00
int meshCount ; // Number of meshes
Mesh * meshes ; // Meshes array
int materialCount ; // Number of materials
Material * materials ; // Materials array
int * meshMaterial ; // Mesh material number
2019-04-04 14:50:52 +03:00
2019-04-04 14:33:54 +03:00
// Animation data
int boneCount ; // Number of bones
BoneInfo * bones ; // Bones information (skeleton)
Transform * bindPose ; // Bones base transformation (pose)
2014-04-19 18:36:49 +04:00
} Model ;
2013-11-19 02:38:44 +04:00
2019-04-04 14:33:54 +03:00
// Model animation
typedef struct ModelAnimation {
int boneCount ; // Number of bones
BoneInfo * bones ; // Bones information (skeleton)
2019-04-04 14:50:52 +03:00
2019-04-04 14:33:54 +03:00
int frameCount ; // Number of animation frames
Transform * * framePoses ; // Poses array by frame
} ModelAnimation ;
2015-03-02 22:52:58 +03:00
// Ray type (useful for raycast)
typedef struct Ray {
2016-06-03 20:00:58 +03:00
Vector3 position ; // Ray position (origin)
Vector3 direction ; // Ray direction
2015-03-02 22:52:58 +03:00
} Ray ;
2017-05-17 01:33:40 +03:00
// Raycast hit information
2017-01-01 02:06:39 +03:00
typedef struct RayHitInfo {
2017-01-05 21:33:05 +03:00
bool hit ; // Did the ray hit something?
float distance ; // Distance to nearest hit
2017-05-10 01:57:48 +03:00
Vector3 position ; // Position of nearest hit
Vector3 normal ; // Surface normal of hit
2017-01-01 02:06:39 +03:00
} RayHitInfo ;
2019-04-12 12:29:01 +03:00
// Bounding box type
typedef struct BoundingBox {
Vector3 min ; // Minimum vertex box-corner
Vector3 max ; // Maximum vertex box-corner
} BoundingBox ;
2014-12-15 03:08:30 +03:00
// Wave type, defines audio wave data
typedef struct Wave {
2019-07-23 23:21:01 +03:00
unsigned int sampleCount ; // Total number of samples
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
2014-12-15 03:08:30 +03:00
} Wave ;
2019-07-23 23:21:01 +03:00
typedef struct rAudioBuffer rAudioBuffer ;
2016-07-29 22:35:57 +03:00
2016-08-02 18:32:24 +03:00
// Audio stream type
// NOTE: Useful to create custom audio streams not bound to a specific file
typedef struct AudioStream {
2019-07-23 23:21:01 +03:00
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)
2017-11-12 13:59:16 +03:00
2019-07-24 00:08:29 +03:00
rAudioBuffer * buffer ; // Pointer to internal data used by the audio system
2016-08-02 18:32:24 +03:00
} AudioStream ;
2019-07-23 23:21:01 +03:00
// Sound source type
typedef struct Sound {
unsigned int sampleCount ; // Total number of samples
AudioStream stream ; // Audio stream
} Sound ;
// Music stream type (audio file streaming from memory)
// NOTE: Anything longer than ~10 seconds should be streamed
2019-07-26 11:26:39 +03:00
typedef struct Music {
2019-07-23 23:21:01 +03:00
int ctxType ; // Type of music context (audio filetype)
void * ctxData ; // Audio context data, depends on type
2019-10-27 14:13:18 +03:00
2019-07-23 23:21:01 +03:00
unsigned int sampleCount ; // Total number of samples
unsigned int loopCount ; // Loops count (times music will play), 0 means infinite loop
AudioStream stream ; // Audio stream
2019-07-26 11:26:39 +03:00
} Music ;
2019-07-23 23:21:01 +03:00
2017-10-17 14:32:15 +03:00
// Head-Mounted-Display device parameters
typedef struct VrDeviceInfo {
int hResolution ; // HMD horizontal resolution in pixels
int vResolution ; // HMD vertical resolution in pixels
float hScreenSize ; // HMD horizontal size in meters
float vScreenSize ; // HMD vertical size in meters
float vScreenCenter ; // HMD screen center in meters
float eyeToScreenDistance ; // HMD distance between eye and display in meters
float lensSeparationDistance ; // HMD lens separation distance in meters
float interpupillaryDistance ; // HMD IPD (distance between pupils) in meters
float lensDistortionValues [ 4 ] ; // HMD lens distortion constant parameters
float chromaAbCorrection [ 4 ] ; // HMD chromatic aberration correction parameters
} VrDeviceInfo ;
2017-04-21 01:08:00 +03:00
//----------------------------------------------------------------------------------
// Enumerators Definition
//----------------------------------------------------------------------------------
2018-12-03 13:04:32 +03:00
// System config flags
// NOTE: Used for bit masks
typedef enum {
2019-08-27 12:24:04 +03:00
FLAG_RESERVED = 1 , // Reserved
2018-12-03 13:24:11 +03:00
FLAG_FULLSCREEN_MODE = 2 , // Set to run program in fullscreen
FLAG_WINDOW_RESIZABLE = 4 , // Set to allow resizable window
FLAG_WINDOW_UNDECORATED = 8 , // Set to disable window decoration (frame and buttons)
FLAG_WINDOW_TRANSPARENT = 16 , // Set to allow transparent window
2019-01-11 14:21:02 +03:00
FLAG_WINDOW_HIDDEN = 128 , // Set to create the window initially hidden
2019-06-14 18:18:33 +03:00
FLAG_WINDOW_ALWAYS_RUN = 256 , // Set to allow windows running while minimized
2019-01-11 14:21:02 +03:00
FLAG_MSAA_4X_HINT = 32 , // Set to try enabling MSAA 4X
FLAG_VSYNC_HINT = 64 // Set to try enabling V-Sync on GPU
2018-12-03 13:04:32 +03:00
} ConfigFlag ;
2017-04-21 01:08:00 +03:00
// Trace log type
2018-12-03 13:04:32 +03:00
typedef enum {
2019-04-11 01:11:11 +03:00
LOG_ALL = 0 , // Display all logs
2019-01-21 00:22:21 +03:00
LOG_TRACE ,
LOG_DEBUG ,
LOG_INFO ,
LOG_WARNING ,
LOG_ERROR ,
LOG_FATAL ,
2019-04-11 01:11:11 +03:00
LOG_NONE // Disable logging
2018-12-03 13:04:32 +03:00
} TraceLogType ;
// Keyboard keys
typedef enum {
// Alphanumeric keys
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 ,
2018-12-24 16:09:51 +03:00
2018-12-03 13:04:32 +03:00
// Function keys
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_LEFT_BRACKET = 91 ,
KEY_BACKSLASH = 92 ,
KEY_RIGHT_BRACKET = 93 ,
KEY_GRAVE = 96 ,
2018-12-24 16:09:51 +03:00
2018-12-03 13:04:32 +03:00
// Keypad keys
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
} KeyboardKey ;
// Android buttons
typedef enum {
KEY_BACK = 4 ,
KEY_MENU = 82 ,
KEY_VOLUME_UP = 24 ,
KEY_VOLUME_DOWN = 25
} AndroidButton ;
// Mouse buttons
typedef enum {
MOUSE_LEFT_BUTTON = 0 ,
MOUSE_RIGHT_BUTTON = 1 ,
MOUSE_MIDDLE_BUTTON = 2
} MouseButton ;
// Gamepad number
typedef enum {
GAMEPAD_PLAYER1 = 0 ,
GAMEPAD_PLAYER2 = 1 ,
GAMEPAD_PLAYER3 = 2 ,
GAMEPAD_PLAYER4 = 3
} GamepadNumber ;
2019-04-27 22:49:33 +03:00
// Gamepad Buttons
2019-04-28 19:23:21 +03:00
typedef enum {
2019-04-28 17:59:39 +03:00
// This is here just for error checking
2019-04-27 22:49:33 +03:00
GAMEPAD_BUTTON_UNKNOWN = 0 ,
2019-11-25 02:13:05 +03:00
// This is normally a DPAD
2019-04-27 22:49:33 +03:00
GAMEPAD_BUTTON_LEFT_FACE_UP ,
2019-04-28 18:08:07 +03:00
GAMEPAD_BUTTON_LEFT_FACE_RIGHT ,
GAMEPAD_BUTTON_LEFT_FACE_DOWN ,
2019-04-27 22:49:33 +03:00
GAMEPAD_BUTTON_LEFT_FACE_LEFT ,
2019-06-29 11:49:42 +03:00
2019-11-25 02:13:05 +03:00
// This normally corresponds with PlayStation and Xbox controllers
// XBOX: [Y,X,A,B]
// PS3: [Triangle,Square,Cross,Circle]
// No support for 6 button controllers though..
2019-04-28 18:08:07 +03:00
GAMEPAD_BUTTON_RIGHT_FACE_UP ,
GAMEPAD_BUTTON_RIGHT_FACE_RIGHT ,
GAMEPAD_BUTTON_RIGHT_FACE_DOWN ,
GAMEPAD_BUTTON_RIGHT_FACE_LEFT ,
2019-04-27 22:49:33 +03:00
2019-04-28 17:59:39 +03:00
// Triggers
2019-04-27 22:49:33 +03:00
GAMEPAD_BUTTON_LEFT_TRIGGER_1 ,
GAMEPAD_BUTTON_LEFT_TRIGGER_2 ,
2019-04-28 18:08:07 +03:00
GAMEPAD_BUTTON_RIGHT_TRIGGER_1 ,
GAMEPAD_BUTTON_RIGHT_TRIGGER_2 ,
2019-04-27 22:49:33 +03:00
2019-04-28 17:59:39 +03:00
// These are buttons in the center of the gamepad
2019-04-28 19:23:21 +03:00
GAMEPAD_BUTTON_MIDDLE_LEFT , //PS3 Select
GAMEPAD_BUTTON_MIDDLE , //PS Button/XBOX Button
GAMEPAD_BUTTON_MIDDLE_RIGHT , //PS3 Start
2019-04-27 22:49:33 +03:00
2019-04-28 17:59:39 +03:00
// These are the joystick press in buttons
2019-04-27 22:49:33 +03:00
GAMEPAD_BUTTON_LEFT_THUMB ,
2019-04-28 18:08:07 +03:00
GAMEPAD_BUTTON_RIGHT_THUMB
2019-04-27 22:49:33 +03:00
} GamepadButton ;
2019-04-28 19:23:21 +03:00
typedef enum {
2019-04-28 18:08:07 +03:00
// This is here just for error checking
2019-04-27 22:49:33 +03:00
GAMEPAD_AXIS_UNKNOWN = 0 ,
2019-04-27 23:43:32 +03:00
2019-04-28 17:59:39 +03:00
// Left stick
2019-04-28 18:08:07 +03:00
GAMEPAD_AXIS_LEFT_X ,
GAMEPAD_AXIS_LEFT_Y ,
2019-04-27 22:49:33 +03:00
2019-04-28 17:59:39 +03:00
// Right stick
2019-04-28 18:08:07 +03:00
GAMEPAD_AXIS_RIGHT_X ,
GAMEPAD_AXIS_RIGHT_Y ,
2019-04-27 22:49:33 +03:00
2019-04-28 17:59:39 +03:00
// Pressure levels for the back triggers
2019-04-28 19:23:21 +03:00
GAMEPAD_AXIS_LEFT_TRIGGER , // [1..-1] (pressure-level)
GAMEPAD_AXIS_RIGHT_TRIGGER // [1..-1] (pressure-level)
2019-04-27 22:49:33 +03:00
} GamepadAxis ;
2017-07-19 11:09:34 +03:00
// Shader location point type
2017-07-17 01:33:40 +03:00
typedef enum {
LOC_VERTEX_POSITION = 0 ,
LOC_VERTEX_TEXCOORD01 ,
LOC_VERTEX_TEXCOORD02 ,
LOC_VERTEX_NORMAL ,
LOC_VERTEX_TANGENT ,
LOC_VERTEX_COLOR ,
LOC_MATRIX_MVP ,
LOC_MATRIX_MODEL ,
LOC_MATRIX_VIEW ,
LOC_MATRIX_PROJECTION ,
LOC_VECTOR_VIEW ,
LOC_COLOR_DIFFUSE ,
LOC_COLOR_SPECULAR ,
LOC_COLOR_AMBIENT ,
2017-07-19 11:09:34 +03:00
LOC_MAP_ALBEDO , // LOC_MAP_DIFFUSE
LOC_MAP_METALNESS , // LOC_MAP_SPECULAR
LOC_MAP_NORMAL ,
LOC_MAP_ROUGHNESS ,
2018-03-11 12:49:51 +03:00
LOC_MAP_OCCLUSION ,
2017-07-19 11:09:34 +03:00
LOC_MAP_EMISSION ,
LOC_MAP_HEIGHT ,
LOC_MAP_CUBEMAP ,
LOC_MAP_IRRADIANCE ,
LOC_MAP_PREFILTER ,
LOC_MAP_BRDF
2017-07-17 01:33:40 +03:00
} ShaderLocationIndex ;
2017-07-19 11:09:34 +03:00
# define LOC_MAP_DIFFUSE LOC_MAP_ALBEDO
# define LOC_MAP_SPECULAR LOC_MAP_METALNESS
2017-07-17 01:33:40 +03:00
2019-01-10 13:25:26 +03:00
// Shader uniform data types
typedef enum {
2019-01-10 14:28:23 +03:00
UNIFORM_FLOAT = 0 ,
UNIFORM_VEC2 ,
UNIFORM_VEC3 ,
UNIFORM_VEC4 ,
2019-01-10 13:25:26 +03:00
UNIFORM_INT ,
UNIFORM_IVEC2 ,
UNIFORM_IVEC3 ,
UNIFORM_IVEC4 ,
2019-01-10 14:28:23 +03:00
UNIFORM_SAMPLER2D
2019-01-10 13:25:26 +03:00
} ShaderUniformDataType ;
2017-07-19 11:09:34 +03:00
// Material map type
2017-07-17 01:33:40 +03:00
typedef enum {
2017-07-19 11:09:34 +03:00
MAP_ALBEDO = 0 , // MAP_DIFFUSE
MAP_METALNESS = 1 , // MAP_SPECULAR
MAP_NORMAL = 2 ,
MAP_ROUGHNESS = 3 ,
MAP_OCCLUSION ,
MAP_EMISSION ,
MAP_HEIGHT ,
MAP_CUBEMAP , // NOTE: Uses GL_TEXTURE_CUBE_MAP
MAP_IRRADIANCE , // NOTE: Uses GL_TEXTURE_CUBE_MAP
MAP_PREFILTER , // NOTE: Uses GL_TEXTURE_CUBE_MAP
MAP_BRDF
2019-04-05 14:15:56 +03:00
} MaterialMapType ;
2017-07-17 01:33:40 +03:00
2017-07-19 11:09:34 +03:00
# define MAP_DIFFUSE MAP_ALBEDO
# define MAP_SPECULAR MAP_METALNESS
2017-07-17 01:33:40 +03:00
2018-01-06 15:43:48 +03:00
// Pixel formats
2015-05-05 00:46:31 +03:00
// NOTE: Support depends on OpenGL version and platform
2015-04-06 15:02:29 +03:00
typedef enum {
UNCOMPRESSED_GRAYSCALE = 1 , // 8 bit per pixel (no alpha)
2018-01-06 15:43:48 +03:00
UNCOMPRESSED_GRAY_ALPHA , // 8*2 bpp (2 channels)
2015-04-06 15:02:29 +03:00
UNCOMPRESSED_R5G6B5 , // 16 bpp
UNCOMPRESSED_R8G8B8 , // 24 bpp
UNCOMPRESSED_R5G5B5A1 , // 16 bpp (1 bit alpha)
UNCOMPRESSED_R4G4B4A4 , // 16 bpp (4 bit alpha)
UNCOMPRESSED_R8G8B8A8 , // 32 bpp
2018-01-06 15:43:48 +03:00
UNCOMPRESSED_R32 , // 32 bpp (1 channel - float)
UNCOMPRESSED_R32G32B32 , // 32*3 bpp (3 channels - float)
UNCOMPRESSED_R32G32B32A32 , // 32*4 bpp (4 channels - float)
2015-04-06 15:02:29 +03:00
COMPRESSED_DXT1_RGB , // 4 bpp (no alpha)
COMPRESSED_DXT1_RGBA , // 4 bpp (1 bit alpha)
COMPRESSED_DXT3_RGBA , // 8 bpp
COMPRESSED_DXT5_RGBA , // 8 bpp
COMPRESSED_ETC1_RGB , // 4 bpp
COMPRESSED_ETC2_RGB , // 4 bpp
COMPRESSED_ETC2_EAC_RGBA , // 8 bpp
2015-04-13 21:15:28 +03:00
COMPRESSED_PVRT_RGB , // 4 bpp
COMPRESSED_PVRT_RGBA , // 4 bpp
2015-05-05 00:46:31 +03:00
COMPRESSED_ASTC_4x4_RGBA , // 8 bpp
COMPRESSED_ASTC_8x8_RGBA // 2 bpp
2018-01-06 15:43:48 +03:00
} PixelFormat ;
2015-04-06 15:02:29 +03:00
2016-10-27 14:41:43 +03:00
// Texture parameters: filter mode
2016-10-29 23:17:19 +03:00
// NOTE 1: Filtering considers mipmaps if available in the texture
// NOTE 2: Filter is accordingly set for minification and magnification
2016-12-22 04:19:49 +03:00
typedef enum {
2016-10-29 23:17:19 +03:00
FILTER_POINT = 0 , // No filter, just pixel aproximation
FILTER_BILINEAR , // Linear filtering
FILTER_TRILINEAR , // Trilinear filtering (linear with mipmaps)
FILTER_ANISOTROPIC_4X , // Anisotropic filtering 4x
FILTER_ANISOTROPIC_8X , // Anisotropic filtering 8x
FILTER_ANISOTROPIC_16X , // Anisotropic filtering 16x
} TextureFilterMode ;
2016-10-27 14:41:43 +03:00
2019-02-04 15:27:36 +03:00
// Cubemap layout type
typedef enum {
CUBEMAP_AUTO_DETECT = 0 , // Automatically detect layout type
CUBEMAP_LINE_VERTICAL , // Layout is defined by a vertical line with faces
CUBEMAP_LINE_HORIZONTAL , // Layout is defined by an horizontal line with faces
CUBEMAP_CROSS_THREE_BY_FOUR , // Layout is defined by a 3x4 cross with cubemap faces
CUBEMAP_CROSS_FOUR_BY_THREE , // Layout is defined by a 4x3 cross with cubemap faces
CUBEMAP_PANORAMA // Layout is defined by a panorama image (equirectangular map)
} CubemapLayoutType ;
2016-10-27 14:41:43 +03:00
// Texture parameters: wrap mode
2018-06-30 22:56:26 +03:00
typedef enum {
2018-12-03 13:24:11 +03:00
WRAP_REPEAT = 0 , // Repeats texture in tiled mode
WRAP_CLAMP , // Clamps texture to edge pixel in tiled mode
2018-12-03 14:00:05 +03:00
WRAP_MIRROR_REPEAT , // Mirrors and repeats the texture in tiled mode
WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode
2017-04-21 01:08:00 +03:00
} TextureWrapMode ;
2016-10-27 14:41:43 +03:00
2018-09-06 17:56:21 +03:00
// Font type, defines generation method
typedef enum {
2018-12-03 13:24:11 +03:00
FONT_DEFAULT = 0 , // Default font generation, anti-aliased
FONT_BITMAP , // Bitmap font generation, no anti-aliasing
FONT_SDF // SDF font generation, requires external shader
2018-09-06 17:56:21 +03:00
} FontType ;
2015-08-07 18:24:28 +03:00
// Color blending modes (pre-defined)
2018-06-30 22:56:26 +03:00
typedef enum {
2018-12-03 13:24:11 +03:00
BLEND_ALPHA = 0 , // Blend textures considering alpha (default)
BLEND_ADDITIVE , // Blend textures adding colors
BLEND_MULTIPLIED // Blend textures multiplying colors
2017-04-21 01:08:00 +03:00
} BlendMode ;
2015-08-07 18:24:28 +03:00
2015-05-05 00:46:31 +03:00
// Gestures type
2015-07-05 19:21:01 +03:00
// NOTE: It could be used as flags to enable only some gestures
2015-05-05 00:46:31 +03:00
typedef enum {
2016-02-02 18:43:42 +03:00
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
2018-12-03 13:04:32 +03:00
} GestureType ;
2015-05-05 00:46:31 +03:00
2015-07-29 22:45:28 +03:00
// Camera system modes
2016-12-22 04:19:49 +03:00
typedef enum {
CAMERA_CUSTOM = 0 ,
CAMERA_FREE ,
CAMERA_ORBITAL ,
CAMERA_FIRST_PERSON ,
CAMERA_THIRD_PERSON
2016-09-25 15:28:24 +03:00
} CameraMode ;
2015-07-29 22:45:28 +03:00
2018-04-11 11:13:00 +03:00
// Camera projection modes
typedef enum {
CAMERA_PERSPECTIVE = 0 ,
CAMERA_ORTHOGRAPHIC
} CameraType ;
2018-08-04 02:50:13 +03:00
// Type of n-patch
typedef enum {
2018-12-03 13:24:11 +03:00
NPT_9PATCH = 0 , // Npatch defined by 3x3 tiles
NPT_3PATCH_VERTICAL , // Npatch defined by 1x3 tiles
NPT_3PATCH_HORIZONTAL // Npatch defined by 3x1 tiles
2018-08-04 02:50:13 +03:00
} NPatchType ;
2018-07-26 22:57:45 +03:00
// Callbacks to be implemented by users
2019-01-21 12:05:40 +03:00
typedef void ( * TraceLogCallback ) ( int logType , const char * text , va_list args ) ;
2018-07-26 22:57:45 +03:00
2018-10-16 11:53:01 +03:00
# if defined(__cplusplus)
2013-11-23 16:30:54 +04:00
extern " C " { // Prevents name mangling of functions
2013-11-19 02:38:44 +04:00
# endif
//------------------------------------------------------------------------------------
// Global Variables Definition
//------------------------------------------------------------------------------------
// It's lonely here...
//------------------------------------------------------------------------------------
// Window and Graphics Device Functions (Module: core)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Window-related functions
2018-04-02 15:49:01 +03:00
RLAPI void InitWindow ( int width , int height , const char * title ) ; // Initialize window and OpenGL context
2019-01-10 19:06:26 +03:00
RLAPI bool WindowShouldClose ( void ) ; // Check if KEY_ESCAPE pressed or Close icon pressed
2017-12-15 15:44:31 +03:00
RLAPI void CloseWindow ( void ) ; // Close window and unload OpenGL context
2018-02-04 14:26:28 +03:00
RLAPI bool IsWindowReady ( void ) ; // Check if window has been initialized successfully
2017-05-09 23:03:46 +03:00
RLAPI bool IsWindowMinimized ( void ) ; // Check if window has been minimized (or lost focus)
2019-03-05 00:58:20 +03:00
RLAPI bool IsWindowResized ( void ) ; // Check if window has been resized
2019-01-10 19:06:26 +03:00
RLAPI bool IsWindowHidden ( void ) ; // Check if window is currently hidden
2017-05-09 23:03:46 +03:00
RLAPI void ToggleFullscreen ( void ) ; // Toggle fullscreen mode (only PLATFORM_DESKTOP)
2019-01-17 18:29:36 +03:00
RLAPI void UnhideWindow ( void ) ; // Show the window
2019-01-10 19:06:26 +03:00
RLAPI void HideWindow ( void ) ; // Hide the window
2017-02-05 05:00:35 +03:00
RLAPI void SetWindowIcon ( Image image ) ; // Set icon for window (only PLATFORM_DESKTOP)
2017-09-08 10:35:54 +03:00
RLAPI void SetWindowTitle ( const char * title ) ; // Set title for window (only PLATFORM_DESKTOP)
2017-03-05 12:55:29 +03:00
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 (fullscreen mode)
2017-05-02 16:04:32 +03:00
RLAPI void SetWindowMinSize ( int width , int height ) ; // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
2018-03-09 13:43:53 +03:00
RLAPI void SetWindowSize ( int width , int height ) ; // Set window dimensions
2019-01-10 19:06:26 +03:00
RLAPI void * GetWindowHandle ( void ) ; // Get native window handle
2016-08-13 12:31:15 +03:00
RLAPI int GetScreenWidth ( void ) ; // Get current screen width
RLAPI int GetScreenHeight ( void ) ; // Get current screen height
2018-09-27 18:23:11 +03:00
RLAPI int GetMonitorCount ( void ) ; // Get number of connected monitors
2018-09-30 17:20:02 +03:00
RLAPI int GetMonitorWidth ( int monitor ) ; // Get primary monitor width
RLAPI int GetMonitorHeight ( int monitor ) ; // Get primary monitor height
RLAPI int GetMonitorPhysicalWidth ( int monitor ) ; // Get primary monitor physical width in millimetres
RLAPI int GetMonitorPhysicalHeight ( int monitor ) ; // Get primary monitor physical height in millimetres
2019-09-10 13:43:44 +03:00
RLAPI Vector2 GetWindowPosition ( void ) ; // Get window position XY on monitor
2018-09-30 17:20:02 +03:00
RLAPI const char * GetMonitorName ( int monitor ) ; // Get the human-readable, UTF-8 encoded name of the primary monitor
2019-02-11 20:03:06 +03:00
RLAPI const char * GetClipboardText ( void ) ; // Get clipboard text content
RLAPI void SetClipboardText ( const char * text ) ; // Set clipboard text content
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Cursor-related functions
2017-12-15 15:44:31 +03:00
RLAPI void ShowCursor ( void ) ; // Shows cursor
RLAPI void HideCursor ( void ) ; // Hides cursor
2017-05-09 23:03:46 +03:00
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)
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Drawing-related functions
2017-05-09 23:03:46 +03:00
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)
2018-05-04 17:54:05 +03:00
RLAPI void BeginMode2D ( Camera2D camera ) ; // Initialize 2D mode with custom camera (2D)
RLAPI void EndMode2D ( void ) ; // Ends 2D mode with custom camera
RLAPI void BeginMode3D ( Camera3D camera ) ; // Initializes 3D mode with custom camera (3D)
RLAPI void EndMode3D ( void ) ; // Ends 3D mode and returns to default 2D orthographic mode
2016-08-13 12:31:15 +03:00
RLAPI void BeginTextureMode ( RenderTexture2D target ) ; // Initializes render texture for drawing
RLAPI void EndTextureMode ( void ) ; // Ends drawing to render texture
2019-08-26 22:09:03 +03:00
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
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Screen-space-related functions
2018-05-03 20:19:35 +03:00
RLAPI Ray GetMouseRay ( Vector2 mousePosition , Camera camera ) ; // Returns a ray trace from mouse position
2016-08-13 12:31:15 +03:00
RLAPI Matrix GetCameraMatrix ( Camera camera ) ; // Returns camera transform matrix (view matrix)
2019-08-27 14:15:56 +03:00
RLAPI Matrix GetCameraMatrix2D ( Camera2D camera ) ; // Returns camera 2d transform matrix
RLAPI Vector2 GetWorldToScreen ( Vector3 position , Camera camera ) ; // Returns the screen space position for a 3d world space position
2020-01-24 20:54:53 +03:00
RLAPI Vector2 GetWorldToScreenEx ( Vector3 position , Camera camera , int width , int height ) ; // Returns size position for a 3d world space position
2019-08-27 14:15:56 +03:00
RLAPI Vector2 GetWorldToScreen2D ( Vector2 position , Camera2D camera ) ; // Returns the screen space position for a 2d camera world space position
RLAPI Vector2 GetScreenToWorld2D ( Vector2 position , Camera2D camera ) ; // Returns the world space position for a 2d camera screen space position
2016-08-13 12:31:15 +03:00
2019-04-12 14:29:37 +03:00
// Timing-related functions
2016-08-13 12:31:15 +03:00
RLAPI void SetTargetFPS ( int fps ) ; // Set target FPS (maximum)
2017-03-05 21:17:00 +03:00
RLAPI int GetFPS ( void ) ; // Returns current FPS
2017-05-09 23:03:46 +03:00
RLAPI float GetFrameTime ( void ) ; // Returns time in seconds for last frame drawn
2017-12-19 16:06:54 +03:00
RLAPI double GetTime ( void ) ; // Returns elapsed time in seconds since InitWindow()
2017-12-14 13:50:35 +03:00
2017-05-15 12:30:09 +03:00
// Color-related functions
2018-02-12 13:55:22 +03:00
RLAPI int ColorToInt ( Color color ) ; // Returns hexadecimal value for a Color
2018-04-29 19:39:46 +03:00
RLAPI Vector4 ColorNormalize ( Color color ) ; // Returns color normalized as float [0..1]
2019-11-08 23:02:41 +03:00
RLAPI Color ColorFromNormalized ( Vector4 normalized ) ; // Returns color from normalized values [0..1]
2018-02-12 13:55:22 +03:00
RLAPI Vector3 ColorToHSV ( Color color ) ; // Returns HSV values for a Color
2019-01-14 15:49:17 +03:00
RLAPI Color ColorFromHSV ( Vector3 hsv ) ; // Returns a Color from HSV values
2017-05-15 12:30:09 +03:00
RLAPI Color GetColor ( int hexValue ) ; // Returns a Color struct from hexadecimal value
RLAPI Color Fade ( Color color , float alpha ) ; // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f
2017-07-21 16:25:35 +03:00
2017-05-15 12:30:09 +03:00
// Misc. functions
2019-06-14 18:18:33 +03:00
RLAPI void SetConfigFlags ( unsigned int flags ) ; // Setup window configuration flags (view FLAGS)
2019-01-21 12:32:14 +03:00
RLAPI void SetTraceLogLevel ( int logType ) ; // Set the current threshold (minimum) log level
RLAPI void SetTraceLogExit ( int logType ) ; // Set the exit threshold (minimum) log level
RLAPI void SetTraceLogCallback ( TraceLogCallback callback ) ; // Set a trace log callback to enable custom logging
RLAPI void TraceLog ( int logType , const char * text , . . . ) ; // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR)
2017-05-11 17:24:40 +03:00
RLAPI void TakeScreenshot ( const char * fileName ) ; // Takes a screenshot of current screen (saved a .png)
2017-05-15 12:30:09 +03:00
RLAPI int GetRandomValue ( int min , int max ) ; // Returns a random value between min and max (both included)
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Files management functions
2020-02-26 22:29:33 +03:00
RLAPI unsigned char * LoadFileData ( const char * fileName , int * bytesRead ) ; // Load file data as byte array (read)
RLAPI void SaveFileData ( const char * fileName , void * data , int bytesToWrite ) ; // Save data to file from byte array (write)
2018-10-16 11:53:01 +03:00
RLAPI bool FileExists ( const char * fileName ) ; // Check if file exists
2017-05-11 17:24:40 +03:00
RLAPI bool IsFileExtension ( const char * fileName , const char * ext ) ; // Check file extension
2019-08-07 01:27:32 +03:00
RLAPI bool DirectoryExists ( const char * dirPath ) ; // Check if a directory path exists
2018-01-02 04:26:05 +03:00
RLAPI const char * GetExtension ( const char * fileName ) ; // Get pointer to extension for a filename string
RLAPI const char * GetFileName ( const char * filePath ) ; // Get pointer to filename for a path string
2019-08-21 19:59:15 +03:00
RLAPI const char * GetFileNameWithoutExt ( const char * filePath ) ; // Get filename string without extension (uses static string)
2019-08-11 13:04:54 +03:00
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)
2018-01-02 04:26:05 +03:00
RLAPI const char * GetWorkingDirectory ( void ) ; // Get current working directory (uses static string)
2018-10-08 13:29:02 +03:00
RLAPI char * * GetDirectoryFiles ( const char * dirPath , int * count ) ; // Get filenames in a directory path (memory should be freed)
RLAPI void ClearDirectoryFiles ( void ) ; // Clear directory files paths buffers (free memory)
2017-05-11 17:24:40 +03:00
RLAPI bool ChangeDirectory ( const char * dir ) ; // Change working directory, returns true if success
2017-05-09 23:03:46 +03:00
RLAPI bool IsFileDropped ( void ) ; // Check if a file has been dropped into window
2018-10-08 13:29:02 +03:00
RLAPI char * * GetDroppedFiles ( int * count ) ; // Get dropped files names (memory should be freed)
RLAPI void ClearDroppedFiles ( void ) ; // Clear dropped files paths buffer (free memory)
2018-10-13 16:59:17 +03:00
RLAPI long GetFileModTime ( const char * fileName ) ; // Get file modification time (last write time)
2016-08-13 12:31:15 +03:00
2019-09-15 12:15:33 +03:00
RLAPI unsigned char * CompressData ( unsigned char * data , int dataLength , int * compDataLength ) ; // Compress data (DEFLATE algorythm)
RLAPI unsigned char * DecompressData ( unsigned char * compData , int compDataLength , int * dataLength ) ; // Decompress data (DEFLATE algorythm)
2019-09-09 22:56:16 +03:00
2017-05-15 12:30:09 +03:00
// Persistent storage management
2020-02-27 01:40:53 +03:00
RLAPI void SaveStorageValue ( int position , int value ) ; // Save integer value to storage file (to defined position)
RLAPI int LoadStorageValue ( int position ) ; // Load integer value from storage file (from defined position)
2016-01-04 17:12:34 +03:00
2018-11-10 01:09:02 +03:00
RLAPI void OpenURL ( const char * url ) ; // Open URL with default system browser (if available)
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Input Handling Functions (Module: core)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Input-related functions: keyboard
2016-08-13 12:31:15 +03:00
RLAPI bool IsKeyPressed ( int key ) ; // Detect if a key has been pressed once
RLAPI bool IsKeyDown ( int key ) ; // Detect if a key is being pressed
RLAPI bool IsKeyReleased ( int key ) ; // Detect if a key has been released once
RLAPI bool IsKeyUp ( int key ) ; // Detect if a key is NOT being pressed
RLAPI void SetExitKey ( int key ) ; // Set a custom key to exit program (default is ESC)
2019-11-24 15:39:45 +03:00
RLAPI int GetKeyPressed ( void ) ; // Get key pressed, call it multiple times for chars queued
2019-11-24 14:46:00 +03:00
2017-05-15 12:30:09 +03:00
// Input-related functions: gamepads
2016-08-13 12:31:15 +03:00
RLAPI bool IsGamepadAvailable ( int gamepad ) ; // Detect if a gamepad is available
2016-11-01 16:39:57 +03:00
RLAPI bool IsGamepadName ( int gamepad , const char * name ) ; // Check gamepad name (if available)
2016-10-14 01:47:43 +03:00
RLAPI const char * GetGamepadName ( int gamepad ) ; // Return gamepad internal name id
2016-08-13 12:31:15 +03:00
RLAPI bool IsGamepadButtonPressed ( int gamepad , int button ) ; // Detect if a gamepad button has been pressed once
RLAPI bool IsGamepadButtonDown ( int gamepad , int button ) ; // Detect if a gamepad button is being pressed
RLAPI bool IsGamepadButtonReleased ( int gamepad , int button ) ; // Detect if a gamepad button has been released once
RLAPI bool IsGamepadButtonUp ( int gamepad , int button ) ; // Detect if a gamepad button is NOT being pressed
2016-10-27 14:41:43 +03:00
RLAPI int GetGamepadButtonPressed ( void ) ; // Get the last gamepad button pressed
2016-11-01 16:39:57 +03:00
RLAPI int GetGamepadAxisCount ( int gamepad ) ; // Return gamepad axis count for a gamepad
RLAPI float GetGamepadAxisMovement ( int gamepad , int axis ) ; // Return axis movement value for a gamepad axis
2013-11-28 22:59:56 +04:00
2017-05-15 12:30:09 +03:00
// Input-related functions: mouse
2016-08-13 12:31:15 +03:00
RLAPI bool IsMouseButtonPressed ( int button ) ; // Detect if a mouse button has been pressed once
RLAPI bool IsMouseButtonDown ( int button ) ; // Detect if a mouse button is being pressed
RLAPI bool IsMouseButtonReleased ( int button ) ; // Detect if a mouse button has been released once
RLAPI bool IsMouseButtonUp ( int button ) ; // Detect if a mouse button is NOT being pressed
RLAPI int GetMouseX ( void ) ; // Returns mouse position X
RLAPI int GetMouseY ( void ) ; // Returns mouse position Y
RLAPI Vector2 GetMousePosition ( void ) ; // Returns mouse position XY
2019-01-03 15:53:20 +03:00
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
2016-08-13 12:31:15 +03:00
RLAPI int GetMouseWheelMove ( void ) ; // Returns mouse wheel movement Y
2015-02-26 15:52:03 +03:00
2017-05-15 12:30:09 +03:00
// Input-related functions: touch
2016-08-13 12:31:15 +03:00
RLAPI int GetTouchX ( void ) ; // Returns touch position X for touch point 0 (relative to screen size)
RLAPI int GetTouchY ( void ) ; // Returns touch position Y for touch point 0 (relative to screen size)
RLAPI Vector2 GetTouchPosition ( int index ) ; // Returns touch position XY for a touch point index (relative to screen size)
2016-01-24 21:17:08 +03:00
2015-10-30 13:30:32 +03:00
//------------------------------------------------------------------------------------
// Gestures and Touch Handling Functions (Module: gestures)
//------------------------------------------------------------------------------------
2016-08-13 12:31:15 +03:00
RLAPI void SetGesturesEnabled ( unsigned int gestureFlags ) ; // Enable a set of gestures using flags
RLAPI bool IsGestureDetected ( int gesture ) ; // Check if a gesture have been detected
RLAPI int GetGestureDetected ( void ) ; // Get latest detected gesture
RLAPI int GetTouchPointsCount ( void ) ; // Get touch points count
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
2013-11-19 02:38:44 +04:00
2015-07-29 22:45:28 +03:00
//------------------------------------------------------------------------------------
// Camera System Functions (Module: camera)
//------------------------------------------------------------------------------------
2016-11-17 14:55:30 +03:00
RLAPI void SetCameraMode ( Camera camera , int mode ) ; // Set camera mode (multiple camera modes available)
2016-09-26 20:15:44 +03:00
RLAPI void UpdateCamera ( Camera * camera ) ; // Update camera position for selected mode
2015-07-29 22:45:28 +03:00
2016-08-13 12:31:15 +03:00
RLAPI void SetCameraPanControl ( int panKey ) ; // Set camera pan key to combine with mouse movement (free camera)
RLAPI void SetCameraAltControl ( int altKey ) ; // Set camera alt key to combine with mouse movement (free camera)
RLAPI void SetCameraSmoothZoomControl ( int szKey ) ; // Set camera smooth zoom key to combine with mouse (free camera)
2018-05-03 20:19:35 +03:00
RLAPI void SetCameraMoveControls ( int frontKey , int backKey , int rightKey , int leftKey , int upKey , int downKey ) ; // Set camera move controls (1st person and 3rd person cameras)
2015-07-29 22:45:28 +03:00
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Basic Shapes Drawing Functions (Module: shapes)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Basic shapes drawing functions
2016-08-13 12:31:15 +03:00
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 (Vector version)
2017-03-05 23:04:07 +03:00
RLAPI void DrawLineEx ( Vector2 startPos , Vector2 endPos , float thick , Color color ) ; // Draw a line defining thickness
2017-03-14 02:22:53 +03:00
RLAPI void DrawLineBezier ( Vector2 startPos , Vector2 endPos , float thick , Color color ) ; // Draw a line using cubic-bezier curves in-out
2019-04-28 15:45:46 +03:00
RLAPI void DrawLineStrip ( Vector2 * points , int numPoints , Color color ) ; // Draw lines sequence
2016-08-13 12:31:15 +03:00
RLAPI void DrawCircle ( int centerX , int centerY , float radius , Color color ) ; // Draw a color-filled circle
2019-03-28 20:53:41 +03:00
RLAPI void DrawCircleSector ( Vector2 center , float radius , int startAngle , int endAngle , int segments , Color color ) ; // Draw a piece of a circle
2019-03-29 17:22:09 +03:00
RLAPI void DrawCircleSectorLines ( Vector2 center , float radius , int startAngle , int endAngle , int segments , Color color ) ; // Draw circle sector outline
2016-08-13 12:31:15 +03:00
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
2020-01-27 18:21:37 +03:00
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
2019-03-29 17:22:09 +03:00
RLAPI void DrawRing ( Vector2 center , float innerRadius , float outerRadius , int startAngle , int endAngle , int segments , Color color ) ; // Draw ring
RLAPI void DrawRingLines ( Vector2 center , float innerRadius , float outerRadius , int startAngle , int endAngle , int segments , Color color ) ; // Draw ring outline
2016-08-13 12:31:15 +03:00
RLAPI void DrawRectangle ( int posX , int posY , int width , int height , Color color ) ; // Draw a color-filled rectangle
2018-01-01 18:54:32 +03:00
RLAPI void DrawRectangleV ( Vector2 position , Vector2 size , Color color ) ; // Draw a color-filled rectangle (Vector version)
2016-08-13 12:31:15 +03:00
RLAPI void DrawRectangleRec ( Rectangle rec , Color color ) ; // Draw a color-filled rectangle
2018-12-26 12:51:13 +03:00
RLAPI void DrawRectanglePro ( Rectangle rec , Vector2 origin , float rotation , Color color ) ; // Draw a color-filled rectangle with pro parameters
2017-09-30 01:46:31 +03:00
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
2017-08-27 22:02:24 +03:00
RLAPI void DrawRectangleGradientEx ( Rectangle rec , Color col1 , Color col2 , Color col3 , Color col4 ) ; // Draw a gradient-filled rectangle with custom vertex colors
2016-08-13 12:31:15 +03:00
RLAPI void DrawRectangleLines ( int posX , int posY , int width , int height , Color color ) ; // Draw rectangle outline
2018-02-02 13:01:38 +03:00
RLAPI void DrawRectangleLinesEx ( Rectangle rec , int lineThick , Color color ) ; // Draw rectangle outline with extended parameters
2019-04-04 14:50:52 +03:00
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 , int lineThick , Color color ) ; // Draw rectangle with rounded edges outline
2019-08-11 22:26:12 +03:00
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 numPoints , Color color ) ; // Draw a triangle fan defined by points (first vertex is the center)
2019-06-17 11:29:58 +03:00
RLAPI void DrawTriangleStrip ( Vector2 * points , int pointsCount , Color color ) ; // Draw a triangle strip defined by points
2016-08-13 12:31:15 +03:00
RLAPI void DrawPoly ( Vector2 center , int sides , float radius , float rotation , Color color ) ; // Draw a regular polygon (Vector version)
2020-01-09 20:34:20 +03:00
RLAPI void DrawPolyLines ( Vector2 center , int sides , float radius , float rotation , Color color ) ; // Draw a polygon outline of n sides
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Basic shapes collision detection functions
2016-08-13 12:31:15 +03:00
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 Rectangle GetCollisionRec ( Rectangle rec1 , Rectangle rec2 ) ; // Get collision rectangle for two rectangles collision
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
2013-11-30 21:12:40 +04:00
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Texture Loading and Drawing Functions (Module: textures)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
2017-06-28 15:32:18 +03:00
// Image/Texture2D data loading/unloading/saving functions
2016-12-25 04:01:13 +03:00
RLAPI Image LoadImage ( const char * fileName ) ; // Load image from file into CPU memory (RAM)
RLAPI Image LoadImageEx ( Color * pixels , int width , int height ) ; // Load image from Color array data (RGBA - 32bit)
RLAPI Image LoadImagePro ( void * data , int width , int height , int format ) ; // Load image from raw data with parameters
RLAPI Image LoadImageRaw ( const char * fileName , int width , int height , int format , int headerSize ) ; // Load image from RAW file data
2018-09-17 17:56:02 +03:00
RLAPI void ExportImage ( Image image , const char * fileName ) ; // Export image data to file
2018-10-29 18:18:06 +03:00
RLAPI void ExportImageAsCode ( Image image , const char * fileName ) ; // Export image as code file defining an array of bytes
2016-12-25 04:01:13 +03:00
RLAPI Texture2D LoadTexture ( const char * fileName ) ; // Load texture from file into GPU memory (VRAM)
RLAPI Texture2D LoadTextureFromImage ( Image image ) ; // Load texture from image data
2019-02-04 15:27:36 +03:00
RLAPI TextureCubemap LoadTextureCubemap ( Image image , int layoutType ) ; // Load cubemap from image, multiple image cubemap layouts supported
2016-12-25 04:01:13 +03:00
RLAPI RenderTexture2D LoadRenderTexture ( int width , int height ) ; // Load texture for rendering (framebuffer)
2016-08-13 12:31:15 +03:00
RLAPI void UnloadImage ( Image image ) ; // Unload image from CPU memory (RAM)
2016-12-25 04:01:13 +03:00
RLAPI void UnloadTexture ( Texture2D texture ) ; // Unload texture from GPU memory (VRAM)
RLAPI void UnloadRenderTexture ( RenderTexture2D target ) ; // Unload render texture from GPU memory (VRAM)
2016-08-13 12:31:15 +03:00
RLAPI Color * GetImageData ( Image image ) ; // Get pixel data from image as a Color struct array
2018-06-12 14:13:09 +03:00
RLAPI Vector4 * GetImageDataNormalized ( Image image ) ; // Get pixel data from image as Vector4 array (float normalized)
2019-08-07 10:23:15 +03:00
RLAPI Rectangle GetImageAlphaBorder ( Image image , float threshold ) ; // Get image alpha border rectangle
2018-01-06 04:51:28 +03:00
RLAPI int GetPixelDataSize ( int width , int height , int format ) ; // Get pixel data size in bytes (image or texture)
2016-08-13 12:31:15 +03:00
RLAPI Image GetTextureData ( Texture2D texture ) ; // Get pixel data from GPU texture and return an Image
2019-03-17 13:58:02 +03:00
RLAPI Image GetScreenData ( void ) ; // Get pixel data from screen buffer and return an Image (screenshot)
2016-12-25 04:01:13 +03:00
RLAPI void UpdateTexture ( Texture2D texture , const void * pixels ) ; // Update GPU texture with new data
2018-04-04 13:02:20 +03:00
2017-05-15 12:30:09 +03:00
// Image manipulation functions
2018-01-07 02:51:26 +03:00
RLAPI Image ImageCopy ( Image image ) ; // Create an image duplicate (useful for transformations)
BREAKING CHANGE: Read description
Changes:
- Font structure has been redesigned, CharInfo structure contained character rectangle within font texture, it has not much sense, considering that it was an information relative to the font atlas generated and not the character itself, so character rectangles have been moved out from CharInfo to Font.
- CharInfo included a data parameters to contain character pixel data (usually grayscale), generated on TTF font generation. It was inconsistent with other fonts types, so, now CharInfo includes directly an Image of the glyph.
- REDESIGNED: GenImageFontAtlas(), additional recs parameter added, loaded and filled inside the function to export atlas characters rectangles, instead of silently modify the input CharInfo data.
- REVIEWED: ImageTextEx(), funtion retrieved the font atlas image from the GPU, that was slow and problematic in several platforms. Now it uses directly the CharInfo image. Support for unicode codepoints has also been added.
- REDESIGNED: ImageDraw(), now it includes an additional parameter, the color tint, not only it could be useful for several situations but also function signature is more consistent with similar functions.
- ADDED: ImageFromImage() to generate a new image from a piece of another image.
- REVIEWED: GetNextCodepoint(), renamed parameters to be more clear.
Also all examples and games that were affected by those changes have been reviewed.
2019-07-24 16:05:14 +03:00
RLAPI Image ImageFromImage ( Image image , Rectangle rec ) ; // Create an image from another image piece
2016-08-13 12:31:15 +03:00
RLAPI void ImageToPOT ( Image * image , Color fillColor ) ; // Convert image to POT (power-of-two)
RLAPI void ImageFormat ( Image * image , int newFormat ) ; // Convert image data to desired format
2016-09-05 11:08:28 +03:00
RLAPI void ImageAlphaMask ( Image * image , Image alphaMask ) ; // Apply alpha mask to image
2018-01-07 02:51:26 +03:00
RLAPI void ImageAlphaClear ( Image * image , Color color , float threshold ) ; // Clear alpha channel to desired color
2018-01-11 12:22:32 +03:00
RLAPI void ImageAlphaCrop ( Image * image , float threshold ) ; // Crop image depending on alpha value
2018-01-07 02:51:26 +03:00
RLAPI void ImageAlphaPremultiply ( Image * image ) ; // Premultiply alpha channel
2016-08-13 12:31:15 +03:00
RLAPI void ImageCrop ( Image * image , Rectangle crop ) ; // Crop an image to a defined rectangle
2018-10-13 17:30:44 +03:00
RLAPI void ImageResize ( Image * image , int newWidth , int newHeight ) ; // Resize image (Bicubic scaling algorithm)
2018-06-01 01:53:40 +03:00
RLAPI void ImageResizeNN ( Image * image , int newWidth , int newHeight ) ; // Resize image (Nearest-Neighbor scaling algorithm)
2018-06-02 14:05:23 +03:00
RLAPI void ImageResizeCanvas ( Image * image , int newWidth , int newHeight , int offsetX , int offsetY , Color color ) ; // Resize canvas and fill with color
2018-01-18 02:23:28 +03:00
RLAPI void ImageMipmaps ( Image * image ) ; // Generate all mipmap levels for a provided image
2018-01-07 02:51:26 +03:00
RLAPI void ImageDither ( Image * image , int rBpp , int gBpp , int bBpp , int aBpp ) ; // Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
2018-10-08 19:57:33 +03:00
RLAPI Color * ImageExtractPalette ( Image image , int maxPaletteSize , int * extractCount ) ; // Extract color palette from image to maximum size (memory should be freed)
2016-08-13 12:31:15 +03:00
RLAPI Image ImageText ( const char * text , int fontSize , Color color ) ; // Create an image from text (default font)
2018-07-05 20:08:24 +03:00
RLAPI Image ImageTextEx ( Font font , const char * text , float fontSize , float spacing , Color tint ) ; // Create an image from text (custom sprite font)
BREAKING CHANGE: Read description
Changes:
- Font structure has been redesigned, CharInfo structure contained character rectangle within font texture, it has not much sense, considering that it was an information relative to the font atlas generated and not the character itself, so character rectangles have been moved out from CharInfo to Font.
- CharInfo included a data parameters to contain character pixel data (usually grayscale), generated on TTF font generation. It was inconsistent with other fonts types, so, now CharInfo includes directly an Image of the glyph.
- REDESIGNED: GenImageFontAtlas(), additional recs parameter added, loaded and filled inside the function to export atlas characters rectangles, instead of silently modify the input CharInfo data.
- REVIEWED: ImageTextEx(), funtion retrieved the font atlas image from the GPU, that was slow and problematic in several platforms. Now it uses directly the CharInfo image. Support for unicode codepoints has also been added.
- REDESIGNED: ImageDraw(), now it includes an additional parameter, the color tint, not only it could be useful for several situations but also function signature is more consistent with similar functions.
- ADDED: ImageFromImage() to generate a new image from a piece of another image.
- REVIEWED: GetNextCodepoint(), renamed parameters to be more clear.
Also all examples and games that were affected by those changes have been reviewed.
2019-07-24 16:05:14 +03:00
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)
2018-11-07 19:58:26 +03:00
RLAPI void ImageDrawRectangle ( 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
2016-08-13 12:31:15 +03:00
RLAPI void ImageDrawText ( Image * dst , Vector2 position , const char * text , int fontSize , Color color ) ; // Draw text (default font) within an image (destination)
2018-05-04 17:59:48 +03:00
RLAPI void ImageDrawTextEx ( Image * dst , Vector2 position , Font font , const char * text , float fontSize , float spacing , Color color ) ; // Draw text (custom sprite font) within an image (destination)
2016-08-13 12:31:15 +03:00
RLAPI void ImageFlipVertical ( Image * image ) ; // Flip image vertically
RLAPI void ImageFlipHorizontal ( Image * image ) ; // Flip image horizontally
2018-06-03 22:05:01 +03:00
RLAPI void ImageRotateCW ( Image * image ) ; // Rotate image clockwise 90deg
RLAPI void ImageRotateCCW ( Image * image ) ; // Rotate image counter-clockwise 90deg
2016-08-13 12:31:15 +03:00
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)
2018-07-03 01:57:58 +03:00
RLAPI void ImageColorReplace ( Image * image , Color color , Color replace ) ; // Modify image color: replace color
2017-05-15 12:30:09 +03:00
2017-06-28 13:56:04 +03:00
// Image generation functions
2017-10-25 02:24:17 +03:00
RLAPI Image GenImageColor ( int width , int height , Color color ) ; // Generate image: plain color
2017-06-28 13:56:04 +03:00
RLAPI Image GenImageGradientV ( int width , int height , Color top , Color bottom ) ; // Generate image: vertical gradient
RLAPI Image GenImageGradientH ( int width , int height , Color left , Color right ) ; // Generate image: horizontal gradient
2017-07-02 20:29:01 +03:00
RLAPI Image GenImageGradientRadial ( int width , int height , float density , Color inner , Color outer ) ; // Generate image: radial gradient
2017-06-28 13:56:04 +03:00
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
2018-01-17 02:43:30 +03:00
RLAPI Image GenImagePerlinNoise ( int width , int height , int offsetX , int offsetY , float scale ) ; // Generate image: perlin noise
2017-06-28 13:56:04 +03:00
RLAPI Image GenImageCellular ( int width , int height , int tileSize ) ; // Generate image: cellular algorithm. Bigger tileSize means bigger cells
2017-05-15 12:30:09 +03:00
// Texture2D configuration functions
2016-11-22 14:14:55 +03:00
RLAPI void GenTextureMipmaps ( Texture2D * texture ) ; // Generate GPU mipmaps for a texture
2016-10-29 23:17:19 +03:00
RLAPI void SetTextureFilter ( Texture2D texture , int filterMode ) ; // Set texture scaling filter mode
RLAPI void SetTextureWrap ( Texture2D texture , int wrapMode ) ; // Set texture wrapping mode
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Texture2D drawing functions
2016-08-13 12:31:15 +03:00
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 sourceRec , Vector2 position , Color tint ) ; // Draw a part of a texture defined by a rectangle
2018-12-27 01:44:16 +03:00
RLAPI void DrawTextureQuad ( Texture2D texture , Vector2 tiling , Vector2 offset , Rectangle quad , Color tint ) ; // Draw texture quad with tiling and offset parameters
RLAPI void DrawTexturePro ( Texture2D texture , Rectangle sourceRec , Rectangle destRec , 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 destRec , Vector2 origin , float rotation , Color tint ) ; // Draws a texture (or part of it) that stretches or shrinks nicely
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Font Loading and Text Drawing Functions (Module: text)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
2018-05-04 17:59:48 +03:00
// Font loading/unloading functions
2018-07-05 20:17:06 +03:00
RLAPI Font GetFontDefault ( void ) ; // Get the default Font
2018-06-20 01:52:14 +03:00
RLAPI Font LoadFont ( const char * fileName ) ; // Load font from file into GPU memory (VRAM)
2018-12-25 17:17:42 +03:00
RLAPI Font LoadFontEx ( const char * fileName , int fontSize , int * fontChars , int charsCount ) ; // Load font from file with extended parameters
2018-12-20 14:58:27 +03:00
RLAPI Font LoadFontFromImage ( Image image , Color key , int firstChar ) ; // Load font from Image (XNA style)
2018-09-06 17:56:21 +03:00
RLAPI CharInfo * LoadFontData ( const char * fileName , int fontSize , int * fontChars , int charsCount , int type ) ; // Load font data for further use
BREAKING CHANGE: Read description
Changes:
- Font structure has been redesigned, CharInfo structure contained character rectangle within font texture, it has not much sense, considering that it was an information relative to the font atlas generated and not the character itself, so character rectangles have been moved out from CharInfo to Font.
- CharInfo included a data parameters to contain character pixel data (usually grayscale), generated on TTF font generation. It was inconsistent with other fonts types, so, now CharInfo includes directly an Image of the glyph.
- REDESIGNED: GenImageFontAtlas(), additional recs parameter added, loaded and filled inside the function to export atlas characters rectangles, instead of silently modify the input CharInfo data.
- REVIEWED: ImageTextEx(), funtion retrieved the font atlas image from the GPU, that was slow and problematic in several platforms. Now it uses directly the CharInfo image. Support for unicode codepoints has also been added.
- REDESIGNED: ImageDraw(), now it includes an additional parameter, the color tint, not only it could be useful for several situations but also function signature is more consistent with similar functions.
- ADDED: ImageFromImage() to generate a new image from a piece of another image.
- REVIEWED: GetNextCodepoint(), renamed parameters to be more clear.
Also all examples and games that were affected by those changes have been reviewed.
2019-07-24 16:05:14 +03:00
RLAPI Image GenImageFontAtlas ( const CharInfo * chars , Rectangle * * recs , int charsCount , int fontSize , int padding , int packMethod ) ; // Generate image font atlas using chars info
2018-06-20 01:52:14 +03:00
RLAPI void UnloadFont ( Font font ) ; // Unload Font from GPU memory (VRAM)
2014-04-19 18:36:49 +04:00
2017-05-15 12:30:09 +03:00
// Text drawing functions
2018-06-20 01:52:14 +03:00
RLAPI void DrawFPS ( int posX , int posY ) ; // Shows current FPS
RLAPI void DrawText ( const char * text , int posX , int posY , int fontSize , Color color ) ; // Draw text (using default font)
2018-12-29 16:44:28 +03:00
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 DrawTextRec ( Font font , const char * text , Rectangle rec , float fontSize , float spacing , bool wordWrap , Color tint ) ; // Draw text using font inside rectangle limits
2019-04-04 14:50:52 +03:00
RLAPI void DrawTextRecEx ( Font font , const char * text , Rectangle rec , float fontSize , float spacing , bool wordWrap , Color tint ,
2019-12-01 15:28:14 +03:00
int selectStart , int selectLength , Color selectTint , Color selectBackTint ) ; // Draw text using font inside rectangle limits with support for text selection
RLAPI void DrawTextCodepoint ( Font font , int codepoint , Vector2 position , float scale , Color tint ) ; // Draw one character (codepoint)
2017-05-15 12:30:09 +03:00
// Text misc. functions
2018-06-20 01:52:14 +03:00
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
2019-12-01 15:28:14 +03:00
RLAPI int GetGlyphIndex ( Font font , int codepoint ) ; // Get index position for a unicode character on font
2013-11-19 02:38:44 +04:00
2019-10-28 01:56:48 +03:00
// Text strings management functions (no utf8 strings, only byte chars)
2018-12-26 15:26:34 +03:00
// NOTE: Some strings allocate memory internally for returned strings, just be careful!
2020-01-26 20:38:46 +03:00
RLAPI int TextCopy ( char * dst , const char * src ) ; // Copy one string to another, returns bytes copied
2018-12-26 15:26:34 +03:00
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
2018-12-27 01:44:16 +03:00
RLAPI const char * TextFormat ( const char * text , . . . ) ; // Text formatting with variables (sprintf style)
2018-12-26 15:26:34 +03:00
RLAPI const char * TextSubtext ( const char * text , int position , int length ) ; // Get a piece of a text string
2019-10-28 22:53:32 +03:00
RLAPI char * TextReplace ( char * text , const char * replace , const char * by ) ; // Replace text string (memory must be freed!)
RLAPI char * TextInsert ( const char * text , const char * insert , int position ) ; // Insert text in a position (memory must be freed!)
2018-12-26 15:26:34 +03:00
RLAPI const char * TextJoin ( const char * * textList , int count , const char * delimiter ) ; // Join text strings with delimiter
2019-03-05 18:46:48 +03:00
RLAPI const char * * TextSplit ( const char * text , char delimiter , int * count ) ; // Split text into multiple strings
2018-12-26 15:26:34 +03:00
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
2019-02-06 16:21:44 +03:00
RLAPI int TextToInteger ( const char * text ) ; // Get integer value from text (negative values not supported)
2019-10-28 22:53:32 +03:00
RLAPI char * TextToUtf8 ( int * codepoints , int length ) ; // Encode text codepoint into utf8 text (memory must be freed!)
2019-10-28 01:56:48 +03:00
// UTF8 text strings management functions
RLAPI int * GetCodepoints ( const char * text , int * count ) ; // Get all codepoints in a string, codepoints count returned by parameters
RLAPI int GetCodepointsCount ( const char * text ) ; // Get total number of characters (codepoints) in a UTF8 encoded string
RLAPI int GetNextCodepoint ( const char * text , int * bytesProcessed ) ; // Returns next codepoint in a UTF8 encoded string; 0x3f('?') is returned on failure
2019-10-28 22:53:32 +03:00
RLAPI const char * CodepointToUtf8 ( int codepoint , int * byteLength ) ; // Encode codepoint into utf8 text (char array length returned as parameter)
2018-10-23 16:43:19 +03:00
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Basic 3d Shapes Drawing Functions (Module: models)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Basic geometric 3D shapes drawing functions
2016-08-13 12:31:15 +03:00
RLAPI void DrawLine3D ( Vector3 startPos , Vector3 endPos , Color color ) ; // Draw a line in 3D world space
2020-01-29 14:21:22 +03:00
RLAPI void DrawPoint3D ( Vector3 position , Color color ) ; // Draw a point in 3D space, actually a small line
2016-11-17 14:55:30 +03:00
RLAPI void DrawCircle3D ( Vector3 center , float radius , Vector3 rotationAxis , float rotationAngle , Color color ) ; // Draw a circle in 3D world space
2016-08-25 15:18:43 +03:00
RLAPI void DrawCube ( Vector3 position , float width , float height , float length , Color color ) ; // Draw cube
2016-08-13 12:31:15 +03:00
RLAPI void DrawCubeV ( Vector3 position , Vector3 size , Color color ) ; // Draw cube (Vector version)
2016-08-25 15:18:43 +03:00
RLAPI void DrawCubeWires ( Vector3 position , float width , float height , float length , Color color ) ; // Draw cube wires
2019-03-08 21:06:17 +03:00
RLAPI void DrawCubeWiresV ( Vector3 position , Vector3 size , Color color ) ; // Draw cube wires (Vector version)
2016-08-25 15:18:43 +03:00
RLAPI void DrawCubeTexture ( Texture2D texture , Vector3 position , float width , float height , float length , Color color ) ; // Draw cube textured
2016-08-13 12:31:15 +03:00
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 DrawCylinderWires ( Vector3 position , float radiusTop , float radiusBottom , float height , int slices , Color color ) ; // Draw a cylinder/cone wires
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))
RLAPI void DrawGizmo ( Vector3 position ) ; // Draw simple gizmo
2016-11-17 14:55:30 +03:00
//DrawTorus(), DrawTeapot() could be useful?
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Model 3d Loading and Drawing Functions (Module: models)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Model loading/unloading functions
2019-03-29 18:48:23 +03:00
RLAPI Model LoadModel ( const char * fileName ) ; // Load model from files (meshes and materials)
2019-04-12 12:29:01 +03:00
RLAPI Model LoadModelFromMesh ( Mesh mesh ) ; // Load model from generated mesh (default material)
2017-07-17 01:33:40 +03:00
RLAPI void UnloadModel ( Model model ) ; // Unload model from memory (RAM and/or VRAM)
2019-04-05 14:15:56 +03:00
// Mesh loading/unloading functions
RLAPI Mesh * LoadMeshes ( const char * fileName , int * meshCount ) ; // Load meshes from model file
2019-04-04 14:33:54 +03:00
RLAPI void ExportMesh ( Mesh mesh , const char * fileName ) ; // Export mesh data to file
2019-08-07 01:32:44 +03:00
RLAPI void UnloadMesh ( Mesh mesh ) ; // Unload mesh from memory (RAM and/or VRAM)
2019-04-05 14:15:56 +03:00
// 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 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 (MAP_DIFFUSE, 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 * animsCount ) ; // 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 bool IsModelAnimationValid ( Model model , ModelAnimation anim ) ; // Check model animation skeleton match
2018-02-26 14:10:45 +03:00
2017-09-18 01:59:22 +03:00
// Mesh generation functions
2018-12-16 01:30:55 +03:00
RLAPI Mesh GenMeshPoly ( int sides , float radius ) ; // Generate polygonal mesh
2017-09-18 01:59:22 +03:00
RLAPI Mesh GenMeshPlane ( float width , float length , int resX , int resZ ) ; // Generate plane mesh (with subdivisions)
2017-07-17 01:33:40 +03:00
RLAPI Mesh GenMeshCube ( float width , float height , float length ) ; // Generate cuboid mesh
2017-09-18 01:59:22 +03:00
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 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
2017-07-17 01:33:40 +03:00
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
2016-12-25 04:01:13 +03:00
2019-04-05 14:15:56 +03:00
// Mesh manipulation functions
RLAPI BoundingBox MeshBoundingBox ( Mesh mesh ) ; // Compute mesh bounding box limits
RLAPI void MeshTangents ( Mesh * mesh ) ; // Compute mesh tangents
RLAPI void MeshBinormals ( Mesh * mesh ) ; // Compute mesh binormals
2016-12-25 04:01:13 +03:00
2017-05-15 12:30:09 +03:00
// Model drawing functions
2016-12-25 04:01:13 +03:00
RLAPI void DrawModel ( Model model , Vector3 position , float scale , Color tint ) ; // Draw a model (with texture if set)
2018-05-03 20:19:35 +03:00
RLAPI void DrawModelEx ( Model model , Vector3 position , Vector3 rotationAxis , float rotationAngle , Vector3 scale , Color tint ) ; // Draw a model with extended parameters
2016-08-13 12:31:15 +03:00
RLAPI void DrawModelWires ( Model model , Vector3 position , float scale , Color tint ) ; // Draw a model wires (with texture if set)
2018-05-03 20:19:35 +03:00
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
2016-12-25 04:01:13 +03:00
RLAPI void DrawBoundingBox ( BoundingBox box , Color color ) ; // Draw bounding box (wires)
RLAPI void DrawBillboard ( Camera camera , Texture2D texture , Vector3 center , float size , Color tint ) ; // Draw a billboard texture
2018-05-03 20:19:35 +03:00
RLAPI void DrawBillboardRec ( Camera camera , Texture2D texture , Rectangle sourceRec , Vector3 center , float size , Color tint ) ; // Draw a billboard texture defined by sourceRec
2016-12-25 04:01:13 +03:00
2017-05-15 12:30:09 +03:00
// Collision detection functions
2016-12-25 04:01:13 +03:00
RLAPI bool CheckCollisionSpheres ( Vector3 centerA , float radiusA , Vector3 centerB , float radiusB ) ; // Detect collision between two spheres
RLAPI bool CheckCollisionBoxes ( BoundingBox box1 , BoundingBox box2 ) ; // Detect collision between two bounding boxes
2019-08-07 01:32:44 +03:00
RLAPI bool CheckCollisionBoxSphere ( BoundingBox box , Vector3 center , float radius ) ; // Detect collision between box and sphere
RLAPI bool CheckCollisionRaySphere ( Ray ray , Vector3 center , float radius ) ; // Detect collision between ray and sphere
RLAPI bool CheckCollisionRaySphereEx ( Ray ray , Vector3 center , float radius , Vector3 * collisionPoint ) ; // Detect collision between ray and sphere, returns collision point
2016-12-25 04:01:13 +03:00
RLAPI bool CheckCollisionRayBox ( Ray ray , BoundingBox box ) ; // Detect collision between ray and box
2019-08-07 01:32:44 +03:00
RLAPI RayHitInfo GetCollisionRayModel ( Ray ray , Model model ) ; // Get collision info between ray and model
2017-01-05 21:33:05 +03:00
RLAPI RayHitInfo GetCollisionRayTriangle ( Ray ray , Vector3 p1 , Vector3 p2 , Vector3 p3 ) ; // Get collision info between ray and triangle
RLAPI RayHitInfo GetCollisionRayGround ( Ray ray , float groundHeight ) ; // Get collision info between ray and ground plane (Y-normal plane)
2017-01-01 02:06:39 +03:00
2015-08-30 18:45:05 +03:00
//------------------------------------------------------------------------------------
// Shaders System Functions (Module: rlgl)
// NOTE: This functions are useless when using OpenGL 1.1
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Shader loading/unloading functions
2017-01-15 03:09:15 +03:00
RLAPI char * LoadText ( const char * fileName ) ; // Load chars array from text file
2018-02-05 03:03:13 +03:00
RLAPI Shader LoadShader ( const char * vsFileName , const char * fsFileName ) ; // Load shader from files and bind default locations
2019-09-25 17:31:10 +03:00
RLAPI Shader LoadShaderCode ( const char * vsCode , const char * fsCode ) ; // Load shader from code strings and bind default locations
2016-12-25 04:01:13 +03:00
RLAPI void UnloadShader ( Shader shader ) ; // Unload shader from GPU memory (VRAM)
2016-05-31 18:11:02 +03:00
2017-07-17 01:33:40 +03:00
RLAPI Shader GetShaderDefault ( void ) ; // Get default shader
RLAPI Texture2D GetTextureDefault ( void ) ; // Get default texture
2020-02-03 20:31:30 +03:00
RLAPI Texture2D GetShapesTexture ( void ) ; // Get texture to draw shapes
RLAPI Rectangle GetShapesTextureRec ( void ) ; // Get texture rectangle to draw shapes
RLAPI void SetShapesTexture ( Texture2D texture , Rectangle source ) ; // Define default texture used to draw shapes
2017-07-17 01:33:40 +03:00
2017-05-15 12:30:09 +03:00
// Shader configuration functions
2019-04-11 14:53:01 +03:00
RLAPI int GetShaderLocation ( Shader shader , const char * uniformName ) ; // Get shader uniform location
2019-01-10 13:25:26 +03:00
RLAPI void SetShaderValue ( Shader shader , int uniformLoc , const void * value , int uniformType ) ; // Set shader uniform value
RLAPI void SetShaderValueV ( Shader shader , int uniformLoc , const void * value , int uniformType , int count ) ; // Set shader uniform value vector
2019-04-05 18:08:46 +03:00
RLAPI void SetShaderValueMatrix ( Shader shader , int uniformLoc , Matrix mat ) ; // Set shader uniform value (matrix 4x4)
RLAPI void SetShaderValueTexture ( Shader shader , int uniformLoc , Texture2D texture ) ; // Set shader uniform value for texture
2016-08-13 12:31:15 +03:00
RLAPI void SetMatrixProjection ( Matrix proj ) ; // Set a custom projection matrix (replaces internal projection matrix)
RLAPI void SetMatrixModelview ( Matrix view ) ; // Set a custom modelview matrix (replaces internal modelview matrix)
2019-06-06 12:38:45 +03:00
RLAPI Matrix GetMatrixModelview ( void ) ; // Get internal modelview matrix
2019-10-27 14:13:18 +03:00
RLAPI Matrix GetMatrixProjection ( void ) ; // Get internal projection matrix
2016-06-02 21:23:09 +03:00
2017-07-19 11:09:34 +03:00
// Texture maps generation (PBR)
2017-07-19 19:55:26 +03:00
// NOTE: Required shaders should be provided
2019-12-29 15:52:48 +03:00
RLAPI Texture2D GenTextureCubemap ( Shader shader , Texture2D map , int size ) ; // Generate cubemap texture from 2D texture
2017-07-19 19:55:26 +03:00
RLAPI Texture2D GenTextureIrradiance ( Shader shader , Texture2D cubemap , int size ) ; // Generate irradiance texture using cubemap data
RLAPI Texture2D GenTexturePrefilter ( Shader shader , Texture2D cubemap , int size ) ; // Generate prefilter texture using cubemap data
2019-04-11 14:53:01 +03:00
RLAPI Texture2D GenTextureBRDF ( Shader shader , int size ) ; // Generate BRDF texture
2017-07-19 11:09:34 +03:00
2017-05-15 12:30:09 +03:00
// Shading begin/end functions
2016-08-13 12:31:15 +03:00
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)
RLAPI void EndBlendMode ( void ) ; // End blending mode (reset to default: alpha blending)
2015-08-30 18:45:05 +03:00
2017-05-15 12:30:09 +03:00
// VR control functions
2019-04-11 14:53:01 +03:00
RLAPI void InitVrSimulator ( void ) ; // Init VR simulator for selected device parameters
2017-11-12 13:00:28 +03:00
RLAPI void CloseVrSimulator ( void ) ; // Close VR simulator for current device
2019-04-11 14:53:01 +03:00
RLAPI void UpdateVrTracking ( Camera * camera ) ; // Update VR tracking (position and orientation) and camera
2019-06-29 11:49:42 +03:00
RLAPI void SetVrConfiguration ( VrDeviceInfo info , Shader distortion ) ; // Set stereo rendering configuration parameters
2017-11-12 13:00:28 +03:00
RLAPI bool IsVrSimulatorReady ( void ) ; // Detect if VR simulator is ready
RLAPI void ToggleVrMode ( void ) ; // Enable/Disable VR experience
RLAPI void BeginVrDrawing ( void ) ; // Begin VR simulator stereo rendering
RLAPI void EndVrDrawing ( void ) ; // End VR simulator stereo rendering
2016-06-14 18:16:20 +03:00
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Audio Loading and Playing Functions (Module: audio)
//------------------------------------------------------------------------------------
2017-05-15 12:30:09 +03:00
// Audio device management functions
2016-08-13 12:31:15 +03:00
RLAPI void InitAudioDevice ( void ) ; // Initialize audio device and context
2016-11-17 14:55:30 +03:00
RLAPI void CloseAudioDevice ( void ) ; // Close the audio device and context
2016-08-13 12:31:15 +03:00
RLAPI bool IsAudioDeviceReady ( void ) ; // Check if audio device has been initialized successfully
2017-02-06 02:44:54 +03:00
RLAPI void SetMasterVolume ( float volume ) ; // Set master volume (listener)
2016-08-13 12:31:15 +03:00
2017-05-15 12:30:09 +03:00
// Wave/Sound loading/unloading functions
2016-12-25 04:01:13 +03:00
RLAPI Wave LoadWave ( const char * fileName ) ; // Load wave data from file
RLAPI Sound LoadSound ( const char * fileName ) ; // Load sound from file
RLAPI Sound LoadSoundFromWave ( Wave wave ) ; // Load sound from wave data
2017-02-10 00:19:48 +03:00
RLAPI void UpdateSound ( Sound sound , const void * data , int samplesCount ) ; // Update sound buffer with new data
2016-10-12 11:27:14 +03:00
RLAPI void UnloadWave ( Wave wave ) ; // Unload wave data
2016-08-13 12:31:15 +03:00
RLAPI void UnloadSound ( Sound sound ) ; // Unload sound
2018-09-17 17:56:02 +03:00
RLAPI void ExportWave ( Wave wave , const char * fileName ) ; // Export wave data to file
2018-10-29 18:18:06 +03:00
RLAPI void ExportWaveAsCode ( Wave wave , const char * fileName ) ; // Export wave sample data to code (.h)
2017-05-15 12:30:09 +03:00
// Wave/Sound management functions
2016-08-13 12:31:15 +03:00
RLAPI void PlaySound ( Sound sound ) ; // Play a sound
2019-07-24 23:38:06 +03:00
RLAPI void StopSound ( Sound sound ) ; // Stop playing a sound
2016-08-13 12:31:15 +03:00
RLAPI void PauseSound ( Sound sound ) ; // Pause a sound
RLAPI void ResumeSound ( Sound sound ) ; // Resume a paused sound
2019-07-24 23:38:06 +03:00
RLAPI void PlaySoundMulti ( Sound sound ) ; // Play a sound (using multichannel buffer pool)
RLAPI void StopSoundMulti ( void ) ; // Stop any sound playing (using multichannel buffer pool)
RLAPI int GetSoundsPlaying ( void ) ; // Get number of sounds playing in the multichannel
2016-08-13 12:31:15 +03:00
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)
2016-09-08 01:20:06 +03:00
RLAPI void WaveFormat ( Wave * wave , int sampleRate , int sampleSize , int channels ) ; // Convert wave data to desired format
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 float * GetWaveData ( Wave wave ) ; // Get samples data from wave as a floats array
2017-05-15 12:30:09 +03:00
// Music management functions
2016-09-08 01:20:06 +03:00
RLAPI Music LoadMusicStream ( const char * fileName ) ; // Load music stream from file
2016-08-13 12:31:15 +03:00
RLAPI void UnloadMusicStream ( Music music ) ; // Unload music stream
2016-11-17 14:55:30 +03:00
RLAPI void PlayMusicStream ( Music music ) ; // Start music playing
2016-08-13 12:31:15 +03:00
RLAPI void UpdateMusicStream ( Music music ) ; // Updates buffers for music streaming
2016-11-17 14:55:30 +03:00
RLAPI void StopMusicStream ( Music music ) ; // Stop music playing
2016-08-13 12:31:15 +03:00
RLAPI void PauseMusicStream ( Music music ) ; // Pause music playing
RLAPI void ResumeMusicStream ( Music music ) ; // Resume playing paused music
RLAPI bool IsMusicPlaying ( Music music ) ; // Check if music is playing
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)
2017-11-12 14:55:24 +03:00
RLAPI void SetMusicLoopCount ( Music music , int count ) ; // Set music loop count (loop repeats)
2016-08-13 12:31:15 +03:00
RLAPI float GetMusicTimeLength ( Music music ) ; // Get music time length (in seconds)
RLAPI float GetMusicTimePlayed ( Music music ) ; // Get current music time played (in seconds)
2017-05-15 12:30:09 +03:00
// AudioStream management functions
2018-05-03 20:19:35 +03:00
RLAPI AudioStream InitAudioStream ( unsigned int sampleRate , unsigned int sampleSize , unsigned int channels ) ; // Init audio stream (to stream raw audio pcm data)
2017-02-10 00:19:48 +03:00
RLAPI void UpdateAudioStream ( AudioStream stream , const void * data , int samplesCount ) ; // Update audio stream buffers with data
2016-08-13 12:31:15 +03:00
RLAPI void CloseAudioStream ( AudioStream stream ) ; // Close audio stream and free memory
2019-08-13 18:41:31 +03:00
RLAPI bool IsAudioStreamProcessed ( AudioStream stream ) ; // Check if any audio stream buffers requires refill
2016-08-13 12:31:15 +03:00
RLAPI void PlayAudioStream ( AudioStream stream ) ; // Play audio stream
RLAPI void PauseAudioStream ( AudioStream stream ) ; // Pause audio stream
RLAPI void ResumeAudioStream ( AudioStream stream ) ; // Resume audio stream
2017-11-12 14:55:24 +03:00
RLAPI bool IsAudioStreamPlaying ( AudioStream stream ) ; // Check if audio stream is playing
2016-08-13 12:31:15 +03:00
RLAPI void StopAudioStream ( AudioStream stream ) ; // Stop audio stream
2017-12-20 02:34:31 +03:00
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)
2020-02-14 19:13:37 +03:00
RLAPI void SetAudioStreamBufferSizeDefault ( int size ) ; // Default size for new audio streams
2019-10-21 18:38:23 +03:00
2019-04-22 21:03:00 +03:00
//------------------------------------------------------------------------------------
// Network (Module: network)
//------------------------------------------------------------------------------------
2019-04-22 21:27:54 +03:00
// IN PROGRESS: Check rnet.h for reference
2016-08-02 18:32:24 +03:00
2018-10-16 11:53:01 +03:00
# if defined(__cplusplus)
2013-11-19 02:38:44 +04:00
}
# endif
2013-11-19 03:09:52 +04:00
# endif // RAYLIB_H