1 module raylib; 2 3 public 4 { 5 import rlgl; 6 import raymath; 7 import easings; 8 import raymathext; 9 } 10 /********************************************************************************************** 11 * 12 * raylib - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com) 13 * 14 * FEATURES: 15 * - NO external dependencies, all required libraries included with raylib 16 * - Multiplatform: Windows, Linux, FreeBSD, OpenBSD, NetBSD, DragonFly, MacOS, UWP, Android, Raspberry Pi, HTML5. 17 * - Written in plain C code (C99) in PascalCase/camelCase notation 18 * - Hardware accelerated with OpenGL (1.1, 2.1, 3.3 or ES2 - choose at compile) 19 * - Unique OpenGL abstraction layer (usable as standalone module): [rlgl] 20 * - Multiple Fonts formats supported (TTF, XNA fonts, AngelCode fonts) 21 * - Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC) 22 * - Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more! 23 * - Flexible Materials system, supporting classic maps and PBR maps 24 * - Skeletal Animation support (CPU bones-based animation) 25 * - Shaders support, including Model shaders and Postprocessing shaders 26 * - Powerful math module for Vector, Matrix and Quaternion operations: [raymath] 27 * - Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD) 28 * - VR stereo rendering with configurable HMD device parameters 29 * - Bindings to multiple programming languages available! 30 * 31 * NOTES: 32 * One custom font is loaded by default when InitWindow () [core] 33 * If using OpenGL 3.3 or ES2, one default shader is loaded automatically (internally defined) [rlgl] 34 * If using OpenGL 3.3 or ES2, several vertex buffers (VAO/VBO) are created to manage lines-triangles-quads 35 * 36 * DEPENDENCIES (included): 37 * [core] rglfw (github.com/glfw/glfw) for window/context management and input (only PLATFORM_DESKTOP) 38 * [rlgl] glad (github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading (only PLATFORM_DESKTOP) 39 * [raudio] miniaudio (github.com/dr-soft/miniaudio) for audio device/context management 40 * 41 * OPTIONAL DEPENDENCIES (included): 42 * [core] rgif (Charlie Tangora, Ramon Santamaria) for GIF recording 43 * [textures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...) 44 * [textures] stb_image_write (Sean Barret) for image writting (BMP, TGA, PNG, JPG) 45 * [textures] stb_image_resize (Sean Barret) for image resizing algorithms 46 * [textures] stb_perlin (Sean Barret) for Perlin noise image generation 47 * [text] stb_truetype (Sean Barret) for ttf fonts loading 48 * [text] stb_rect_pack (Sean Barret) for rectangles packing 49 * [models] par_shapes (Philip Rideout) for parametric 3d shapes generation 50 * [models] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL) 51 * [models] cgltf (Johannes Kuhlmann) for models loading (glTF) 52 * [raudio] stb_vorbis (Sean Barret) for OGG audio loading 53 * [raudio] dr_flac (David Reid) for FLAC audio file loading 54 * [raudio] dr_mp3 (David Reid) for MP3 audio file loading 55 * [raudio] jar_xm (Joshua Reisenauer) for XM audio module loading 56 * [raudio] jar_mod (Joshua Reisenauer) for MOD audio module loading 57 * 58 * 59 * LICENSE: zlib/libpng 60 * 61 * raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, 62 * BSD-like license that allows static linking with closed source software: 63 * 64 * Copyright (c) 2013-2020 Ramon Santamaria (@raysan5) 65 * 66 * This software is provided "as-is", without any express or implied warranty. In no event 67 * will the authors be held liable for any damages arising from the use of this software. 68 * 69 * Permission is granted to anyone to use this software for any purpose, including commercial 70 * applications, and to alter it and redistribute it freely, subject to the following restrictions: 71 * 72 * 1. The origin of this software must not be misrepresented; you must not claim that you 73 * wrote the original software. If you use this software in a product, an acknowledgment 74 * in the product documentation would be appreciated but is not required. 75 * 76 * 2. Altered source versions must be plainly marked as such, and must not be misrepresented 77 * as being the original software. 78 * 79 * 3. This notice may not be removed or altered from any source distribution. 80 * 81 **********************************************************************************************/ 82 83 import core.stdc.config; 84 import core.stdc.stdarg; 85 import core.stdc.stdlib; 86 87 extern (C) @nogc nothrow: 88 89 // Required for: va_list - Only used by TraceLogCallback 90 91 // We are building raylib as a Win32 shared library (.dll) 92 // We are using raylib as a Win32 shared library (.dll) // We are building or using raylib as a static library (or Linux shared library) 93 94 //---------------------------------------------------------------------------------- 95 // Some basic Defines 96 //---------------------------------------------------------------------------------- 97 98 enum PI = 3.14159265358979323846f; 99 100 enum DEG2RAD = PI / 180.0f; 101 enum RAD2DEG = 180.0f / PI; 102 103 enum MAX_TOUCH_POINTS = 10; // Maximum number of touch points supported 104 105 // Shader and material limits 106 enum MAX_SHADER_LOCATIONS = 32; // Maximum number of predefined locations stored in shader struct 107 enum MAX_MATERIAL_MAPS = 12; // Maximum number of texture maps stored in shader struct 108 109 // Allow custom memory allocators 110 111 alias RL_MALLOC = malloc; 112 113 alias RL_CALLOC = calloc; 114 115 alias RL_FREE = free; 116 117 // NOTE: MSC C++ compiler does not support compound literals (C99 feature) 118 // Plain structures in C++ (without constructors) can be initialized from { } initializers. 119 120 alias CLITERAL = Color; 121 122 enum Colors { 123 // Some Basic Colors 124 // NOTE: Custom raylib color palette for amazing visuals on WHITE background // Light Gray // Gray // Dark Gray // Yellow // Gold // Orange // Pink // Red // Maroon // Green // Lime // Dark Green // Sky Blue // Blue // Dark Blue // Purple // Violet // Dark Purple // Beige // Brown // Dark Brown // White // Black // Blank (Transparent) // Magenta // My own White (raylib logo) 125 LIGHTGRAY = Color(200, 200, 200, 255), // Light Gray 126 GRAY = Color(130, 130, 130, 255), // Gray 127 DARKGRAY = Color(80, 80, 80, 255), // Dark Gray 128 YELLOW = Color(253, 249, 0, 255), // Yellow 129 GOLD = Color(255, 203, 0, 255), // Gold 130 ORANGE = Color(255, 161, 0, 255), // Orange 131 PINK = Color(255, 109, 194, 255), // Pink 132 RED = Color(230, 41, 55, 255), // Red 133 MAROON = Color(190, 33, 55, 255), // Maroon 134 GREEN = Color(0, 228, 48, 255), // Green 135 LIME = Color(0, 158, 47, 255), // Lime 136 DARKGREEN = Color(0, 117, 44, 255), // Dark Green 137 SKYBLUE = Color(102, 191, 255, 255), // Sky Blue 138 BLUE = Color(0, 121, 241, 255), // Blue 139 DARKBLUE = Color(0, 82, 172, 255), // Dark Blue 140 PURPLE = Color(200, 122, 255, 255), // Purple 141 VIOLET = Color(135, 60, 190, 255), // Violet 142 DARKPURPLE = Color(112, 31, 126, 255), // Dark Purple 143 BEIGE = Color(211, 176, 131, 255), // Beige 144 BROWN = Color(127, 106, 79, 255), // Brown 145 DARKBROWN = Color(76, 63, 47, 255), // Dark Brown 146 147 WHITE = Color(255, 255, 255, 255), // White 148 BLACK = Color(0, 0, 0, 255), // Black 149 BLANK = Color(0, 0, 0, 0), // Blank (Transparent) 150 MAGENTA = Color(255, 0, 255, 255), // Magenta 151 RAYWHITE = Color(245, 245, 245, 255), // My own White (raylib logo) 152 } 153 154 //---------------------------------------------------------------------------------- 155 // Structures Definition 156 //---------------------------------------------------------------------------------- 157 // Vector2 type 158 struct Vector2 159 { 160 float x = 0.0f; 161 float y = 0.0f; 162 mixin Linear; 163 } 164 165 struct Bivector2 166 { 167 float xy = 0.0f; 168 alias xy this; 169 mixin Linear; 170 } 171 172 // Vector3 type 173 struct Vector3 174 { 175 float x = 0.0f; 176 float y = 0.0f; 177 float z = 0.0f; 178 mixin Linear; 179 } 180 181 // Bivector3 type 182 /// Beware of the field order 183 /// xy is the first field 184 struct Bivector3 185 { 186 float xy = 0.0f; 187 float yz = 0.0f; 188 float zx = 0.0f; 189 mixin Linear; 190 } 191 192 // Rotor type 193 struct Rotor3 194 { 195 float a = 1.0f; 196 float xy = 0.0f; 197 float yz = 0.0f; 198 float zx = 0.0f; 199 mixin Linear; 200 201 alias i = yz; 202 alias j = zx; 203 alias k = xy; 204 205 @property Bivector3 b() 206 { 207 return Bivector3(xy, yz, zx); 208 } 209 210 @property Bivector3 b(Bivector3 _b) 211 { 212 xy = _b.xy; 213 yz = _b.yz; 214 zx = _b.zx; 215 return _b; 216 } 217 218 this(float _a, Bivector3 _b) 219 { 220 a = _a; 221 b = _b; 222 } 223 224 this(float _a, float _xy, float _yz, float _zx) 225 { 226 a = _a; 227 xy = _xy; 228 yz = _yz; 229 zx = _zx; 230 } 231 } 232 233 alias Quaternion = Rotor3; 234 235 // Vector4 type 236 struct Vector4 237 { 238 float x = 0.0f; 239 float y = 0.0f; 240 float z = 0.0f; 241 float w = 0.0f; 242 mixin Linear; 243 } 244 245 // Matrix type (OpenGL style 4x4 - right handed, column major) 246 struct Matrix4 247 { 248 float m0 = 0.0f; 249 float m4 = 0.0f; 250 float m8 = 0.0f; 251 float m12 = 0.0f; 252 float m1 = 0.0f; 253 float m5 = 0.0f; 254 float m9 = 0.0f; 255 float m13 = 0.0f; 256 float m2 = 0.0f; 257 float m6 = 0.0f; 258 float m10 = 0.0f; 259 float m14 = 0.0f; 260 float m3 = 0.0f; 261 float m7 = 0.0f; 262 float m11 = 0.0f; 263 float m15 = 0.0f; 264 mixin Linear; 265 } 266 267 alias Matrix = Matrix4; 268 269 // Color type, RGBA (32bit) 270 struct Color 271 { 272 ubyte r; 273 ubyte g; 274 ubyte b; 275 ubyte a; 276 } 277 278 // Rectangle type 279 struct Rectangle 280 { 281 float x = 0.0f; 282 float y = 0.0f; 283 float width = 0.0f; 284 float height = 0.0f; 285 alias w = width; 286 alias h = height; 287 } 288 289 // Image type, bpp always RGBA (32bit) 290 // NOTE: Data stored in CPU memory (RAM) 291 struct Image 292 { 293 void* data; // Image raw data 294 int width; // Image base width 295 int height; // Image base height 296 int mipmaps; // Mipmap levels, 1 by default 297 int format; // Data format (PixelFormat type) 298 } 299 300 // Texture2D type 301 // NOTE: Data stored in GPU memory 302 struct Texture2D 303 { 304 uint id; // OpenGL texture id 305 int width; // Texture base width 306 int height; // Texture base height 307 int mipmaps; // Mipmap levels, 1 by default 308 int format; // Data format (PixelFormat type) 309 } 310 311 // Texture type, same as Texture2D 312 alias Texture = Texture2D; 313 314 // TextureCubemap type, actually, same as Texture2D 315 alias TextureCubemap = Texture2D; 316 317 // RenderTexture2D type, for texture rendering 318 struct RenderTexture2D 319 { 320 uint id; // OpenGL Framebuffer Object (FBO) id 321 Texture2D texture; // Color buffer attachment texture 322 Texture2D depth; // Depth buffer attachment texture 323 bool depthTexture; // Track if depth attachment is a texture or renderbuffer 324 } 325 326 // RenderTexture type, same as RenderTexture2D 327 alias RenderTexture = RenderTexture2D; 328 329 // N-Patch layout info 330 struct NPatchInfo 331 { 332 Rectangle sourceRec; // Region in the texture 333 int left; // left border offset 334 int top; // top border offset 335 int right; // right border offset 336 int bottom; // bottom border offset 337 int type; // layout of the n-patch: 3x3, 1x3 or 3x1 338 } 339 340 // Font character info 341 struct CharInfo 342 { 343 int value; // Character value (Unicode) 344 int offsetX; // Character offset X when drawing 345 int offsetY; // Character offset Y when drawing 346 int advanceX; // Character advance position X 347 Image image; // Character image data 348 } 349 350 // Font type, includes texture and charSet array data 351 struct Font 352 { 353 int baseSize; // Base size (default chars height) 354 int charsCount; // Number of characters 355 Texture2D texture; // Characters texture atlas 356 Rectangle* recs; // Characters rectangles in texture 357 CharInfo* chars; // Characters info data 358 } 359 360 alias SpriteFont = Font; // SpriteFont type fallback, defaults to Font 361 362 // Camera type, defines a camera position/orientation in 3d space 363 struct Camera3D 364 { 365 Vector3 position; // Camera position 366 Vector3 target; // Camera target it looks-at 367 Vector3 up; // Camera up vector (rotation over its axis) 368 float fovy; // Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic 369 CameraType type; // Camera type, defines projection type: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC 370 } 371 372 alias Camera = Camera3D; // Camera type fallback, defaults to Camera3D 373 374 // Camera2D type, defines a 2d camera 375 struct Camera2D 376 { 377 Vector2 offset; // Camera offset (displacement from target) 378 Vector2 target; // Camera target (rotation and zoom origin) 379 float rotation = 0.0f; // Camera rotation in degrees 380 float zoom = 1.0f; // Camera zoom (scaling), should be 1.0f by default 381 } 382 383 // Vertex data definning a mesh 384 // NOTE: Data stored in CPU memory (and GPU) 385 struct Mesh 386 { 387 int vertexCount; // Number of vertices stored in arrays 388 int triangleCount; // Number of triangles stored (indexed or not) 389 390 // Default vertex data 391 float* vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) 392 float* texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) 393 float* texcoords2; // Vertex second texture coordinates (useful for lightmaps) (shader-location = 5) 394 float* normals; // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) 395 float* tangents; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) 396 ubyte* colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) 397 ushort* indices; // Vertex indices (in case vertex data comes indexed) 398 399 // Animation vertex data 400 float* animVertices; // Animated vertex positions (after bones transformations) 401 float* animNormals; // Animated normals (after bones transformations) 402 int* boneIds; // Vertex bone ids, up to 4 bones influence by vertex (skinning) 403 float* boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) 404 405 // OpenGL identifiers 406 uint vaoId; // OpenGL Vertex Array Object id 407 uint* vboId; // OpenGL Vertex Buffer Objects id (default vertex data) 408 } 409 410 // Shader type (generic) 411 struct Shader 412 { 413 uint id; // Shader program id 414 int[MAX_SHADER_LOCATIONS] locs; // Shader locations array 415 } 416 417 // Material texture map 418 struct MaterialMap 419 { 420 Texture2D texture; // Material map texture 421 Color color; // Material map color 422 float value; // Material map value 423 } 424 425 // Material type (generic) 426 struct Material 427 { 428 Shader shader; // Material shader 429 MaterialMap[MAX_MATERIAL_MAPS] maps; // Material maps 430 float* params; // Material generic parameters (if required) 431 } 432 433 // Transformation properties 434 struct Transform 435 { 436 Vector3 translation; // Translation 437 Quaternion rotation; // Rotation 438 Vector3 scale; // Scale 439 } 440 441 // Bone information 442 struct BoneInfo 443 { 444 char[32] name; // Bone name 445 int parent; // Bone parent 446 } 447 448 // Model type 449 struct Model 450 { 451 Matrix transform; // Local transform matrix 452 453 int meshCount; // Number of meshes 454 Mesh* meshes; // Meshes array 455 456 int materialCount; // Number of materials 457 Material* materials; // Materials array 458 int* meshMaterial; // Mesh material number 459 460 // Animation data 461 int boneCount; // Number of bones 462 BoneInfo* bones; // Bones information (skeleton) 463 Transform* bindPose; // Bones base transformation (pose) 464 } 465 466 // Model animation 467 struct ModelAnimation 468 { 469 int boneCount; // Number of bones 470 BoneInfo* bones; // Bones information (skeleton) 471 472 int frameCount; // Number of animation frames 473 Transform** framePoses; // Poses array by frame 474 } 475 476 // Ray type (useful for raycast) 477 struct Ray 478 { 479 Vector3 position; // Ray position (origin) 480 Vector3 direction; // Ray direction 481 } 482 483 // Raycast hit information 484 struct RayHitInfo 485 { 486 bool hit; // Did the ray hit something? 487 float distance; // Distance to nearest hit 488 Vector3 position; // Position of nearest hit 489 Vector3 normal; // Surface normal of hit 490 } 491 492 // Bounding box type 493 struct BoundingBox 494 { 495 Vector3 min; // Minimum vertex box-corner 496 Vector3 max; // Maximum vertex box-corner 497 } 498 499 // Wave type, defines audio wave data 500 struct Wave 501 { 502 uint sampleCount; // Number of samples 503 uint sampleRate; // Frequency (samples per second) 504 uint sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) 505 uint channels; // Number of channels (1-mono, 2-stereo) 506 void* data; // Buffer data pointer 507 } 508 509 struct rAudioBuffer; 510 511 // Audio stream type 512 // NOTE: Useful to create custom audio streams not bound to a specific file 513 struct AudioStream 514 { 515 uint sampleRate; // Frequency (samples per second) 516 uint sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) 517 uint channels; // Number of channels (1-mono, 2-stereo) 518 519 rAudioBuffer* buffer; // Pointer to internal data used by the audio system 520 }; 521 522 // Sound source type 523 struct Sound 524 { 525 uint sampleCount; // Total number of samples 526 AudioStream stream; // Audio stream 527 }; 528 529 // Music stream type (audio file streaming from memory) 530 // NOTE: Anything longer than ~10 seconds should be streamed 531 struct Music 532 { 533 int ctxType; // Type of music context (audio filetype) 534 void* ctxData; // Audio context data, depends on type 535 536 uint sampleCount; // Total number of samples 537 uint loopCount; // Loops count (times music will play), 0 means infinite loop 538 539 AudioStream stream; // Audio stream 540 }; 541 542 // Head-Mounted-Display device parameters 543 struct VrDeviceInfo 544 { 545 int hResolution; // HMD horizontal resolution in pixels 546 int vResolution; // HMD vertical resolution in pixels 547 float hScreenSize; // HMD horizontal size in meters 548 float vScreenSize; // HMD vertical size in meters 549 float vScreenCenter; // HMD screen center in meters 550 float eyeToScreenDistance; // HMD distance between eye and display in meters 551 float lensSeparationDistance; // HMD lens separation distance in meters 552 float interpupillaryDistance; // HMD IPD (distance between pupils) in meters 553 float[4] lensDistortionValues; // HMD lens distortion constant parameters 554 float[4] chromaAbCorrection; // HMD chromatic aberration correction parameters 555 } 556 557 //---------------------------------------------------------------------------------- 558 // Enumerators Definition 559 //---------------------------------------------------------------------------------- 560 // System config flags 561 // NOTE: Used for bit masks 562 enum ConfigFlag 563 { 564 FLAG_RESERVED = 1, // Reserved 565 FLAG_FULLSCREEN_MODE = 2, // Set to run program in fullscreen 566 FLAG_WINDOW_RESIZABLE = 4, // Set to allow resizable window 567 FLAG_WINDOW_UNDECORATED = 8, // Set to disable window decoration (frame and buttons) 568 FLAG_WINDOW_TRANSPARENT = 16, // Set to allow transparent window 569 FLAG_WINDOW_HIDDEN = 128, // Set to create the window initially hidden 570 FLAG_WINDOW_ALWAYS_RUN = 256, // Set to allow windows running while minimized 571 FLAG_MSAA_4X_HINT = 32, // Set to try enabling MSAA 4X 572 FLAG_VSYNC_HINT = 64 // Set to try enabling V-Sync on GPU 573 } 574 575 // Trace log type 576 enum TraceLogType 577 { 578 LOG_ALL = 0, // Display all logs 579 LOG_TRACE = 1, 580 LOG_DEBUG = 2, 581 LOG_INFO = 3, 582 LOG_WARNING = 4, 583 LOG_ERROR = 5, 584 LOG_FATAL = 6, 585 LOG_NONE = 7 // Disable logging 586 } 587 588 // Keyboard keys 589 enum KeyboardKey 590 { 591 // Alphanumeric keys 592 KEY_APOSTROPHE = 39, 593 KEY_COMMA = 44, 594 KEY_MINUS = 45, 595 KEY_PERIOD = 46, 596 KEY_SLASH = 47, 597 KEY_ZERO = 48, 598 KEY_ONE = 49, 599 KEY_TWO = 50, 600 KEY_THREE = 51, 601 KEY_FOUR = 52, 602 KEY_FIVE = 53, 603 KEY_SIX = 54, 604 KEY_SEVEN = 55, 605 KEY_EIGHT = 56, 606 KEY_NINE = 57, 607 KEY_SEMICOLON = 59, 608 KEY_EQUAL = 61, 609 KEY_A = 65, 610 KEY_B = 66, 611 KEY_C = 67, 612 KEY_D = 68, 613 KEY_E = 69, 614 KEY_F = 70, 615 KEY_G = 71, 616 KEY_H = 72, 617 KEY_I = 73, 618 KEY_J = 74, 619 KEY_K = 75, 620 KEY_L = 76, 621 KEY_M = 77, 622 KEY_N = 78, 623 KEY_O = 79, 624 KEY_P = 80, 625 KEY_Q = 81, 626 KEY_R = 82, 627 KEY_S = 83, 628 KEY_T = 84, 629 KEY_U = 85, 630 KEY_V = 86, 631 KEY_W = 87, 632 KEY_X = 88, 633 KEY_Y = 89, 634 KEY_Z = 90, 635 636 // Function keys 637 KEY_SPACE = 32, 638 KEY_ESCAPE = 256, 639 KEY_ENTER = 257, 640 KEY_TAB = 258, 641 KEY_BACKSPACE = 259, 642 KEY_INSERT = 260, 643 KEY_DELETE = 261, 644 KEY_RIGHT = 262, 645 KEY_LEFT = 263, 646 KEY_DOWN = 264, 647 KEY_UP = 265, 648 KEY_PAGE_UP = 266, 649 KEY_PAGE_DOWN = 267, 650 KEY_HOME = 268, 651 KEY_END = 269, 652 KEY_CAPS_LOCK = 280, 653 KEY_SCROLL_LOCK = 281, 654 KEY_NUM_LOCK = 282, 655 KEY_PRINT_SCREEN = 283, 656 KEY_PAUSE = 284, 657 KEY_F1 = 290, 658 KEY_F2 = 291, 659 KEY_F3 = 292, 660 KEY_F4 = 293, 661 KEY_F5 = 294, 662 KEY_F6 = 295, 663 KEY_F7 = 296, 664 KEY_F8 = 297, 665 KEY_F9 = 298, 666 KEY_F10 = 299, 667 KEY_F11 = 300, 668 KEY_F12 = 301, 669 KEY_LEFT_SHIFT = 340, 670 KEY_LEFT_CONTROL = 341, 671 KEY_LEFT_ALT = 342, 672 KEY_LEFT_SUPER = 343, 673 KEY_RIGHT_SHIFT = 344, 674 KEY_RIGHT_CONTROL = 345, 675 KEY_RIGHT_ALT = 346, 676 KEY_RIGHT_SUPER = 347, 677 KEY_KB_MENU = 348, 678 KEY_LEFT_BRACKET = 91, 679 KEY_BACKSLASH = 92, 680 KEY_RIGHT_BRACKET = 93, 681 KEY_GRAVE = 96, 682 683 // Keypad keys 684 KEY_KP_0 = 320, 685 KEY_KP_1 = 321, 686 KEY_KP_2 = 322, 687 KEY_KP_3 = 323, 688 KEY_KP_4 = 324, 689 KEY_KP_5 = 325, 690 KEY_KP_6 = 326, 691 KEY_KP_7 = 327, 692 KEY_KP_8 = 328, 693 KEY_KP_9 = 329, 694 KEY_KP_DECIMAL = 330, 695 KEY_KP_DIVIDE = 331, 696 KEY_KP_MULTIPLY = 332, 697 KEY_KP_SUBTRACT = 333, 698 KEY_KP_ADD = 334, 699 KEY_KP_ENTER = 335, 700 KEY_KP_EQUAL = 336 701 } 702 703 // Android buttons 704 enum AndroidButton 705 { 706 KEY_BACK = 4, 707 KEY_MENU = 82, 708 KEY_VOLUME_UP = 24, 709 KEY_VOLUME_DOWN = 25 710 } 711 712 // Mouse buttons 713 enum MouseButton 714 { 715 MOUSE_LEFT_BUTTON = 0, 716 MOUSE_RIGHT_BUTTON = 1, 717 MOUSE_MIDDLE_BUTTON = 2 718 } 719 720 // Gamepad number 721 enum GamepadNumber 722 { 723 GAMEPAD_PLAYER1 = 0, 724 GAMEPAD_PLAYER2 = 1, 725 GAMEPAD_PLAYER3 = 2, 726 GAMEPAD_PLAYER4 = 3 727 } 728 729 // Gamepad Buttons 730 enum GamepadButton 731 { 732 // This is here just for error checking 733 GAMEPAD_BUTTON_UNKNOWN = 0, 734 735 // This is normally a DPAD 736 GAMEPAD_BUTTON_LEFT_FACE_UP = 1, 737 GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2, 738 GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3, 739 GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4, 740 741 // This normally corresponds with PlayStation and Xbox controllers 742 // XBOX: [Y,X,A,B] 743 // PS3: [Triangle,Square,Cross,Circle] 744 // No support for 6 button controllers though.. 745 GAMEPAD_BUTTON_RIGHT_FACE_UP = 5, 746 GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6, 747 GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7, 748 GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8, 749 750 // Triggers 751 GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9, 752 GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10, 753 GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11, 754 GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12, 755 756 // These are buttons in the center of the gamepad 757 GAMEPAD_BUTTON_MIDDLE_LEFT = 13, //PS3 Select 758 GAMEPAD_BUTTON_MIDDLE = 14, //PS Button/XBOX Button 759 GAMEPAD_BUTTON_MIDDLE_RIGHT = 15, //PS3 Start 760 761 // These are the joystick press in buttons 762 GAMEPAD_BUTTON_LEFT_THUMB = 16, 763 GAMEPAD_BUTTON_RIGHT_THUMB = 17 764 } 765 766 enum GamepadAxis 767 { 768 // This is here just for error checking 769 GAMEPAD_AXIS_UNKNOWN = 0, 770 771 // Left stick 772 GAMEPAD_AXIS_LEFT_X = 1, 773 GAMEPAD_AXIS_LEFT_Y = 2, 774 775 // Right stick 776 GAMEPAD_AXIS_RIGHT_X = 3, 777 GAMEPAD_AXIS_RIGHT_Y = 4, 778 779 // Pressure levels for the back triggers 780 GAMEPAD_AXIS_LEFT_TRIGGER = 5, // [1..-1] (pressure-level) 781 GAMEPAD_AXIS_RIGHT_TRIGGER = 6 // [1..-1] (pressure-level) 782 } 783 784 // Shader location point type 785 enum ShaderLocationIndex 786 { 787 LOC_VERTEX_POSITION = 0, 788 LOC_VERTEX_TEXCOORD01 = 1, 789 LOC_VERTEX_TEXCOORD02 = 2, 790 LOC_VERTEX_NORMAL = 3, 791 LOC_VERTEX_TANGENT = 4, 792 LOC_VERTEX_COLOR = 5, 793 LOC_MATRIX_MVP = 6, 794 LOC_MATRIX_MODEL = 7, 795 LOC_MATRIX_VIEW = 8, 796 LOC_MATRIX_PROJECTION = 9, 797 LOC_VECTOR_VIEW = 10, 798 LOC_COLOR_DIFFUSE = 11, 799 LOC_COLOR_SPECULAR = 12, 800 LOC_COLOR_AMBIENT = 13, 801 LOC_MAP_ALBEDO = 14, // LOC_MAP_DIFFUSE 802 LOC_MAP_METALNESS = 15, // LOC_MAP_SPECULAR 803 LOC_MAP_NORMAL = 16, 804 LOC_MAP_ROUGHNESS = 17, 805 LOC_MAP_OCCLUSION = 18, 806 LOC_MAP_EMISSION = 19, 807 LOC_MAP_HEIGHT = 20, 808 LOC_MAP_CUBEMAP = 21, 809 LOC_MAP_IRRADIANCE = 22, 810 LOC_MAP_PREFILTER = 23, 811 LOC_MAP_BRDF = 24 812 } 813 814 enum LOC_MAP_DIFFUSE = ShaderLocationIndex.LOC_MAP_ALBEDO; 815 enum LOC_MAP_SPECULAR = ShaderLocationIndex.LOC_MAP_METALNESS; 816 817 // Shader uniform data types 818 enum ShaderUniformDataType 819 { 820 UNIFORM_FLOAT = 0, 821 UNIFORM_VEC2 = 1, 822 UNIFORM_VEC3 = 2, 823 UNIFORM_VEC4 = 3, 824 UNIFORM_INT = 4, 825 UNIFORM_IVEC2 = 5, 826 UNIFORM_IVEC3 = 6, 827 UNIFORM_IVEC4 = 7, 828 UNIFORM_SAMPLER2D = 8 829 } 830 831 // Material map type 832 enum MaterialMapType 833 { 834 MAP_ALBEDO = 0, // MAP_DIFFUSE 835 MAP_METALNESS = 1, // MAP_SPECULAR 836 MAP_NORMAL = 2, 837 MAP_ROUGHNESS = 3, 838 MAP_OCCLUSION = 4, 839 MAP_EMISSION = 5, 840 MAP_HEIGHT = 6, 841 MAP_CUBEMAP = 7, // NOTE: Uses GL_TEXTURE_CUBE_MAP 842 MAP_IRRADIANCE = 8, // NOTE: Uses GL_TEXTURE_CUBE_MAP 843 MAP_PREFILTER = 9, // NOTE: Uses GL_TEXTURE_CUBE_MAP 844 MAP_BRDF = 10 845 } 846 847 enum MAP_DIFFUSE = MaterialMapType.MAP_ALBEDO; 848 enum MAP_SPECULAR = MaterialMapType.MAP_METALNESS; 849 850 // Pixel formats 851 // NOTE: Support depends on OpenGL version and platform 852 enum PixelFormat 853 { 854 UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) 855 UNCOMPRESSED_GRAY_ALPHA = 2, // 8*2 bpp (2 channels) 856 UNCOMPRESSED_R5G6B5 = 3, // 16 bpp 857 UNCOMPRESSED_R8G8B8 = 4, // 24 bpp 858 UNCOMPRESSED_R5G5B5A1 = 5, // 16 bpp (1 bit alpha) 859 UNCOMPRESSED_R4G4B4A4 = 6, // 16 bpp (4 bit alpha) 860 UNCOMPRESSED_R8G8B8A8 = 7, // 32 bpp 861 UNCOMPRESSED_R32 = 8, // 32 bpp (1 channel - float) 862 UNCOMPRESSED_R32G32B32 = 9, // 32*3 bpp (3 channels - float) 863 UNCOMPRESSED_R32G32B32A32 = 10, // 32*4 bpp (4 channels - float) 864 COMPRESSED_DXT1_RGB = 11, // 4 bpp (no alpha) 865 COMPRESSED_DXT1_RGBA = 12, // 4 bpp (1 bit alpha) 866 COMPRESSED_DXT3_RGBA = 13, // 8 bpp 867 COMPRESSED_DXT5_RGBA = 14, // 8 bpp 868 COMPRESSED_ETC1_RGB = 15, // 4 bpp 869 COMPRESSED_ETC2_RGB = 16, // 4 bpp 870 COMPRESSED_ETC2_EAC_RGBA = 17, // 8 bpp 871 COMPRESSED_PVRT_RGB = 18, // 4 bpp 872 COMPRESSED_PVRT_RGBA = 19, // 4 bpp 873 COMPRESSED_ASTC_4x4_RGBA = 20, // 8 bpp 874 COMPRESSED_ASTC_8x8_RGBA = 21 // 2 bpp 875 } 876 877 // Texture parameters: filter mode 878 // NOTE 1: Filtering considers mipmaps if available in the texture 879 // NOTE 2: Filter is accordingly set for minification and magnification 880 enum TextureFilterMode 881 { 882 FILTER_POINT = 0, // No filter, just pixel aproximation 883 FILTER_BILINEAR = 1, // Linear filtering 884 FILTER_TRILINEAR = 2, // Trilinear filtering (linear with mipmaps) 885 FILTER_ANISOTROPIC_4X = 3, // Anisotropic filtering 4x 886 FILTER_ANISOTROPIC_8X = 4, // Anisotropic filtering 8x 887 FILTER_ANISOTROPIC_16X = 5 // Anisotropic filtering 16x 888 } 889 890 // Cubemap layout type 891 enum CubemapLayoutType 892 { 893 CUBEMAP_AUTO_DETECT = 0, // Automatically detect layout type 894 CUBEMAP_LINE_VERTICAL = 1, // Layout is defined by a vertical line with faces 895 CUBEMAP_LINE_HORIZONTAL = 2, // Layout is defined by an horizontal line with faces 896 CUBEMAP_CROSS_THREE_BY_FOUR = 3, // Layout is defined by a 3x4 cross with cubemap faces 897 CUBEMAP_CROSS_FOUR_BY_THREE = 4, // Layout is defined by a 4x3 cross with cubemap faces 898 CUBEMAP_PANORAMA = 5 // Layout is defined by a panorama image (equirectangular map) 899 } 900 901 // Texture parameters: wrap mode 902 enum TextureWrapMode 903 { 904 WRAP_REPEAT = 0, // Repeats texture in tiled mode 905 WRAP_CLAMP = 1, // Clamps texture to edge pixel in tiled mode 906 WRAP_MIRROR_REPEAT = 2, // Mirrors and repeats the texture in tiled mode 907 WRAP_MIRROR_CLAMP = 3 // Mirrors and clamps to border the texture in tiled mode 908 } 909 910 // Font type, defines generation method 911 enum FontType 912 { 913 FONT_DEFAULT = 0, // Default font generation, anti-aliased 914 FONT_BITMAP = 1, // Bitmap font generation, no anti-aliasing 915 FONT_SDF = 2 // SDF font generation, requires external shader 916 } 917 918 // Color blending modes (pre-defined) 919 enum BlendMode 920 { 921 BLEND_ALPHA = 0, // Blend textures considering alpha (default) 922 BLEND_ADDITIVE = 1, // Blend textures adding colors 923 BLEND_MULTIPLIED = 2 // Blend textures multiplying colors 924 } 925 926 // Gestures type 927 // NOTE: It could be used as flags to enable only some gestures 928 enum GestureType 929 { 930 GESTURE_NONE = 0, 931 GESTURE_TAP = 1, 932 GESTURE_DOUBLETAP = 2, 933 GESTURE_HOLD = 4, 934 GESTURE_DRAG = 8, 935 GESTURE_SWIPE_RIGHT = 16, 936 GESTURE_SWIPE_LEFT = 32, 937 GESTURE_SWIPE_UP = 64, 938 GESTURE_SWIPE_DOWN = 128, 939 GESTURE_PINCH_IN = 256, 940 GESTURE_PINCH_OUT = 512 941 } 942 943 // Camera system modes 944 enum CameraMode 945 { 946 CAMERA_CUSTOM = 0, 947 CAMERA_FREE = 1, 948 CAMERA_ORBITAL = 2, 949 CAMERA_FIRST_PERSON = 3, 950 CAMERA_THIRD_PERSON = 4 951 } 952 953 // Camera projection modes 954 enum CameraType : int 955 { 956 CAMERA_PERSPECTIVE = 0, 957 CAMERA_ORTHOGRAPHIC = 1 958 } 959 960 // Type of n-patch 961 enum NPatchType 962 { 963 NPT_9PATCH = 0, // Npatch defined by 3x3 tiles 964 NPT_3PATCH_VERTICAL = 1, // Npatch defined by 1x3 tiles 965 NPT_3PATCH_HORIZONTAL = 2 // Npatch defined by 3x1 tiles 966 } 967 968 // Callbacks to be implemented by users 969 alias TraceLogCallback = void function(int logType, const(char)* text, va_list args); 970 971 // Prevents name mangling of functions 972 973 //------------------------------------------------------------------------------------ 974 // Global Variables Definition 975 //------------------------------------------------------------------------------------ 976 // It's lonely here... 977 978 //------------------------------------------------------------------------------------ 979 // Window and Graphics Device Functions (Module: core) 980 //------------------------------------------------------------------------------------ 981 982 // Window-related functions 983 void InitWindow(int width, int height, const(char)* title); // Initialize window and OpenGL context 984 bool WindowShouldClose(); // Check if KEY_ESCAPE pressed or Close icon pressed 985 void CloseWindow(); // Close window and unload OpenGL context 986 bool IsWindowReady(); // Check if window has been initialized successfully 987 bool IsWindowMinimized(); // Check if window has been minimized (or lost focus) 988 bool IsWindowResized(); // Check if window has been resized 989 bool IsWindowHidden(); // Check if window is currently hidden 990 bool IsWindowFullscreen(); // Check if window is currently fullscreen 991 void ToggleFullscreen(); // Toggle fullscreen mode (only PLATFORM_DESKTOP) 992 void UnhideWindow(); // Show the window 993 void HideWindow(); // Hide the window 994 void SetWindowIcon(Image image); // Set icon for window (only PLATFORM_DESKTOP) 995 void SetWindowTitle(const(char)* title); // Set title for window (only PLATFORM_DESKTOP) 996 void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP) 997 void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode) 998 void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) 999 void SetWindowSize(int width, int height); // Set window dimensions 1000 void* GetWindowHandle(); // Get native window handle 1001 int GetScreenWidth(); // Get current screen width 1002 int GetScreenHeight(); // Get current screen height 1003 int GetMonitorCount(); // Get number of connected monitors 1004 int GetMonitorWidth(int monitor); // Get primary monitor width 1005 int GetMonitorHeight(int monitor); // Get primary monitor height 1006 int GetMonitorPhysicalWidth(int monitor); // Get primary monitor physical width in millimetres 1007 int GetMonitorPhysicalHeight(int monitor); // Get primary monitor physical height in millimetres 1008 Vector2 GetWindowPosition(); // Get window position XY on monitor 1009 const(char)* GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the primary monitor 1010 const(char)* GetClipboardText(); // Get clipboard text content 1011 void SetClipboardText(const(char)* text); // Set clipboard text content 1012 1013 // Cursor-related functions 1014 void ShowCursor(); // Shows cursor 1015 void HideCursor(); // Hides cursor 1016 bool IsCursorHidden(); // Check if cursor is not visible 1017 void EnableCursor(); // Enables cursor (unlock cursor) 1018 void DisableCursor(); // Disables cursor (lock cursor) 1019 1020 // Drawing-related functions 1021 void ClearBackground(Color color); // Set background color (framebuffer clear color) 1022 void BeginDrawing(); // Setup canvas (framebuffer) to start drawing 1023 void EndDrawing(); // End canvas drawing and swap buffers (double buffering) 1024 void BeginMode2D(Camera2D camera); // Initialize 2D mode with custom camera (2D) 1025 void EndMode2D(); // Ends 2D mode with custom camera 1026 void BeginMode3D(Camera3D camera); // Initializes 3D mode with custom camera (3D) 1027 void EndMode3D(); // Ends 3D mode and returns to default 2D orthographic mode 1028 void BeginTextureMode(RenderTexture2D target); // Initializes render texture for drawing 1029 void EndTextureMode(); // Ends drawing to render texture 1030 void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing) 1031 void EndScissorMode(); // End scissor mode 1032 1033 // Screen-space-related functions 1034 Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Returns a ray trace from mouse position 1035 Matrix GetCameraMatrix(Camera camera); // Returns camera transform matrix (view matrix) 1036 Matrix GetCameraMatrix2D(Camera2D camera); // Returns camera 2d transform matrix 1037 Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Returns the screen space position for a 3d world space position 1038 Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); // Returns size position for a 3d world space position 1039 Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Returns the screen space position for a 2d camera world space position 1040 Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); // Returns the world space position for a 2d camera screen space position 1041 1042 // Timing-related functions 1043 void SetTargetFPS(int fps); // Set target FPS (maximum) 1044 int GetFPS(); // Returns current FPS 1045 float GetFrameTime(); // Returns time in seconds for last frame drawn 1046 double GetTime(); // Returns elapsed time in seconds since InitWindow () 1047 1048 // Color-related functions 1049 int ColorToInt(Color color); // Returns hexadecimal value for a Color 1050 Vector4 ColorNormalize(Color color); // Returns color normalized as float [0..1] 1051 Color ColorFromNormalized(Vector4 normalized); // Returns color from normalized values [0..1] 1052 Vector3 ColorToHSV(Color color); // Returns HSV values for a Color 1053 Color ColorFromHSV(Vector3 hsv); // Returns a Color from HSV values 1054 Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value 1055 Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f 1056 1057 // Misc. functions 1058 void SetConfigFlags(ubyte flags); // Setup window configuration flags (view FLAGS) 1059 void SetTraceLogLevel(int logType); // Set the current threshold (minimum) log level 1060 void SetTraceLogExit(int logType); // Set the exit threshold (minimum) log level 1061 void SetTraceLogCallback(TraceLogCallback callback); // Set a trace log callback to enable custom logging 1062 void TraceLog(int logType, const(char)* text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR) 1063 void TakeScreenshot(const(char)* fileName); // Takes a screenshot of current screen (saved a .png) 1064 int GetRandomValue(int min, int max); // Returns a random value between min and max (both included) 1065 1066 // Files management functions 1067 ubyte* LoadFileData(const(char)* fileName, uint* bytesRead); // Load file data as byte array (read) 1068 void SaveFileData(const(char)* fileName, void* data, uint bytesToWrite); // Save data to file from byte array (write) 1069 char* LoadFileText(const(char)* fileName); // Load text data from file (read), returns a '\0' terminated string 1070 void SaveFileText(const(char)* fileName, char* text); // Save text data to file (write), string must be '\0' terminated 1071 bool FileExists(const(char)* fileName); // Check if file exists 1072 bool IsFileExtension(const(char)* fileName, const(char)* ext); // Check file extension 1073 bool DirectoryExists(const(char)* dirPath); // Check if a directory path exists 1074 const(char)* GetExtension(const(char)* fileName); // Get pointer to extension for a filename string 1075 const(char)* GetFileName(const(char)* filePath); // Get pointer to filename for a path string 1076 const(char)* GetFileNameWithoutExt(const(char)* filePath); // Get filename string without extension (uses static string) 1077 const(char)* GetDirectoryPath(const(char)* filePath); // Get full path for a given fileName with path (uses static string) 1078 const(char)* GetPrevDirectoryPath(const(char)* dirPath); // Get previous directory path for a given path (uses static string) 1079 const(char)* GetWorkingDirectory(); // Get current working directory (uses static string) 1080 char** GetDirectoryFiles(const(char)* dirPath, int* count); // Get filenames in a directory path (memory should be freed) 1081 void ClearDirectoryFiles(); // Clear directory files paths buffers (free memory) 1082 bool ChangeDirectory(const(char)* dir); // Change working directory, returns true if success 1083 bool IsFileDropped(); // Check if a file has been dropped into window 1084 char** GetDroppedFiles(int* count); // Get dropped files names (memory should be freed) 1085 void ClearDroppedFiles(); // Clear dropped files paths buffer (free memory) 1086 c_long GetFileModTime(const(char)* fileName); // Get file modification time (last write time) 1087 ubyte* CompressData(ubyte* data, int dataLength, int* compDataLength); // Compress data (DEFLATE algorythm) 1088 ubyte* DecompressData(ubyte* compData, int compDataLength, int* dataLength); // Decompress data (DEFLATE algorythm) 1089 1090 // Persistent storage management 1091 void SaveStorageValue(uint position, int value); // Save integer value to storage file (to defined position) 1092 int LoadStorageValue(uint position); // Load integer value from storage file (from defined position) 1093 1094 void OpenURL(const(char)* url); // Open URL with default system browser (if available) 1095 1096 //------------------------------------------------------------------------------------ 1097 // Input Handling Functions (Module: core) 1098 //------------------------------------------------------------------------------------ 1099 1100 // Input-related functions: keyboard 1101 bool IsKeyPressed(int key); // Detect if a key has been pressed once 1102 bool IsKeyDown(int key); // Detect if a key is being pressed 1103 bool IsKeyReleased(int key); // Detect if a key has been released once 1104 bool IsKeyUp(int key); // Detect if a key is NOT being pressed 1105 void SetExitKey(int key); // Set a custom key to exit program (default is ESC) 1106 int GetKeyPressed(); // Get key pressed, call it multiple times for chars queued 1107 1108 // Input-related functions: gamepads 1109 bool IsGamepadAvailable(int gamepad); // Detect if a gamepad is available 1110 bool IsGamepadName(int gamepad, const(char)* name); // Check gamepad name (if available) 1111 const(char)* GetGamepadName(int gamepad); // Return gamepad internal name id 1112 bool IsGamepadButtonPressed(int gamepad, int button); // Detect if a gamepad button has been pressed once 1113 bool IsGamepadButtonDown(int gamepad, int button); // Detect if a gamepad button is being pressed 1114 bool IsGamepadButtonReleased(int gamepad, int button); // Detect if a gamepad button has been released once 1115 bool IsGamepadButtonUp(int gamepad, int button); // Detect if a gamepad button is NOT being pressed 1116 int GetGamepadButtonPressed(); // Get the last gamepad button pressed 1117 int GetGamepadAxisCount(int gamepad); // Return gamepad axis count for a gamepad 1118 float GetGamepadAxisMovement(int gamepad, int axis); // Return axis movement value for a gamepad axis 1119 1120 // Input-related functions: mouse 1121 bool IsMouseButtonPressed(int button); // Detect if a mouse button has been pressed once 1122 bool IsMouseButtonDown(int button); // Detect if a mouse button is being pressed 1123 bool IsMouseButtonReleased(int button); // Detect if a mouse button has been released once 1124 bool IsMouseButtonUp(int button); // Detect if a mouse button is NOT being pressed 1125 int GetMouseX(); // Returns mouse position X 1126 int GetMouseY(); // Returns mouse position Y 1127 Vector2 GetMousePosition(); // Returns mouse position XY 1128 void SetMousePosition(int x, int y); // Set mouse position XY 1129 void SetMouseOffset(int offsetX, int offsetY); // Set mouse offset 1130 void SetMouseScale(float scaleX, float scaleY); // Set mouse scaling 1131 int GetMouseWheelMove(); // Returns mouse wheel movement Y 1132 1133 // Input-related functions: touch 1134 int GetTouchX(); // Returns touch position X for touch point 0 (relative to screen size) 1135 int GetTouchY(); // Returns touch position Y for touch point 0 (relative to screen size) 1136 Vector2 GetTouchPosition(int index); // Returns touch position XY for a touch point index (relative to screen size) 1137 1138 //------------------------------------------------------------------------------------ 1139 // Gestures and Touch Handling Functions (Module: gestures) 1140 //------------------------------------------------------------------------------------ 1141 void SetGesturesEnabled(uint gestureFlags); // Enable a set of gestures using flags 1142 bool IsGestureDetected(int gesture); // Check if a gesture have been detected 1143 int GetGestureDetected(); // Get latest detected gesture 1144 int GetTouchPointsCount(); // Get touch points count 1145 float GetGestureHoldDuration(); // Get gesture hold time in milliseconds 1146 Vector2 GetGestureDragVector(); // Get gesture drag vector 1147 float GetGestureDragAngle(); // Get gesture drag angle 1148 Vector2 GetGesturePinchVector(); // Get gesture pinch delta 1149 float GetGesturePinchAngle(); // Get gesture pinch angle 1150 1151 //------------------------------------------------------------------------------------ 1152 // Camera System Functions (Module: camera) 1153 //------------------------------------------------------------------------------------ 1154 void SetCameraMode(Camera camera, int mode); // Set camera mode (multiple camera modes available) 1155 void UpdateCamera(Camera* camera); // Update camera position for selected mode 1156 1157 void SetCameraPanControl(int panKey); // Set camera pan key to combine with mouse movement (free camera) 1158 void SetCameraAltControl(int altKey); // Set camera alt key to combine with mouse movement (free camera) 1159 void SetCameraSmoothZoomControl(int szKey); // Set camera smooth zoom key to combine with mouse (free camera) 1160 void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey, 1161 int upKey, int downKey); // Set camera move controls (1st person and 3rd person cameras) 1162 1163 //------------------------------------------------------------------------------------ 1164 // Basic Shapes Drawing Functions (Module: shapes) 1165 //------------------------------------------------------------------------------------ 1166 1167 // Basic shapes drawing functions 1168 void DrawPixel(int posX, int posY, Color color); // Draw a pixel 1169 void DrawPixelV(Vector2 position, Color color); // Draw a pixel (Vector version) 1170 void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line 1171 void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (Vector version) 1172 void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line defining thickness 1173 void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line using cubic-bezier curves in-out 1174 void DrawLineStrip(Vector2* points, int numPoints, Color color); // Draw lines sequence 1175 void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle 1176 void DrawCircleSector(Vector2 center, float radius, int startAngle, int endAngle, 1177 int segments, Color color); // Draw a piece of a circle 1178 void DrawCircleSectorLines(Vector2 center, float radius, int startAngle, 1179 int endAngle, int segments, Color color); // Draw circle sector outline 1180 void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); // Draw a gradient-filled circle 1181 void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version) 1182 void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline 1183 void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse 1184 void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline 1185 void DrawRing(Vector2 center, float innerRadius, float outerRadius, int startAngle, 1186 int endAngle, int segments, Color color); // Draw ring 1187 void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, 1188 int startAngle, int endAngle, int segments, Color color); // Draw ring outline 1189 void DrawRectangle(int posX, int posY, int width, int height, Color color); // Draw a color-filled rectangle 1190 void DrawRectangleV(Vector2 position, Vector2 size, Color color); // Draw a color-filled rectangle (Vector version) 1191 void DrawRectangleRec(Rectangle rec, Color color); // Draw a color-filled rectangle 1192 void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); // Draw a color-filled rectangle with pro parameters 1193 void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); // Draw a vertical-gradient-filled rectangle 1194 void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2); // Draw a horizontal-gradient-filled rectangle 1195 void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // Draw a gradient-filled rectangle with custom vertex colors 1196 void DrawRectangleLines(int posX, int posY, int width, int height, Color color); // Draw rectangle outline 1197 void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color); // Draw rectangle outline with extended parameters 1198 void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle with rounded edges 1199 void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, 1200 int lineThick, Color color); // Draw rectangle with rounded edges outline 1201 void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) 1202 void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline (vertex in counter-clockwise order!) 1203 void DrawTriangleFan(Vector2* points, int numPoints, Color color); // Draw a triangle fan defined by points (first vertex is the center) 1204 void DrawTriangleStrip(Vector2* points, int pointsCount, Color color); // Draw a triangle strip defined by points 1205 void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a regular polygon (Vector version) 1206 void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides 1207 1208 // Basic shapes collision detection functions 1209 bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles 1210 bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles 1211 bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle 1212 Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision 1213 bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle 1214 bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); // Check if point is inside circle 1215 bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); // Check if point is inside a triangle 1216 1217 //------------------------------------------------------------------------------------ 1218 // Texture Loading and Drawing Functions (Module: textures) 1219 //------------------------------------------------------------------------------------ 1220 1221 // Image loading functions 1222 // NOTE: This functions do not require GPU access 1223 Image LoadImage(const(char)* fileName); // Load image from file into CPU memory (RAM) 1224 Image LoadImageEx(Color* pixels, int width, int height); // Load image from Color array data (RGBA - 32bit) 1225 Image LoadImagePro(void* data, int width, int height, int format); // Load image from raw data with parameters 1226 Image LoadImageRaw(const(char)* fileName, int width, int height, int format, int headerSize); // Load image from RAW file data 1227 void UnloadImage(Image image); // Unload image from CPU memory (RAM) 1228 void ExportImage(Image image, const(char)* fileName); // Export image data to file 1229 void ExportImageAsCode(Image image, const(char)* fileName); // Export image as code file defining an array of bytes 1230 Color* GetImageData(Image image); // Get pixel data from image as a Color struct array 1231 Vector4* GetImageDataNormalized(Image image); // Get pixel data from image as Vector4 array (float normalized) 1232 1233 // Image generation functions 1234 Image GenImageColor(int width, int height, Color color); // Generate image: plain color 1235 Image GenImageGradientV(int width, int height, Color top, Color bottom); // Generate image: vertical gradient 1236 Image GenImageGradientH(int width, int height, Color left, Color right); // Generate image: horizontal gradient 1237 Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient 1238 Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked 1239 Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise 1240 Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise 1241 Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm. Bigger tileSize means bigger cells 1242 1243 // Image manipulation functions 1244 Image ImageCopy(Image image); // Create an image duplicate (useful for transformations) 1245 Image ImageFromImage(Image image, Rectangle rec); // Create an image from another image piece 1246 Image ImageText(const(char)* text, int fontSize, Color color); // Create an image from text (default font) 1247 Image ImageTextEx(Font font, const(char)* text, float fontSize, float spacing, Color tint); // Create an image from text (custom sprite font) 1248 void ImageToPOT(Image* image, Color fillColor); // Convert image to POT (power-of-two) 1249 void ImageFormat(Image* image, int newFormat); // Convert image data to desired format 1250 void ImageAlphaMask(Image* image, Image alphaMask); // Apply alpha mask to image 1251 void ImageAlphaClear(Image* image, Color color, float threshold); // Clear alpha channel to desired color 1252 void ImageAlphaCrop(Image* image, float threshold); // Crop image depending on alpha value 1253 void ImageAlphaPremultiply(Image* image); // Premultiply alpha channel 1254 void ImageCrop(Image* image, Rectangle crop); // Crop an image to a defined rectangle 1255 void ImageResize(Image* image, int newWidth, int newHeight); // Resize image (Bicubic scaling algorithm) 1256 void ImageResizeNN(Image* image, int newWidth, int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) 1257 void ImageResizeCanvas(Image* image, int newWidth, int newHeight, int offsetX, 1258 int offsetY, Color color); // Resize canvas and fill with color 1259 void ImageMipmaps(Image* image); // Generate all mipmap levels for a provided image 1260 void ImageDither(Image* image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) 1261 void ImageFlipVertical(Image* image); // Flip image vertically 1262 void ImageFlipHorizontal(Image* image); // Flip image horizontally 1263 void ImageRotateCW(Image* image); // Rotate image clockwise 90deg 1264 void ImageRotateCCW(Image* image); // Rotate image counter-clockwise 90deg 1265 void ImageColorTint(Image* image, Color color); // Modify image color: tint 1266 void ImageColorInvert(Image* image); // Modify image color: invert 1267 void ImageColorGrayscale(Image* image); // Modify image color: grayscale 1268 void ImageColorContrast(Image* image, float contrast); // Modify image color: contrast (-100 to 100) 1269 void ImageColorBrightness(Image* image, int brightness); // Modify image color: brightness (-255 to 255) 1270 void ImageColorReplace(Image* image, Color color, Color replace); // Modify image color: replace color 1271 Color* ImageExtractPalette(Image image, int maxPaletteSize, int* extractCount); // Extract color palette from image to maximum size (memory should be freed) 1272 Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle 1273 1274 // Image drawing functions 1275 // NOTE: Image software-rendering functions (CPU) 1276 void ImageClearBackground(Image* dst, Color color); // Clear image background with given color 1277 void ImageDrawPixel(Image* dst, int posX, int posY, Color color); // Draw pixel within an image 1278 void ImageDrawPixelV(Image* dst, Vector2 position, Color color); // Draw pixel within an image (Vector version) 1279 void ImageDrawLine(Image* dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw line within an image 1280 void ImageDrawLineV(Image* dst, Vector2 start, Vector2 end, Color color); // Draw line within an image (Vector version) 1281 void ImageDrawCircle(Image* dst, int centerX, int centerY, int radius, Color color); // Draw circle within an image 1282 void ImageDrawCircleV(Image* dst, Vector2 center, int radius, Color color); // Draw circle within an image (Vector version) 1283 void ImageDrawRectangle(Image* dst, int posX, int posY, int width, int height, Color color); // Draw rectangle within an image 1284 void ImageDrawRectangleV(Image* dst, Vector2 position, Vector2 size, Color color); // Draw rectangle within an image (Vector version) 1285 void ImageDrawRectangleRec(Image* dst, Rectangle rec, Color color); // Draw rectangle within an image 1286 void ImageDrawRectangleLines(Image* dst, Rectangle rec, int thick, Color color); // Draw rectangle lines within an image 1287 void ImageDraw(Image* dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); // Draw a source image within a destination image (tint applied to source) 1288 void ImageDrawText(Image* dst, Vector2 position, const(char)* text, int fontSize, Color color); // Draw text (default font) within an image (destination) 1289 void ImageDrawTextEx(Image* dst, Vector2 position, Font font, const(char)* text, 1290 float fontSize, float spacing, Color color); // Draw text (custom sprite font) within an image (destination) 1291 1292 // Texture loading functions 1293 // NOTE: These functions require GPU access 1294 Texture2D LoadTexture(const(char)* fileName); // Load texture from file into GPU memory (VRAM) 1295 Texture2D LoadTextureFromImage(Image image); // Load texture from image data 1296 TextureCubemap LoadTextureCubemap(Image image, int layoutType); // Load cubemap from image, multiple image cubemap layouts supported 1297 RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer) 1298 void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM) 1299 void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM) 1300 void UpdateTexture(Texture2D texture, const(void)* pixels); // Update GPU texture with new data 1301 Image GetTextureData(Texture2D texture); // Get pixel data from GPU texture and return an Image 1302 Image GetScreenData(); // Get pixel data from screen buffer and return an Image (screenshot) 1303 1304 // Texture2D configuration functions 1305 void GenTextureMipmaps(Texture2D* texture); // Generate GPU mipmaps for a texture 1306 void SetTextureFilter(Texture2D texture, int filterMode); // Set texture scaling filter mode 1307 void SetTextureWrap(Texture2D texture, int wrapMode); // Set texture wrapping mode 1308 1309 // Texture2D drawing functions 1310 void DrawTexture(Texture2D texture, int posX, int posY, Color tint); // Draw a Texture2D 1311 void DrawTextureV(Texture2D texture, Vector2 position, Color tint); // Draw a Texture2D with position defined as Vector2 1312 void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters 1313 void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle 1314 void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, Rectangle quad, Color tint); // Draw texture quad with tiling and offset parameters 1315 void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, 1316 Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters 1317 void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, 1318 Rectangle destRec, Vector2 origin, float rotation, Color tint); // Draws a texture (or part of it) that stretches or shrinks nicely 1319 1320 // Image/Texture misc functions 1321 int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes (image or texture) 1322 1323 //------------------------------------------------------------------------------------ 1324 // Font Loading and Text Drawing Functions (Module: text) 1325 //------------------------------------------------------------------------------------ 1326 1327 // Font loading/unloading functions 1328 Font GetFontDefault(); // Get the default Font 1329 Font LoadFont(const(char)* fileName); // Load font from file into GPU memory (VRAM) 1330 Font LoadFontEx(const(char)* fileName, int fontSize, int* fontChars, int charsCount); // Load font from file with extended parameters 1331 Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style) 1332 CharInfo* LoadFontData(const(char)* fileName, int fontSize, int* fontChars, 1333 int charsCount, int type); // Load font data for further use 1334 Image GenImageFontAtlas(const(CharInfo)* chars, Rectangle** recs, 1335 int charsCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info 1336 void UnloadFont(Font font); // Unload Font from GPU memory (VRAM) 1337 1338 // Text drawing functions 1339 void DrawFPS(int posX, int posY); // Shows current FPS 1340 void DrawText(const(char)* text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) 1341 void DrawTextEx(Font font, const(char)* text, Vector2 position, float fontSize, 1342 float spacing, Color tint); // Draw text using font and additional parameters 1343 void DrawTextRec(Font font, const(char)* text, Rectangle rec, float fontSize, 1344 float spacing, bool wordWrap, Color tint); // Draw text using font inside rectangle limits 1345 void DrawTextRecEx(Font font, const(char)* text, Rectangle rec, float fontSize, 1346 float spacing, bool wordWrap, Color tint, int selectStart, 1347 int selectLength, Color selectTint, Color selectBackTint); // Draw text using font inside rectangle limits with support for text selection 1348 void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float scale, Color tint); // Draw one character (codepoint) 1349 1350 // Text misc. functions 1351 int MeasureText(const(char)* text, int fontSize); // Measure string width for default font 1352 Vector2 MeasureTextEx(Font font, const(char)* text, float fontSize, float spacing); // Measure string size for Font 1353 int GetGlyphIndex(Font font, int codepoint); // Get index position for a unicode character on font 1354 1355 // Text strings management functions (no utf8 strings, only byte chars) 1356 // NOTE: Some strings allocate memory internally for returned strings, just be careful! 1357 int TextCopy(char* dst, const(char)* src); // Copy one string to another, returns bytes copied 1358 bool TextIsEqual(const(char)* text1, const(char)* text2); // Check if two text string are equal 1359 uint TextLength(const(char)* text); // Get text length, checks for '\0' ending 1360 const(char)* TextFormat(const(char)* text, ...); // Text formatting with variables (sprintf style) 1361 const(char)* TextSubtext(const(char)* text, int position, int length); // Get a piece of a text string 1362 char* TextReplace(char* text, const(char)* replace, const(char)* by); // Replace text string (memory must be freed!) 1363 char* TextInsert(const(char)* text, const(char)* insert, int position); // Insert text in a position (memory must be freed!) 1364 const(char)* TextJoin(const(char)** textList, int count, const(char)* delimiter); // Join text strings with delimiter 1365 const(char)** TextSplit(const(char)* text, char delimiter, int* count); // Split text into multiple strings 1366 void TextAppend(char* text, const(char)* append, int* position); // Append text at specific position and move cursor! 1367 int TextFindIndex(const(char)* text, const(char)* find); // Find first text occurrence within a string 1368 const(char)* TextToUpper(const(char)* text); // Get upper case version of provided string 1369 const(char)* TextToLower(const(char)* text); // Get lower case version of provided string 1370 const(char)* TextToPascal(const(char)* text); // Get Pascal case notation version of provided string 1371 int TextToInteger(const(char)* text); // Get integer value from text (negative values not supported) 1372 char* TextToUtf8(int* codepoints, int length); // Encode text codepoint into utf8 text (memory must be freed!) 1373 1374 // UTF8 text strings management functions 1375 int* GetCodepoints(const(char)* text, int* count); // Get all codepoints in a string, codepoints count returned by parameters 1376 int GetCodepointsCount(const(char)* text); // Get total number of characters (codepoints) in a UTF8 encoded string 1377 int GetNextCodepoint(const(char)* text, int* bytesProcessed); // Returns next codepoint in a UTF8 encoded string; 0x3f ('?') is returned on failure 1378 const(char)* CodepointToUtf8(int codepoint, int* byteLength); // Encode codepoint into utf8 text (char array length returned as parameter) 1379 1380 //------------------------------------------------------------------------------------ 1381 // Basic 3d Shapes Drawing Functions (Module: models) 1382 //------------------------------------------------------------------------------------ 1383 1384 // Basic geometric 3D shapes drawing functions 1385 void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space 1386 void DrawPoint3D(Vector3 position, Color color); // Draw a point in 3D space, actually a small line 1387 void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, 1388 float rotationAngle, Color color); // Draw a circle in 3D world space 1389 void DrawCube(Vector3 position, float width, float height, float length, Color color); // Draw cube 1390 void DrawCubeV(Vector3 position, Vector3 size, Color color); // Draw cube (Vector version) 1391 void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); // Draw cube wires 1392 void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); // Draw cube wires (Vector version) 1393 void DrawCubeTexture(Texture2D texture, Vector3 position, float width, 1394 float height, float length, Color color); // Draw cube textured 1395 void DrawSphere(Vector3 centerPos, float radius, Color color); // Draw sphere 1396 void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere with extended parameters 1397 void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere wires 1398 void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, 1399 float height, int slices, Color color); // Draw a cylinder/cone 1400 void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, 1401 float height, int slices, Color color); // Draw a cylinder/cone wires 1402 void DrawPlane(Vector3 centerPos, Vector2 size, Color color); // Draw a plane XZ 1403 void DrawRay(Ray ray, Color color); // Draw a ray line 1404 void DrawGrid(int slices, float spacing); // Draw a grid (centered at (0, 0, 0)) 1405 void DrawGizmo(Vector3 position); // Draw simple gizmo 1406 //DrawTorus (), DrawTeapot () could be useful? 1407 1408 //------------------------------------------------------------------------------------ 1409 // Model 3d Loading and Drawing Functions (Module: models) 1410 //------------------------------------------------------------------------------------ 1411 1412 // Model loading/unloading functions 1413 Model LoadModel(const(char)* fileName); // Load model from files (meshes and materials) 1414 Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material) 1415 void UnloadModel(Model model); // Unload model from memory (RAM and/or VRAM) 1416 1417 // Mesh loading/unloading functions 1418 Mesh* LoadMeshes(const(char)* fileName, int* meshCount); // Load meshes from model file 1419 void ExportMesh(Mesh mesh, const(char)* fileName); // Export mesh data to file 1420 void UnloadMesh(Mesh* mesh); // Unload mesh from memory (RAM and/or VRAM) 1421 1422 // Material loading/unloading functions 1423 Material* LoadMaterials(const(char)* fileName, int* materialCount); // Load materials from model file 1424 Material LoadMaterialDefault(); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) 1425 void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) 1426 void SetMaterialTexture(Material* material, int mapType, Texture2D texture); // Set texture for a material map type (MAP_DIFFUSE, MAP_SPECULAR...) 1427 void SetModelMeshMaterial(Model* model, int meshId, int materialId); // Set material for a mesh 1428 1429 // Model animations loading/unloading functions 1430 ModelAnimation* LoadModelAnimations(const(char)* fileName, int* animsCount); // Load model animations from file 1431 void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose 1432 void UnloadModelAnimation(ModelAnimation anim); // Unload animation data 1433 bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match 1434 1435 // Mesh generation functions 1436 Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh 1437 Mesh GenMeshPlane(float width, float length, int resX, int resZ); // Generate plane mesh (with subdivisions) 1438 Mesh GenMeshCube(float width, float height, float length); // Generate cuboid mesh 1439 Mesh GenMeshSphere(float radius, int rings, int slices); // Generate sphere mesh (standard sphere) 1440 Mesh GenMeshHemiSphere(float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap) 1441 Mesh GenMeshCylinder(float radius, float height, int slices); // Generate cylinder mesh 1442 Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); // Generate torus mesh 1443 Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh 1444 Mesh GenMeshHeightmap(Image heightmap, Vector3 size); // Generate heightmap mesh from image data 1445 Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); // Generate cubes-based map mesh from image data 1446 1447 // Mesh manipulation functions 1448 BoundingBox MeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits 1449 void MeshTangents(Mesh* mesh); // Compute mesh tangents 1450 void MeshBinormals(Mesh* mesh); // Compute mesh binormals 1451 1452 // Model drawing functions 1453 void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set) 1454 void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, 1455 float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters 1456 void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set) 1457 void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, 1458 float rotationAngle, Vector3 scale, Color tint); // Draw a model wires (with texture if set) with extended parameters 1459 void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires) 1460 void DrawBillboard(Camera camera, Texture2D texture, Vector3 center, float size, Color tint); // Draw a billboard texture 1461 void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle sourceRec, 1462 Vector3 center, float size, Color tint); // Draw a billboard texture defined by sourceRec 1463 1464 // Collision detection functions 1465 bool CheckCollisionSpheres(Vector3 centerA, float radiusA, Vector3 centerB, float radiusB); // Detect collision between two spheres 1466 bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Detect collision between two bounding boxes 1467 bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); // Detect collision between box and sphere 1468 bool CheckCollisionRaySphere(Ray ray, Vector3 center, float radius); // Detect collision between ray and sphere 1469 bool CheckCollisionRaySphereEx(Ray ray, Vector3 center, float radius, Vector3* collisionPoint); // Detect collision between ray and sphere, returns collision point 1470 bool CheckCollisionRayBox(Ray ray, BoundingBox box); // Detect collision between ray and box 1471 RayHitInfo GetCollisionRayModel(Ray ray, Model model); // Get collision info between ray and model 1472 RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle 1473 RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight); // Get collision info between ray and ground plane (Y-normal plane) 1474 1475 //------------------------------------------------------------------------------------ 1476 // Shaders System Functions (Module: rlgl) 1477 // NOTE: This functions are useless when using OpenGL 1.1 1478 //------------------------------------------------------------------------------------ 1479 1480 // Shader loading/unloading functions 1481 Shader LoadShader(const(char)* vsFileName, const(char)* fsFileName); // Load shader from files and bind default locations 1482 Shader LoadShaderCode(const(char)* vsCode, const(char)* fsCode); // Load shader from code strings and bind default locations 1483 void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM) 1484 1485 Shader GetShaderDefault(); // Get default shader 1486 Texture2D GetTextureDefault(); // Get default texture 1487 Texture2D GetShapesTexture(); // Get texture to draw shapes 1488 Rectangle GetShapesTextureRec(); // Get texture rectangle to draw shapes 1489 void SetShapesTexture(Texture2D texture, Rectangle source); // Define default texture used to draw shapes 1490 1491 // Shader configuration functions 1492 int GetShaderLocation(Shader shader, const(char)* uniformName); // Get shader uniform location 1493 void SetShaderValue(Shader shader, int uniformLoc, const(void)* value, int uniformType); // Set shader uniform value 1494 void SetShaderValueV(Shader shader, int uniformLoc, const(void)* value, int uniformType, int count); // Set shader uniform value vector 1495 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4) 1496 void SetShaderValueTexture(Shader shader, int uniformLoc, Texture2D texture); // Set shader uniform value for texture 1497 void SetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix) 1498 void SetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix) 1499 Matrix GetMatrixModelview(); // Get internal modelview matrix 1500 Matrix GetMatrixProjection(); // Get internal projection matrix 1501 1502 // Texture maps generation (PBR) 1503 // NOTE: Required shaders should be provided 1504 Texture2D GenTextureCubemap(Shader shader, Texture2D map, int size); // Generate cubemap texture from 2D texture 1505 Texture2D GenTextureIrradiance(Shader shader, Texture2D cubemap, int size); // Generate irradiance texture using cubemap data 1506 Texture2D GenTexturePrefilter(Shader shader, Texture2D cubemap, int size); // Generate prefilter texture using cubemap data 1507 Texture2D GenTextureBRDF(Shader shader, int size); // Generate BRDF texture 1508 1509 // Shading begin/end functions 1510 void BeginShaderMode(Shader shader); // Begin custom shader drawing 1511 void EndShaderMode(); // End custom shader drawing (use default shader) 1512 void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied) 1513 void EndBlendMode(); // End blending mode (reset to default: alpha blending) 1514 1515 // VR control functions 1516 void InitVrSimulator(); // Init VR simulator for selected device parameters 1517 void CloseVrSimulator(); // Close VR simulator for current device 1518 void UpdateVrTracking(Camera* camera); // Update VR tracking (position and orientation) and camera 1519 void SetVrConfiguration(VrDeviceInfo info, Shader distortion); // Set stereo rendering configuration parameters 1520 bool IsVrSimulatorReady(); // Detect if VR simulator is ready 1521 void ToggleVrMode(); // Enable/Disable VR experience 1522 void BeginVrDrawing(); // Begin VR simulator stereo rendering 1523 void EndVrDrawing(); // End VR simulator stereo rendering 1524 1525 //------------------------------------------------------------------------------------ 1526 // Audio Loading and Playing Functions (Module: audio) 1527 //------------------------------------------------------------------------------------ 1528 1529 // Audio device management functions 1530 void InitAudioDevice(); // Initialize audio device and context 1531 void CloseAudioDevice(); // Close the audio device and context 1532 bool IsAudioDeviceReady(); // Check if audio device has been initialized successfully 1533 void SetMasterVolume(float volume); // Set master volume (listener) 1534 1535 // Wave/Sound loading/unloading functions 1536 Wave LoadWave(const(char)* fileName); // Load wave data from file 1537 Sound LoadSound(const(char)* fileName); // Load sound from file 1538 Sound LoadSoundFromWave(Wave wave); // Load sound from wave data 1539 void UpdateSound(Sound sound, const(void)* data, int samplesCount); // Update sound buffer with new data 1540 void UnloadWave(Wave wave); // Unload wave data 1541 void UnloadSound(Sound sound); // Unload sound 1542 void ExportWave(Wave wave, const(char)* fileName); // Export wave data to file 1543 void ExportWaveAsCode(Wave wave, const(char)* fileName); // Export wave sample data to code (.h) 1544 1545 // Wave/Sound management functions 1546 void PlaySound(Sound sound); // Play a sound 1547 void StopSound(Sound sound); // Stop playing a sound 1548 void PauseSound(Sound sound); // Pause a sound 1549 void ResumeSound(Sound sound); // Resume a paused sound 1550 void PlaySoundMulti(Sound sound); // Play a sound (using multichannel buffer pool) 1551 void StopSoundMulti(); // Stop any sound playing (using multichannel buffer pool) 1552 int GetSoundsPlaying(); // Get number of sounds playing in the multichannel 1553 bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing 1554 void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level) 1555 void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level) 1556 void WaveFormat(Wave* wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format 1557 Wave WaveCopy(Wave wave); // Copy a wave to a new wave 1558 void WaveCrop(Wave* wave, int initSample, int finalSample); // Crop a wave to defined samples range 1559 float* GetWaveData(Wave wave); // Get samples data from wave as a floats array 1560 1561 // Music management functions 1562 Music LoadMusicStream(const(char)* fileName); // Load music stream from file 1563 void UnloadMusicStream(Music music); // Unload music stream 1564 void PlayMusicStream(Music music); // Start music playing 1565 void UpdateMusicStream(Music music); // Updates buffers for music streaming 1566 void StopMusicStream(Music music); // Stop music playing 1567 void PauseMusicStream(Music music); // Pause music playing 1568 void ResumeMusicStream(Music music); // Resume playing paused music 1569 bool IsMusicPlaying(Music music); // Check if music is playing 1570 void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level) 1571 void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level) 1572 void SetMusicLoopCount(Music music, int count); // Set music loop count (loop repeats) 1573 float GetMusicTimeLength(Music music); // Get music time length (in seconds) 1574 float GetMusicTimePlayed(Music music); // Get current music time played (in seconds) 1575 1576 // AudioStream management functions 1577 AudioStream InitAudioStream(uint sampleRate, uint sampleSize, uint channels); // Init audio stream (to stream raw audio pcm data) 1578 void UpdateAudioStream(AudioStream stream, const(void)* data, int samplesCount); // Update audio stream buffers with data 1579 void CloseAudioStream(AudioStream stream); // Close audio stream and free memory 1580 bool IsAudioStreamProcessed(AudioStream stream); // Check if any audio stream buffers requires refill 1581 void PlayAudioStream(AudioStream stream); // Play audio stream 1582 void PauseAudioStream(AudioStream stream); // Pause audio stream 1583 void ResumeAudioStream(AudioStream stream); // Resume audio stream 1584 bool IsAudioStreamPlaying(AudioStream stream); // Check if audio stream is playing 1585 void StopAudioStream(AudioStream stream); // Stop audio stream 1586 void SetAudioStreamVolume(AudioStream stream, float volume); // Set volume for audio stream (1.0 is max level) 1587 void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level) 1588 void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams 1589 1590 //------------------------------------------------------------------------------------ 1591 // Network (Module: network) 1592 //------------------------------------------------------------------------------------ 1593 1594 // IN PROGRESS: Check rnet.h for reference 1595 1596 // RAYLIB_H