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 )
* [ textures ] stb_image_resize ( Sean Barret ) for image resizing algorythms
* [ 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
*
2019-04-07 18:49:12 +03:00
* Copyright ( c ) 2013 - 2019 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
2018-07-28 18:57:05 +03:00
# include <stdarg.h> // Required for: va_list - Only used by TraceLogCallback
2018-07-26 22:57:45 +03:00
2017-10-02 15:12:03 +03:00
# if defined(_WIN32) && defined(BUILD_LIBTYPE_SHARED)
# define RLAPI __declspec(dllexport) // We are building raylib as a Win32 shared library (.dll)
# elif defined(_WIN32) && defined(USE_LIBTYPE_SHARED)
# define RLAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll)
2016-08-13 12:31:15 +03:00
# else
# define RLAPI // We are building or using raylib as a static library (or Linux shared library)
# 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
2018-12-03 13:04:32 +03:00
// Shader and material limits
# define MAX_SHADER_LOCATIONS 32 // Maximum number of predefined locations stored in shader struct
# define MAX_MATERIAL_MAPS 12 // Maximum number of texture maps stored in shader struct
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
# ifndef RL_FREE
# define RL_FREE(p) free(p)
# endif
2019-04-22 21:03:00 +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)
2016-08-10 00:03:29 +03:00
# define CLITERAL
2016-08-01 19:05:07 +03:00
# else
2016-08-10 00:03:29 +03:00
# define CLITERAL (Color)
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
# define LIGHTGRAY CLITERAL{ 200, 200, 200, 255 } // Light Gray
# define GRAY CLITERAL{ 130, 130, 130, 255 } // Gray
# define DARKGRAY CLITERAL{ 80, 80, 80, 255 } // Dark Gray
# define YELLOW CLITERAL{ 253, 249, 0, 255 } // Yellow
# define GOLD CLITERAL{ 255, 203, 0, 255 } // Gold
# define ORANGE CLITERAL{ 255, 161, 0, 255 } // Orange
# define PINK CLITERAL{ 255, 109, 194, 255 } // Pink
# define RED CLITERAL{ 230, 41, 55, 255 } // Red
# define MAROON CLITERAL{ 190, 33, 55, 255 } // Maroon
# define GREEN CLITERAL{ 0, 228, 48, 255 } // Green
# define LIME CLITERAL{ 0, 158, 47, 255 } // Lime
# define DARKGREEN CLITERAL{ 0, 117, 44, 255 } // Dark Green
# define SKYBLUE CLITERAL{ 102, 191, 255, 255 } // Sky Blue
# define BLUE CLITERAL{ 0, 121, 241, 255 } // Blue
# define DARKBLUE CLITERAL{ 0, 82, 172, 255 } // Dark Blue
# define PURPLE CLITERAL{ 200, 122, 255, 255 } // Purple
# define VIOLET CLITERAL{ 135, 60, 190, 255 } // Violet
# define DARKPURPLE CLITERAL{ 112, 31, 126, 255 } // Dark Purple
# define BEIGE CLITERAL{ 211, 176, 131, 255 } // Beige
# define BROWN CLITERAL{ 127, 106, 79, 255 } // Brown
# define DARKBROWN CLITERAL{ 76, 63, 47, 255 } // Dark Brown
# define WHITE CLITERAL{ 255, 255, 255, 255 } // White
# define BLACK CLITERAL{ 0, 0, 0, 255 } // Black
# define BLANK CLITERAL{ 0, 0, 0, 0 } // Blank (Transparent)
# define MAGENTA CLITERAL{ 255, 0, 255, 255 } // Magenta
# define RAYWHITE CLITERAL{ 245, 245, 245, 255 } // My own White (raylib logo)
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)
Rectangle rec ; // Character rectangle in sprite font
int offsetX ; // Character offset X when drawing
int offsetY ; // Character offset Y when drawing
int advanceX ; // Character advance position X
2018-06-20 01:52:14 +03:00
unsigned char * data ; // Character pixel data (grayscale)
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 {
2015-08-30 18:45:05 +03:00
Texture2D texture ; // Font texture
2017-02-05 04:59:39 +03:00
int baseSize ; // Base size (default chars height)
int charsCount ; // Number of characters
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
2018-07-24 19:28:58 +03:00
unsigned int vboId [ 7 ] ; // 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 {
2017-07-19 11:09:34 +03:00
unsigned int id ; // Shader program id
int locs [ MAX_SHADER_LOCATIONS ] ; // Shader locations array
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
MaterialMap maps [ MAX_MATERIAL_MAPS ] ; // Material maps
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 {
2016-08-15 17:35:11 +03:00
unsigned int sampleCount ; // 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)
2014-12-15 03:08:30 +03:00
void * data ; // Buffer data pointer
} Wave ;
2016-09-08 01:20:06 +03:00
// Sound source type
typedef struct Sound {
2017-12-20 02:34:31 +03:00
void * audioBuffer ; // Pointer to internal data used by the audio system
2017-11-12 07:17:05 +03:00
2017-12-20 02:34:31 +03:00
unsigned int source ; // Audio source id
unsigned int buffer ; // Audio buffer id
int format ; // Audio format specifier
2016-09-08 01:20:06 +03:00
} Sound ;
2016-08-01 13:49:17 +03:00
// Music type (file streaming from memory)
// NOTE: Anything longer than ~10 seconds should be streamed
2016-08-02 20:09:07 +03:00
typedef struct MusicData * Music ;
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 {
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-12-20 02:34:31 +03:00
void * audioBuffer ; // Pointer to internal data used by the audio system.
2017-11-12 13:59:16 +03:00
2017-12-20 02:34:31 +03:00
int format ; // Audio format specifier
unsigned int source ; // Audio source id
unsigned int buffers [ 2 ] ; // Audio buffers (double buffering)
2016-08-02 18:32:24 +03:00
} AudioStream ;
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 {
2018-12-03 13:24:11 +03:00
FLAG_SHOW_LOGO = 1 , // Set to show raylib logo at startup
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
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
typedef enum
{
//This is here just for error checking
GAMEPAD_BUTTON_UNKNOWN = 0 ,
//This is normally ABXY/Circle, Triangle, Square, Cross. No support for 6 button controllers though..
GAMEPAD_BUTTON_LEFT_FACE_UP ,
GAMEPAD_BUTTON_LEFT_FACE_RIGHT ,
GAMEPAD_BUTTON_LEFT_FACE_DOWN ,
GAMEPAD_BUTTON_LEFT_FACE_LEFT ,
//This is normally a DPAD
GAMEPAD_BUTTON_RIGHT_FACE_UP ,
GAMEPAD_BUTTON_RIGHT_FACE_RIGHT ,
GAMEPAD_BUTTON_RIGHT_FACE_DOWN ,
GAMEPAD_BUTTON_RIGHT_FACE_LEFT ,
//Triggers
GAMEPAD_BUTTON_LEFT_TRIGGER_1 ,
GAMEPAD_BUTTON_LEFT_TRIGGER_2 ,
GAMEPAD_BUTTON_RIGHT_TRIGGER_1 ,
GAMEPAD_BUTTON_RIGHT_TRIGGER_2 ,
//These are buttons in the center of the gamepad
GAMEPAD_BUTTON_MIDDLE_LEFT , //PS3 Select
GAMEPAD_BUTTON_MIDDLE , //PS Button/XBOX Button
GAMEPAD_BUTTON_MIDDLE_RIGHT , //PS3 Start
//These are the joystick press in buttons
GAMEPAD_BUTTON_LEFT_THUMB ,
GAMEPAD_BUTTON_RIGHT_THUMB
} GamepadButton ;
typedef enum
{
GAMEPAD_AXIS_UNKNOWN = 0 ,
//Left stick
GAMEPAD_AXIS_LEFT_X ,
GAMEPAD_AXIS_LEFT_Y ,
//Right stick
GAMEPAD_AXIS_RIGHT_X ,
GAMEPAD_AXIS_RIGHT_Y ,
//Pressure levels
GAMEPAD_AXIS_LEFT_TRIGGER , // [1..-1] (pressure-level)
GAMEPAD_AXIS_RIGHT_TRIGGER // [1..-1] (pressure-level)
} 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
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
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
2017-05-09 23:03:46 +03:00
RLAPI Vector2 GetWorldToScreen ( Vector3 position , Camera camera ) ; // Returns the screen space position for a 3d world space position
2016-08-13 12:31:15 +03:00
RLAPI Matrix GetCameraMatrix ( Camera camera ) ; // Returns camera transform matrix (view matrix)
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]
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
2017-12-24 18:47:33 +03:00
RLAPI void SetConfigFlags ( unsigned char 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
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
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
2018-10-10 13:01:59 +03:00
RLAPI const char * GetFileNameWithoutExt ( const char * filePath ) ; // Get filename string without extension (memory should be freed)
2018-01-02 04:26:05 +03:00
RLAPI const char * GetDirectoryPath ( const char * fileName ) ; // Get full path for a given fileName (uses static string)
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
2017-05-15 12:30:09 +03:00
// Persistent storage management
2017-05-09 23:03:46 +03:00
RLAPI void StorageSaveValue ( int position , int value ) ; // Save integer value to storage file (to defined position)
RLAPI int StorageLoadValue ( 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 int GetKeyPressed ( void ) ; // Get latest key pressed
RLAPI void SetExitKey ( int key ) ; // Set a custom key to exit program (default is ESC)
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
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
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
2016-08-13 12:31:15 +03:00
RLAPI void DrawTriangle ( Vector2 v1 , Vector2 v2 , Vector2 v3 , Color color ) ; // Draw a color-filled triangle
RLAPI void DrawTriangleLines ( Vector2 v1 , Vector2 v2 , Vector2 v3 , Color color ) ; // Draw triangle outline
RLAPI void DrawPoly ( Vector2 center , int sides , float radius , float rotation , Color color ) ; // Draw a regular polygon (Vector version)
RLAPI void DrawPolyEx ( Vector2 * points , int numPoints , Color color ) ; // Draw a closed polygon defined by points
RLAPI void DrawPolyExLines ( Vector2 * points , int numPoints , Color color ) ; // Draw polygon lines
2018-11-06 17:06:01 +03:00
RLAPI void SetShapesTexture ( Texture2D texture , Rectangle source ) ; // Define default texture used to draw shapes
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)
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)
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)
2016-08-13 12:31:15 +03:00
RLAPI void ImageDraw ( Image * dst , Image src , Rectangle srcRec , Rectangle dstRec ) ; // Draw a source image within a destination image
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
2018-10-10 23:28:17 +03:00
RLAPI Image GenImageFontAtlas ( CharInfo * chars , 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-02-04 11:57:02 +03:00
int selectStart , int selectLength , Color selectText , Color selectBack ) ; // Draw text using font inside rectangle limits with support for text selection
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
2018-07-15 22:24:59 +03:00
RLAPI int GetGlyphIndex ( Font font , int character ) ; // Get index position for a unicode character on font
2019-04-21 12:27:46 +03:00
RLAPI int GetNextCodepoint ( const char * text , int * count ) ; // Returns next codepoint in a UTF8 encoded `text` or 0x3f(`?`) on failure. `count` will hold the total number of bytes processed.
2013-11-19 02:38:44 +04:00
2018-12-26 15:26:34 +03:00
// Text strings management functions
// NOTE: Some strings allocate memory internally for returned strings, just be careful!
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
2019-04-21 12:27:46 +03:00
RLAPI unsigned int TextCountCodepoints ( const char * text ) ; // Get total number of characters(codepoints) in a UTF8 encoded `text` until '\0' is found.
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
RLAPI const char * TextReplace ( char * text , const char * replace , const char * by ) ; // Replace text string (memory should be freed!)
RLAPI const char * TextInsert ( const char * text , const char * insert , int position ) ; // Insert text in a position (memory should be freed!)
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)
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
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-04-05 14:15:56 +03:00
RLAPI void UnloadMesh ( Mesh * mesh ) ; // Unload mesh from memory (RAM and/or VRAM)
// 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
RLAPI bool CheckCollisionBoxSphere ( BoundingBox box , Vector3 centerSphere , float radiusSphere ) ; // Detect collision between box and sphere
RLAPI bool CheckCollisionRaySphere ( Ray ray , Vector3 spherePosition , float sphereRadius ) ; // Detect collision between ray and sphere
2018-05-03 20:19:35 +03:00
RLAPI bool CheckCollisionRaySphereEx ( Ray ray , Vector3 spherePosition , float sphereRadius , 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
2018-04-06 19:04:09 +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
RLAPI Shader LoadShaderCode ( char * vsCode , 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
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)
2017-12-15 15:44:31 +03:00
RLAPI Matrix GetMatrixModelview ( ) ; // Get internal modelview 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
RLAPI Texture2D GenTextureCubemap ( Shader shader , Texture2D skyHDR , int size ) ; // Generate cubemap texture from HDR texture
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)
2018-12-16 01:30:55 +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
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
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 Wave LoadWaveEx ( void * data , int sampleCount , int sampleRate , int sampleSize , int channels ) ; // Load wave data from raw array data
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
RLAPI void PauseSound ( Sound sound ) ; // Pause a sound
RLAPI void ResumeSound ( Sound sound ) ; // Resume a paused sound
RLAPI void StopSound ( Sound sound ) ; // Stop playing a sound
RLAPI bool IsSoundPlaying ( Sound sound ) ; // Check if a sound is currently playing
RLAPI void SetSoundVolume ( Sound sound , float volume ) ; // Set volume for a sound (1.0 is max level)
RLAPI void SetSoundPitch ( Sound sound , float pitch ) ; // Set pitch for a sound (1.0 is base level)
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
RLAPI bool IsAudioBufferProcessed ( AudioStream stream ) ; // Check if any audio stream buffers requires refill
RLAPI void PlayAudioStream ( AudioStream stream ) ; // Play audio stream
RLAPI void PauseAudioStream ( AudioStream stream ) ; // Pause audio stream
RLAPI void ResumeAudioStream ( AudioStream stream ) ; // Resume audio stream
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)
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