2014-09-17 00:51:31 +04:00
/**********************************************************************************************
2014-09-03 18:51:28 +04:00
*
2016-08-06 12:33:05 +03:00
* raylib 1.6 .0 ( www . raylib . com )
2014-09-03 18:51:28 +04:00
*
2014-01-23 15:36:18 +04:00
* A simple and easy - to - use library to learn videogames programming
2013-11-19 02:38:44 +04:00
*
2013-11-23 16:30:54 +04:00
* Features :
* Library written in plain C code ( C99 )
2016-11-16 20:46:13 +03:00
* Uses PascalCase / camelCase notation
2016-07-18 18:06:33 +03:00
* Hardware accelerated with OpenGL ( 1.1 , 2.1 , 3.3 or ES 2.0 )
* Unique OpenGL abstraction layer ( usable as standalone module ) : [ rlgl ]
* Powerful fonts module with SpriteFonts support ( XNA bitmap fonts , AngelCode fonts , TTF )
2016-01-23 14:37:42 +03:00
* Multiple textures support , including compressed formats and mipmaps generation
2016-07-18 18:06:33 +03:00
* Basic 3 d support for Shapes , Models , Billboards , Heightmaps and Cubicmaps
* Materials ( diffuse , normal , specular ) and Lighting ( point , directional , spot ) support
2016-11-16 20:46:13 +03:00
* Powerful math module for Vector , Matrix and Quaternion operations : [ raymath ]
* Audio loading and playing with streaming support and mixing channels [ audio ]
2016-07-18 18:06:33 +03:00
* VR stereo rendering support with configurable HMD device parameters
* Multiple platforms support : Windows , Linux , Mac , Android , Raspberry Pi , HTML5 and Oculus Rift CV1
* Custom color palette for fancy visuals on raywhite background
* Minimal external dependencies ( GLFW3 , OpenGL , OpenAL )
2016-11-16 20:46:13 +03:00
* Complete binding for LUA [ rlua ]
*
* External libs :
* GLFW3 ( www . glfw . org ) for window / context management and input [ core ]
* GLAD for OpenGL extensions loading ( 3.3 Core profile , only PLATFORM_DESKTOP ) [ rlgl ]
* stb_image ( Sean Barret ) for images loading ( JPEG , PNG , BMP , TGA ) [ textures ]
* stb_image_write ( Sean Barret ) for image writting ( PNG ) [ utils ]
* stb_truetype ( Sean Barret ) for ttf fonts loading [ text ]
* stb_vorbis ( Sean Barret ) for ogg audio loading [ audio ]
* jar_xm ( Joshua Reisenauer ) for XM audio module loading [ audio ]
* jar_mod ( Joshua Reisenauer ) for MOD audio module loading [ audio ]
* dr_flac ( David Reid ) for FLAC audio file loading [ audio ]
* OpenAL Soft for audio device / context management [ audio ]
* tinfl for data decompression ( DEFLATE algorithm ) [ utils ]
2013-11-19 02:38:44 +04:00
*
2013-11-23 16:30:54 +04:00
* Some design decisions :
2016-01-23 14:37:42 +03:00
* 32 bit Colors - All defined color are always RGBA ( struct Color is 4 byte )
2016-11-16 20:46:13 +03:00
* One custom default font could be loaded automatically when InitWindow ( ) [ core ]
2016-01-23 14:37:42 +03:00
* If using OpenGL 3.3 or ES2 , several vertex buffers ( VAO / VBO ) are created to manage lines - triangles - quads
2016-11-16 20:46:13 +03:00
* If using OpenGL 3.3 or ES2 , two default shaders could be loaded automatically ( internally defined )
2014-01-23 15:36:18 +04:00
*
2016-01-23 14:37:42 +03:00
* - - LICENSE - -
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
*
2016-07-18 18:06:33 +03:00
* Copyright ( c ) 2013 - 2016 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
2014-09-17 00:51:31 +04:00
// Choose your platform here or just define it at compile time: -DPLATFORM_DESKTOP
//#define PLATFORM_DESKTOP // Windows, Linux or OSX
//#define PLATFORM_ANDROID // Android device
//#define PLATFORM_RPI // Raspberry Pi
2014-12-31 20:03:32 +03:00
//#define PLATFORM_WEB // HTML5 (emscripten, asm.js)
2016-06-14 18:16:20 +03:00
//#define RLGL_OCULUS_SUPPORT // Oculus Rift CV1 (complementary to PLATFORM_DESKTOP)
2014-09-17 00:51:31 +04:00
2014-10-17 23:11:58 +04:00
// Security check in case no PLATFORM_* defined
2014-12-15 03:08:30 +03:00
# if !defined(PLATFORM_DESKTOP) && !defined(PLATFORM_ANDROID) && !defined(PLATFORM_RPI) && !defined(PLATFORM_WEB)
2014-10-17 23:11:58 +04:00
# define PLATFORM_DESKTOP
# endif
2016-08-13 12:31:15 +03:00
# if defined(_WIN32) && defined(BUILDING_DLL)
# define RLAPI __declspec(dllexport) // We are building raylib as a Win32 DLL
# elif defined(_WIN32) && defined(RAYLIB_DLL)
# define RLAPI __declspec(dllimport) // We are using raylib as a Win32 DLL
# 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
2014-10-17 23:11:58 +04:00
// raylib Config Flags
# define FLAG_FULLSCREEN_MODE 1
2016-10-05 01:48:44 +03:00
# define FLAG_RESIZABLE_WINDOW 2
# define FLAG_SHOW_LOGO 4
# define FLAG_SHOW_MOUSE_CURSOR 8
# define FLAG_CENTERED_MODE 16
# define FLAG_MSAA_4X_HINT 32
# define FLAG_VSYNC_HINT 64
2014-10-17 23:11:58 +04:00
2015-02-02 02:57:08 +03:00
// Keyboard Function Keys
2013-11-19 02:38:44 +04:00
# define KEY_SPACE 32
# define KEY_ESCAPE 256
# define KEY_ENTER 257
2014-01-29 00:21:29 +04:00
# define KEY_BACKSPACE 259
2013-11-19 02:38:44 +04:00
# define KEY_RIGHT 262
# define KEY_LEFT 263
# define KEY_DOWN 264
# define KEY_UP 265
# define KEY_F1 290
# define KEY_F2 291
# define KEY_F3 292
# define KEY_F4 293
# define KEY_F5 294
# define KEY_F6 295
# define KEY_F7 296
# define KEY_F8 297
# define KEY_F9 298
# define KEY_F10 299
2016-02-19 21:57:25 +03:00
# define KEY_F11 300
# define KEY_F12 301
2013-11-19 02:38:44 +04:00
# define KEY_LEFT_SHIFT 340
# define KEY_LEFT_CONTROL 341
# define KEY_LEFT_ALT 342
# define KEY_RIGHT_SHIFT 344
# define KEY_RIGHT_CONTROL 345
# define KEY_RIGHT_ALT 346
2016-02-13 21:14:22 +03:00
// Keyboard Alpha Numeric Keys
2015-10-26 10:21:52 +03:00
# define KEY_ZERO 48
# define KEY_ONE 49
# define KEY_TWO 50
# define KEY_THREE 51
# define KEY_FOUR 52
# define KEY_FIVE 53
# define KEY_SIX 54
# define KEY_SEVEN 55
# define KEY_EIGHT 56
# define KEY_NINE 57
# define KEY_A 65
# define KEY_B 66
# define KEY_C 67
# define KEY_D 68
# define KEY_E 69
# define KEY_F 70
# define KEY_G 71
# define KEY_H 72
# define KEY_I 73
# define KEY_J 74
# define KEY_K 75
# define KEY_L 76
# define KEY_M 77
# define KEY_N 78
# define KEY_O 79
# define KEY_P 80
# define KEY_Q 81
# define KEY_R 82
# define KEY_S 83
# define KEY_T 84
# define KEY_U 85
# define KEY_V 86
# define KEY_W 87
# define KEY_X 88
# define KEY_Y 89
# define KEY_Z 90
2016-10-17 19:18:13 +03:00
# if defined(PLATFORM_ANDROID)
// Android Physical Buttons
# define KEY_BACK 4
# define KEY_MENU 82
# define KEY_VOLUME_UP 24
# define KEY_VOLUME_DOWN 25
# endif
2013-11-19 02:38:44 +04:00
// Mouse Buttons
2013-11-23 16:30:54 +04:00
# define MOUSE_LEFT_BUTTON 0
2016-10-09 14:25:50 +03:00
# define MOUSE_RIGHT_BUTTON 1
# define MOUSE_MIDDLE_BUTTON 2
2013-11-19 02:38:44 +04:00
2016-02-12 21:02:23 +03:00
// Touch points registered
# define MAX_TOUCH_POINTS 2
2013-11-19 02:38:44 +04:00
// Gamepad Number
2013-11-23 16:30:54 +04:00
# define GAMEPAD_PLAYER1 0
# define GAMEPAD_PLAYER2 1
2016-10-14 12:14:41 +03:00
# define GAMEPAD_PLAYER3 2
# define GAMEPAD_PLAYER4 3
2013-11-19 02:38:44 +04:00
2016-10-27 14:41:43 +03:00
// Gamepad Buttons/Axis
2016-08-07 14:38:48 +03:00
2016-10-27 14:41:43 +03:00
// PS3 USB Controller Buttons
# define GAMEPAD_PS3_BUTTON_TRIANGLE 0
# define GAMEPAD_PS3_BUTTON_CIRCLE 1
# define GAMEPAD_PS3_BUTTON_CROSS 2
# define GAMEPAD_PS3_BUTTON_SQUARE 3
# define GAMEPAD_PS3_BUTTON_L1 6
2016-08-07 14:38:48 +03:00
# define GAMEPAD_PS3_BUTTON_R1 7
2016-10-27 14:41:43 +03:00
# define GAMEPAD_PS3_BUTTON_L2 4
2016-08-07 14:38:48 +03:00
# define GAMEPAD_PS3_BUTTON_R2 5
2016-10-27 14:41:43 +03:00
# define GAMEPAD_PS3_BUTTON_START 8
2016-08-07 14:38:48 +03:00
# define GAMEPAD_PS3_BUTTON_SELECT 9
2016-10-27 14:41:43 +03:00
# define GAMEPAD_PS3_BUTTON_UP 24
# define GAMEPAD_PS3_BUTTON_RIGHT 25
# define GAMEPAD_PS3_BUTTON_DOWN 26
# define GAMEPAD_PS3_BUTTON_LEFT 27
# define GAMEPAD_PS3_BUTTON_PS 12
// PS3 USB Controller Axis
# define GAMEPAD_PS3_AXIS_LEFT_X 0
# define GAMEPAD_PS3_AXIS_LEFT_Y 1
# define GAMEPAD_PS3_AXIS_RIGHT_X 2
# define GAMEPAD_PS3_AXIS_RIGHT_Y 5
2016-11-02 15:39:48 +03:00
# define GAMEPAD_PS3_AXIS_L2 3 // [1..-1] (pressure-level)
# define GAMEPAD_PS3_AXIS_R2 4 // [1..-1] (pressure-level)
2013-11-19 02:38:44 +04:00
2016-03-16 19:52:09 +03:00
// Xbox360 USB Controller Buttons
# define GAMEPAD_XBOX_BUTTON_A 0
# define GAMEPAD_XBOX_BUTTON_B 1
# define GAMEPAD_XBOX_BUTTON_X 2
# define GAMEPAD_XBOX_BUTTON_Y 3
# define GAMEPAD_XBOX_BUTTON_LB 4
# define GAMEPAD_XBOX_BUTTON_RB 5
# define GAMEPAD_XBOX_BUTTON_SELECT 6
# define GAMEPAD_XBOX_BUTTON_START 7
2016-10-17 19:18:13 +03:00
# define GAMEPAD_XBOX_BUTTON_UP 10
# define GAMEPAD_XBOX_BUTTON_RIGHT 11
# define GAMEPAD_XBOX_BUTTON_DOWN 12
# define GAMEPAD_XBOX_BUTTON_LEFT 13
2016-11-02 15:39:48 +03:00
# define GAMEPAD_XBOX_BUTTON_HOME 8
2016-10-17 19:18:13 +03:00
2016-10-27 14:41:43 +03:00
// Xbox360 USB Controller Axis
// NOTE: For Raspberry Pi, axis must be reconfigured
2016-03-16 19:52:09 +03:00
# if defined(PLATFORM_RPI)
2016-11-02 15:39:48 +03:00
# define GAMEPAD_XBOX_AXIS_LEFT_X 0 // [-1..1] (left->right)
# define GAMEPAD_XBOX_AXIS_LEFT_Y 1 // [-1..1] (up->down)
# define GAMEPAD_XBOX_AXIS_RIGHT_X 3 // [-1..1] (left->right)
# define GAMEPAD_XBOX_AXIS_RIGHT_Y 4 // [-1..1] (up->down)
# define GAMEPAD_XBOX_AXIS_LT 2 // [-1..1] (pressure-level)
# define GAMEPAD_XBOX_AXIS_RT 5 // [-1..1] (pressure-level)
2016-11-03 20:57:16 +03:00
# else
# define GAMEPAD_XBOX_AXIS_LEFT_X 0 // [-1..1] (left->right)
# define GAMEPAD_XBOX_AXIS_LEFT_Y 1 // [1..-1] (up->down)
# define GAMEPAD_XBOX_AXIS_RIGHT_X 2 // [-1..1] (left->right)
# define GAMEPAD_XBOX_AXIS_RIGHT_Y 3 // [1..-1] (up->down)
# define GAMEPAD_XBOX_AXIS_LT 4 // [-1..1] (pressure-level)
# define GAMEPAD_XBOX_AXIS_RT 5 // [-1..1] (pressure-level)
2016-03-16 19:52:09 +03:00
# endif
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.
2016-08-01 19:05:07 +03:00
# ifdef __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)
2013-11-19 02:38:44 +04:00
//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
2015-02-03 00:06:50 +03:00
# ifndef __cplusplus
2013-11-19 02:38:44 +04:00
// Boolean type
2016-07-22 18:55:04 +03:00
# ifndef __APPLE__
# if !defined(_STDBOOL_H)
typedef enum { false , true } bool ;
# define _STDBOOL_H
# endif
# else
# include <stdbool.h>
2016-04-27 10:02:11 +03:00
# endif
2015-02-03 00:06:50 +03:00
# endif
2013-11-19 02:38:44 +04:00
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 ;
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 {
2013-11-23 16:30:54 +04:00
int x ;
int y ;
int width ;
int 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
int format ; // Data format (TextureFormat)
2013-11-19 02:38:44 +04:00
} Image ;
// Texture2D type, bpp always RGBA (32bit)
// 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
int format ; // Data format (TextureFormat)
2013-11-19 02:38:44 +04:00
} Texture2D ;
2016-03-30 21:09:16 +03:00
// RenderTexture2D type, for texture rendering
typedef struct RenderTexture2D {
unsigned int id ; // Render texture (fbo) id
Texture2D texture ; // Color buffer attachment texture
Texture2D depth ; // Depth buffer attachment texture
} RenderTexture2D ;
2014-04-19 18:36:49 +04:00
// SpriteFont type, includes texture and charSet array data
2013-11-19 02:38:44 +04:00
typedef struct SpriteFont {
2015-08-30 18:45:05 +03:00
Texture2D texture ; // Font texture
int size ; // Base size (default chars height)
int numChars ; // Number of characters
int * charValues ; // Characters values array
Rectangle * charRecs ; // Characters rectangles within the texture
2016-01-02 12:45:51 +03:00
Vector2 * charOffsets ; // Characters offsets (on drawing)
int * charAdvanceX ; // Characters x advance (on drawing)
2013-11-19 02:38:44 +04:00
} SpriteFont ;
2014-04-19 18:36:49 +04:00
// Camera type, defines a camera position/orientation in 3d space
typedef struct Camera {
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)
2016-05-31 20:12:37 +03:00
float fovy ; // Camera field-of-view apperture in Y (degrees)
2014-04-19 18:36:49 +04:00
} Camera ;
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 ;
2016-01-18 15:36:18 +03:00
// Bounding box type
typedef struct BoundingBox {
2016-05-31 20:12:37 +03:00
Vector3 min ; // minimum vertex box-corner
Vector3 max ; // maximum vertex box-corner
2016-01-18 15:36:18 +03:00
} BoundingBox ;
2014-04-19 18:36:49 +04:00
// Vertex data definning a mesh
2016-01-18 15:36:18 +03:00
typedef struct Mesh {
2016-05-31 20:12:37 +03:00
int vertexCount ; // number of vertices stored in arrays
int triangleCount ; // number of triangles stored (indexed or not)
float * vertices ; // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
float * texcoords ; // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
float * texcoords2 ; // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
float * normals ; // vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
float * tangents ; // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
unsigned char * colors ; // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
unsigned short * indices ; // vertex indices (in case vertex data comes indexed)
unsigned int vaoId ; // OpenGL Vertex Array Object id
unsigned int vboId [ 7 ] ; // OpenGL Vertex Buffer Objects id (7 types of vertex data)
2016-01-18 15:36:18 +03:00
} Mesh ;
2014-04-19 18:36:49 +04:00
2015-08-30 18:45:05 +03:00
// Shader type (generic shader)
2015-03-01 18:00:52 +03:00
typedef struct Shader {
2016-05-31 20:12:37 +03:00
unsigned int id ; // Shader program id
2016-07-29 22:35:57 +03:00
2016-05-08 16:24:02 +03:00
// Vertex attributes locations (default locations)
2016-05-31 20:12:37 +03:00
int vertexLoc ; // Vertex attribute location point (default-location = 0)
int texcoordLoc ; // Texcoord attribute location point (default-location = 1)
int texcoord2Loc ; // Texcoord2 attribute location point (default-location = 5)
int normalLoc ; // Normal attribute location point (default-location = 2)
int tangentLoc ; // Tangent attribute location point (default-location = 4)
int colorLoc ; // Color attibute location point (default-location = 3)
2015-04-06 15:02:29 +03:00
2016-05-02 01:16:32 +03:00
// Uniform locations
2016-05-31 20:12:37 +03:00
int mvpLoc ; // ModelView-Projection matrix uniform location point (vertex shader)
2016-09-05 21:15:21 +03:00
int colDiffuseLoc ; // Diffuse color uniform location point (fragment shader)
int colAmbientLoc ; // Ambient color uniform location point (fragment shader)
int colSpecularLoc ; // Specular color uniform location point (fragment shader)
2016-07-29 22:35:57 +03:00
2016-05-25 17:21:13 +03:00
// Texture map locations (generic for any kind of map)
2016-05-31 20:12:37 +03:00
int mapTexture0Loc ; // Map texture uniform location point (default-texture-unit = 0)
int mapTexture1Loc ; // Map texture uniform location point (default-texture-unit = 1)
int mapTexture2Loc ; // Map texture uniform location point (default-texture-unit = 2)
2015-03-01 18:00:52 +03:00
} Shader ;
2016-01-25 15:54:09 +03:00
// Material type
typedef struct Material {
2016-05-31 20:12:37 +03:00
Shader shader ; // Standard shader (supports 3 map textures)
2016-01-25 15:54:09 +03:00
2016-05-31 20:12:37 +03:00
Texture2D texDiffuse ; // Diffuse texture (binded to shader mapTexture0Loc)
Texture2D texNormal ; // Normal texture (binded to shader mapTexture1Loc)
Texture2D texSpecular ; // Specular texture (binded to shader mapTexture2Loc)
2016-07-29 22:35:57 +03:00
2016-05-31 20:12:37 +03:00
Color colDiffuse ; // Diffuse color
Color colAmbient ; // Ambient color
Color colSpecular ; // Specular color
2016-07-29 22:35:57 +03:00
2016-05-31 20:12:37 +03:00
float glossiness ; // Glossiness level (Ranges from 0 to 1000)
2016-01-25 15:54:09 +03:00
} Material ;
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
Mesh mesh ; // Vertex data buffers (RAM and VRAM)
Matrix transform ; // Local transform matrix
Material material ; // Shader and textures data
2014-04-19 18:36:49 +04:00
} Model ;
2013-11-19 02:38:44 +04:00
2016-05-20 13:28:07 +03:00
// Light type
typedef struct LightData {
2016-05-31 20:12:37 +03:00
unsigned int id ; // Light unique id
bool enabled ; // Light enabled
2016-07-06 21:33:46 +03:00
int type ; // Light type: LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT
2016-07-29 22:35:57 +03:00
2016-05-31 20:12:37 +03:00
Vector3 position ; // Light position
2016-09-05 21:15:21 +03:00
Vector3 target ; // Light direction: LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
2016-05-31 20:12:37 +03:00
float radius ; // Light attenuation radius light intensity reduced with distance (world distance)
2016-07-29 22:35:57 +03:00
2016-05-31 20:12:37 +03:00
Color diffuse ; // Light diffuse color
float intensity ; // Light intensity level
2016-07-29 22:35:57 +03:00
2016-05-31 20:12:37 +03:00
float coneAngle ; // Light cone max angle: LIGHT_SPOT
2016-05-20 13:28:07 +03:00
} LightData , * Light ;
// Light types
typedef enum { LIGHT_POINT , LIGHT_DIRECTIONAL , LIGHT_SPOT } LightType ;
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 ;
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 {
unsigned int source ; // OpenAL audio source id
unsigned int buffer ; // OpenAL audio buffer id
int format ; // OpenAL audio format specifier
} 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)
int format ; // OpenAL audio format specifier
unsigned int source ; // OpenAL audio source id
unsigned int buffers [ 2 ] ; // OpenAL audio buffers (double buffering)
} AudioStream ;
2015-05-05 00:46:31 +03:00
// Texture formats
// 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)
2015-05-05 00:46:31 +03:00
UNCOMPRESSED_GRAY_ALPHA , // 16 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
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
2015-04-06 15:02:29 +03:00
} TextureFormat ;
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
typedef enum {
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
// Texture parameters: wrap mode
typedef enum { WRAP_REPEAT = 0 , WRAP_CLAMP , WRAP_MIRROR } TextureWrapMode ;
2015-08-07 18:24:28 +03:00
// Color blending modes (pre-defined)
typedef enum { BLEND_ALPHA = 0 , BLEND_ADDITIVE , BLEND_MULTIPLIED } BlendMode ;
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
2015-05-05 00:46:31 +03:00
} Gestures ;
2015-07-29 22:45:28 +03:00
// Camera system modes
2016-09-25 15:28:24 +03:00
typedef enum {
CAMERA_CUSTOM = 0 ,
CAMERA_FREE ,
CAMERA_ORBITAL ,
CAMERA_FIRST_PERSON ,
CAMERA_THIRD_PERSON
} CameraMode ;
2015-07-29 22:45:28 +03:00
2016-07-06 01:54:38 +03:00
// Head Mounted Display devices
typedef enum {
HMD_DEFAULT_DEVICE = 0 ,
HMD_OCULUS_RIFT_DK2 ,
HMD_OCULUS_RIFT_CV1 ,
HMD_VALVE_HTC_VIVE ,
HMD_SAMSUNG_GEAR_VR ,
HMD_GOOGLE_CARDBOARD ,
HMD_SONY_PLAYSTATION_VR ,
HMD_RAZER_OSVR ,
HMD_FOVE_VR ,
2016-07-18 18:06:33 +03:00
} VrDevice ;
2016-07-06 01:54:38 +03:00
2013-11-19 02:38:44 +04:00
# ifdef __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)
//------------------------------------------------------------------------------------
2014-09-17 00:51:31 +04:00
# if defined(PLATFORM_ANDROID)
2016-10-18 01:15:23 +03:00
RLAPI void InitWindow ( int width , int height , void * state ) ; // Init Android Activity and OpenGL Graphics (struct android_app)
2014-12-31 20:03:32 +03:00
# elif defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) || defined(PLATFORM_WEB)
2016-08-13 12:31:15 +03:00
RLAPI void InitWindow ( int width , int height , const char * title ) ; // Initialize Window and OpenGL Graphics
2014-09-17 00:51:31 +04:00
# endif
2016-08-13 12:31:15 +03:00
RLAPI void CloseWindow ( void ) ; // Close Window and Terminate Context
RLAPI bool WindowShouldClose ( void ) ; // Detect if KEY_ESCAPE pressed or Close icon pressed
RLAPI bool IsWindowMinimized ( void ) ; // Detect if window has been minimized (or lost focus)
RLAPI void ToggleFullscreen ( void ) ; // Fullscreen toggle (only PLATFORM_DESKTOP)
RLAPI int GetScreenWidth ( void ) ; // Get current screen width
RLAPI int GetScreenHeight ( void ) ; // Get current screen height
2016-10-18 01:15:23 +03:00
# if !defined(PLATFORM_ANDROID)
2016-08-13 12:31:15 +03:00
RLAPI void ShowCursor ( void ) ; // Shows cursor
RLAPI void HideCursor ( void ) ; // Hides cursor
RLAPI bool IsCursorHidden ( void ) ; // Returns true if cursor is not visible
RLAPI void EnableCursor ( void ) ; // Enables cursor
RLAPI void DisableCursor ( void ) ; // Disables cursor
2016-10-18 01:15:23 +03:00
# endif
2016-08-13 12:31:15 +03:00
RLAPI void ClearBackground ( Color color ) ; // Sets Background Color
RLAPI void BeginDrawing ( void ) ; // Setup drawing canvas to start drawing
RLAPI void EndDrawing ( void ) ; // End canvas drawing and Swap Buffers (Double Buffering)
RLAPI void Begin2dMode ( Camera2D camera ) ; // Initialize 2D mode with custom camera
RLAPI void End2dMode ( void ) ; // Ends 2D mode custom camera usage
RLAPI void Begin3dMode ( Camera camera ) ; // Initializes 3D mode for drawing (Camera setup)
RLAPI void End3dMode ( void ) ; // Ends 3D mode and returns to default 2D orthographic mode
RLAPI void BeginTextureMode ( RenderTexture2D target ) ; // Initializes render texture for drawing
RLAPI void EndTextureMode ( void ) ; // Ends drawing to render texture
RLAPI Ray GetMouseRay ( Vector2 mousePosition , Camera camera ) ; // Returns a ray trace from mouse position
RLAPI Vector2 GetWorldToScreen ( Vector3 position , Camera camera ) ; // Returns the screen space position from a 3d world space position
RLAPI Matrix GetCameraMatrix ( Camera camera ) ; // Returns camera transform matrix (view matrix)
RLAPI void SetTargetFPS ( int fps ) ; // Set target FPS (maximum)
RLAPI float GetFPS ( void ) ; // Returns current FPS
RLAPI float GetFrameTime ( void ) ; // Returns time in seconds for one frame
RLAPI Color GetColor ( int hexValue ) ; // Returns a Color struct from hexadecimal value
RLAPI int GetHexValue ( Color color ) ; // Returns hexadecimal value for a Color
RLAPI float * ColorToFloat ( Color color ) ; // Converts Color to float array and normalizes
RLAPI float * VectorToFloat ( Vector3 vec ) ; // Converts Vector3 to float array
RLAPI float * MatrixToFloat ( Matrix mat ) ; // Converts Matrix to float array
RLAPI int GetRandomValue ( int min , int max ) ; // Returns a random value between min and max (both included)
RLAPI Color Fade ( Color color , float alpha ) ; // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f
RLAPI void SetConfigFlags ( char flags ) ; // Setup some window configuration flags
RLAPI void ShowLogo ( void ) ; // Activates raylib logo at startup (can be done with flags)
RLAPI bool IsFileDropped ( void ) ; // Check if a file have been dropped into window
RLAPI char * * GetDroppedFiles ( int * count ) ; // Retrieve dropped files into window
RLAPI void ClearDroppedFiles ( void ) ; // Clear dropped files paths buffer
RLAPI void StorageSaveValue ( int position , int value ) ; // Storage save integer value (to defined position)
RLAPI int StorageLoadValue ( int position ) ; // Storage load integer value (from defined position)
2016-01-04 17:12:34 +03:00
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Input Handling Functions (Module: core)
//------------------------------------------------------------------------------------
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)
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
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
RLAPI void SetMousePosition ( Vector2 position ) ; // Set mouse position XY
RLAPI int GetMouseWheelMove ( void ) ; // Returns mouse wheel movement Y
2015-02-26 15:52:03 +03:00
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)
RLAPI void SetCameraMoveControls ( int frontKey , int backKey ,
2016-09-26 20:15:44 +03:00
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)
//------------------------------------------------------------------------------------
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)
RLAPI void DrawCircle ( int centerX , int centerY , float radius , Color color ) ; // Draw a color-filled circle
RLAPI void DrawCircleGradient ( int centerX , int centerY , float radius , Color color1 , Color color2 ) ; // Draw a gradient-filled circle
RLAPI void DrawCircleV ( Vector2 center , float radius , Color color ) ; // Draw a color-filled circle (Vector version)
RLAPI void DrawCircleLines ( int centerX , int centerY , float radius , Color color ) ; // Draw circle outline
RLAPI void DrawRectangle ( int posX , int posY , int width , int height , Color color ) ; // Draw a color-filled rectangle
RLAPI void DrawRectangleRec ( Rectangle rec , Color color ) ; // Draw a color-filled rectangle
RLAPI void DrawRectangleGradient ( int posX , int posY , int width , int height , Color color1 , Color color2 ) ; // Draw a gradient-filled rectangle
RLAPI void DrawRectangleV ( Vector2 position , Vector2 size , Color color ) ; // Draw a color-filled rectangle (Vector version)
RLAPI void DrawRectangleLines ( int posX , int posY , int width , int height , Color color ) ; // Draw rectangle outline
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
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)
//------------------------------------------------------------------------------------
2016-08-13 12:31:15 +03:00
RLAPI Image LoadImage ( const char * fileName ) ; // Load an image into CPU memory (RAM)
RLAPI Image LoadImageEx ( Color * pixels , int width , int height ) ; // Load image data from Color array data (RGBA - 32bit)
RLAPI Image LoadImageRaw ( const char * fileName , int width , int height , int format , int headerSize ) ; // Load image data from RAW file
RLAPI Image LoadImageFromRES ( const char * rresName , int resId ) ; // Load an image from rRES file (raylib Resource)
RLAPI Texture2D LoadTexture ( const char * fileName ) ; // Load an image as texture into GPU memory
RLAPI Texture2D LoadTextureEx ( void * data , int width , int height , int textureFormat ) ; // Load a texture from raw data into GPU memory
RLAPI Texture2D LoadTextureFromRES ( const char * rresName , int resId ) ; // Load an image as texture from rRES file (raylib Resource)
RLAPI Texture2D LoadTextureFromImage ( Image image ) ; // Load a texture from image data
RLAPI RenderTexture2D LoadRenderTexture ( int width , int height ) ; // Load a texture to be used for rendering
RLAPI void UnloadImage ( Image image ) ; // Unload image from CPU memory (RAM)
RLAPI void UnloadTexture ( Texture2D texture ) ; // Unload texture from GPU memory
RLAPI void UnloadRenderTexture ( RenderTexture2D target ) ; // Unload render texture from GPU memory
RLAPI Color * GetImageData ( Image image ) ; // Get pixel data from image as a Color struct array
RLAPI Image GetTextureData ( Texture2D texture ) ; // Get pixel data from GPU texture and return an Image
2016-10-27 14:41:43 +03:00
RLAPI void UpdateTexture ( Texture2D texture , void * pixels ) ; // Update GPU texture with new data
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
2016-08-13 12:31:15 +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)
RLAPI Image ImageCopy ( Image image ) ; // Create an image duplicate (useful for transformations)
RLAPI void ImageCrop ( Image * image , Rectangle crop ) ; // Crop an image to a defined rectangle
RLAPI void ImageResize ( Image * image , int newWidth , int newHeight ) ; // Resize and image (bilinear filtering)
RLAPI void ImageResizeNN ( Image * image , int newWidth , int newHeight ) ; // Resize and image (Nearest-Neighbor scaling algorithm)
RLAPI Image ImageText ( const char * text , int fontSize , Color color ) ; // Create an image from text (default font)
RLAPI Image ImageTextEx ( SpriteFont font , const char * text , float fontSize , int spacing , Color tint ) ; // Create an image from text (custom sprite font)
RLAPI void ImageDraw ( Image * dst , Image src , Rectangle srcRec , Rectangle dstRec ) ; // Draw a source image within a destination image
RLAPI void ImageDrawText ( Image * dst , Vector2 position , const char * text , int fontSize , Color color ) ; // Draw text (default font) within an image (destination)
RLAPI void ImageDrawTextEx ( Image * dst , Vector2 position , SpriteFont font , const char * text , float fontSize , int spacing , Color color ) ; // Draw text (custom sprite font) within an image (destination)
RLAPI void ImageFlipVertical ( Image * image ) ; // Flip image vertically
RLAPI void ImageFlipHorizontal ( Image * image ) ; // Flip image horizontally
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)
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
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
RLAPI void DrawTexturePro ( Texture2D texture , Rectangle sourceRec , Rectangle destRec , Vector2 origin , // Draw a part of a texture defined by a rectangle with 'pro' parameters
2014-09-03 18:51:28 +04:00
float rotation , Color tint ) ;
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Font Loading and Text Drawing Functions (Module: text)
//------------------------------------------------------------------------------------
2016-08-13 12:31:15 +03:00
RLAPI SpriteFont GetDefaultFont ( void ) ; // Get the default SpriteFont
RLAPI SpriteFont LoadSpriteFont ( const char * fileName ) ; // Load a SpriteFont image into GPU memory
2016-10-31 17:38:15 +03:00
RLAPI SpriteFont LoadSpriteFontTTF ( const char * fileName , int fontSize , int numChars , int * fontChars ) ; // Load a SpriteFont from TTF font with parameters
2016-08-13 12:31:15 +03:00
RLAPI void UnloadSpriteFont ( SpriteFont spriteFont ) ; // Unload SpriteFont from GPU memory
2014-04-19 18:36:49 +04:00
2016-08-13 12:31:15 +03:00
RLAPI void DrawText ( const char * text , int posX , int posY , int fontSize , Color color ) ; // Draw text (using default font)
RLAPI void DrawTextEx ( SpriteFont spriteFont , const char * text , Vector2 position , // Draw text using SpriteFont and additional parameters
2016-08-07 14:38:48 +03:00
float fontSize , int spacing , Color tint ) ;
2016-08-13 12:31:15 +03:00
RLAPI int MeasureText ( const char * text , int fontSize ) ; // Measure string width for default font
2016-11-14 01:54:36 +03:00
RLAPI Vector2 MeasureTextEx ( SpriteFont spriteFont , const char * text , float fontSize , int spacing ) ; // Measure string size for SpriteFont
2015-08-30 18:45:05 +03:00
2016-08-13 12:31:15 +03:00
RLAPI void DrawFPS ( int posX , int posY ) ; // Shows current FPS on top-left corner
RLAPI const char * FormatText ( const char * text , . . . ) ; // Formatting of text with variables to 'embed'
RLAPI const char * SubText ( const char * text , int position , int length ) ; // Get a piece of a text string
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Basic 3d Shapes Drawing Functions (Module: models)
//------------------------------------------------------------------------------------
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
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
RLAPI void DrawLight ( Light light ) ; // Draw light in 3D world
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)
//------------------------------------------------------------------------------------
2016-08-13 12:31:15 +03:00
RLAPI Model LoadModel ( const char * fileName ) ; // Load a 3d model (.OBJ)
RLAPI Model LoadModelEx ( Mesh data , bool dynamic ) ; // Load a 3d model (from mesh data)
RLAPI Model LoadModelFromRES ( const char * rresName , int resId ) ; // Load a 3d model from rRES file (raylib Resource)
RLAPI Model LoadHeightmap ( Image heightmap , Vector3 size ) ; // Load a heightmap image as a 3d model
RLAPI Model LoadCubicmap ( Image cubicmap ) ; // Load a map image as a 3d model (cubes based)
RLAPI void UnloadModel ( Model model ) ; // Unload 3d model from memory
2016-10-03 14:29:01 +03:00
RLAPI Material LoadMaterial ( const char * fileName ) ; // Load material data (.MTL)
2016-08-13 12:31:15 +03:00
RLAPI Material LoadDefaultMaterial ( void ) ; // Load default material (uses default models shader)
RLAPI Material LoadStandardMaterial ( void ) ; // Load standard material (uses material attributes and lighting shader)
RLAPI void UnloadMaterial ( Material material ) ; // Unload material textures from VRAM
RLAPI void DrawModel ( Model model , Vector3 position , float scale , Color tint ) ; // Draw a model (with texture if set)
RLAPI void DrawModelEx ( Model model , Vector3 position , Vector3 rotationAxis , float rotationAngle , Vector3 scale , Color tint ) ; // Draw a model with extended parameters
RLAPI void DrawModelWires ( Model model , Vector3 position , float scale , Color tint ) ; // Draw a model wires (with texture if set)
RLAPI void DrawModelWiresEx ( Model model , Vector3 position , Vector3 rotationAxis , float rotationAngle , Vector3 scale , Color tint ) ; // Draw a model wires (with texture if set) with extended parameters
RLAPI void DrawBoundingBox ( BoundingBox box , Color color ) ; // Draw bounding box (wires)
RLAPI void DrawBillboard ( Camera camera , Texture2D texture , Vector3 center , float size , Color tint ) ; // Draw a billboard texture
RLAPI void DrawBillboardRec ( Camera camera , Texture2D texture , Rectangle sourceRec , Vector3 center , float size , Color tint ) ; // Draw a billboard texture defined by sourceRec
RLAPI BoundingBox CalculateBoundingBox ( Mesh mesh ) ; // Calculate mesh bounding box limits
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
RLAPI bool CheckCollisionRaySphereEx ( Ray ray , Vector3 spherePosition , float sphereRadius , Vector3 * collisionPoint ) ; // Detect collision between ray and sphere with extended parameters and collision point detection
RLAPI bool CheckCollisionRayBox ( Ray ray , BoundingBox box ) ; // Detect collision between ray and box
2016-10-03 14:29:01 +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
//------------------------------------------------------------------------------------
2016-08-13 12:31:15 +03:00
RLAPI Shader LoadShader ( char * vsFileName , char * fsFileName ) ; // Load a custom shader and bind default locations
RLAPI void UnloadShader ( Shader shader ) ; // Unload a custom shader from memory
2016-05-31 18:11:02 +03:00
2016-08-13 12:31:15 +03:00
RLAPI Shader GetDefaultShader ( void ) ; // Get default shader
RLAPI Shader GetStandardShader ( void ) ; // Get standard shader
RLAPI Texture2D GetDefaultTexture ( void ) ; // Get default texture
2015-08-30 18:45:05 +03:00
2016-08-13 12:31:15 +03:00
RLAPI int GetShaderLocation ( Shader shader , const char * uniformName ) ; // Get shader uniform location
RLAPI void SetShaderValue ( Shader shader , int uniformLoc , float * value , int size ) ; // Set shader uniform value (float)
RLAPI void SetShaderValuei ( Shader shader , int uniformLoc , int * value , int size ) ; // Set shader uniform value (int)
RLAPI void SetShaderValueMatrix ( Shader shader , int uniformLoc , Matrix mat ) ; // Set shader uniform value (matrix 4x4)
2015-08-30 18:45:05 +03:00
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)
2016-06-02 21:23:09 +03:00
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
2016-08-13 12:31:15 +03:00
RLAPI Light CreateLight ( int type , Vector3 position , Color diffuse ) ; // Create a new light, initialize it and add to pool
RLAPI void DestroyLight ( Light light ) ; // Destroy a light and take it out of the list
2016-05-20 13:28:07 +03:00
2016-06-14 18:16:20 +03:00
//------------------------------------------------------------------------------------
2016-07-06 01:54:38 +03:00
// VR experience Functions (Module: rlgl)
2016-06-14 18:16:20 +03:00
// NOTE: This functions are useless when using OpenGL 1.1
//------------------------------------------------------------------------------------
2016-08-13 12:31:15 +03:00
RLAPI void InitVrDevice ( int vdDevice ) ; // Init VR device
RLAPI void CloseVrDevice ( void ) ; // Close VR device
2016-11-17 14:55:30 +03:00
RLAPI bool IsVrDeviceReady ( void ) ; // Detect if VR device is ready
2016-10-09 21:56:58 +03:00
RLAPI bool IsVrSimulator ( void ) ; // Detect if VR simulator is running
2016-10-10 20:42:59 +03:00
RLAPI void UpdateVrTracking ( Camera * camera ) ; // Update VR tracking (position and orientation) and camera
2016-08-13 12:31:15 +03:00
RLAPI void ToggleVrMode ( void ) ; // Enable/Disable VR experience (device or simulator)
2016-06-14 18:16:20 +03:00
2013-11-19 02:38:44 +04:00
//------------------------------------------------------------------------------------
// Audio Loading and Playing Functions (Module: audio)
//------------------------------------------------------------------------------------
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
2016-09-08 01:20:06 +03:00
RLAPI Wave LoadWave ( const char * fileName ) ; // Load wave data from file into RAM
2016-09-08 02:03:05 +03:00
RLAPI Wave LoadWaveEx ( float * data , int sampleCount , int sampleRate , int sampleSize , int channels ) ; // Load wave data from float array data (32bit)
2016-09-08 01:20:06 +03:00
RLAPI Sound LoadSound ( const char * fileName ) ; // Load sound to memory
2016-08-13 12:31:15 +03:00
RLAPI Sound LoadSoundFromWave ( Wave wave ) ; // Load sound to memory from wave data
RLAPI Sound LoadSoundFromRES ( const char * rresName , int resId ) ; // Load sound to memory from rRES file (raylib Resource)
2016-08-29 12:17:58 +03:00
RLAPI void UpdateSound ( Sound sound , void * data , int numSamples ) ; // 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
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
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)
RLAPI float GetMusicTimeLength ( Music music ) ; // Get music time length (in seconds)
RLAPI float GetMusicTimePlayed ( Music music ) ; // Get current music time played (in seconds)
2016-08-16 12:09:55 +03:00
RLAPI AudioStream InitAudioStream ( unsigned int sampleRate ,
unsigned int sampleSize ,
2016-11-17 14:55:30 +03:00
unsigned int channels ) ; // Init audio stream (to stream raw audio pcm data)
2016-08-13 12:31:15 +03:00
RLAPI void UpdateAudioStream ( AudioStream stream , void * data , int numSamples ) ; // Update audio stream buffers with data
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
RLAPI void StopAudioStream ( AudioStream stream ) ; // Stop audio stream
2016-08-02 18:32:24 +03:00
2013-11-19 02:38:44 +04:00
# ifdef __cplusplus
}
# endif
2013-11-19 03:09:52 +04:00
# endif // RAYLIB_H