-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathraylib.diff
13330 lines (13330 loc) · 675 KB
/
raylib.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
diff --git a/src/raylib.h b/src/raylib.h
index 1604ecc1..971972e8 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1,1548 +1,1548 @@
-/**********************************************************************************************
-*
-* raylib v4.1-dev - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com)
-*
-* FEATURES:
-* - NO external dependencies, all required libraries included with raylib
-* - Multiplatform: Windows, Linux, FreeBSD, OpenBSD, NetBSD, DragonFly,
-* MacOS, Haiku, Android, Raspberry Pi, DRM native, HTML5.
-* - Written in plain C code (C99) in PascalCase/camelCase notation
-* - Hardware accelerated with OpenGL (1.1, 2.1, 3.3, 4.3 or ES2 - choose at compile)
-* - Unique OpenGL abstraction layer (usable as standalone module): [rlgl]
-* - Multiple Fonts formats supported (TTF, XNA fonts, AngelCode fonts)
-* - Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC)
-* - Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more!
-* - Flexible Materials system, supporting classic maps and PBR maps
-* - Animated 3D models supported (skeletal bones animation) (IQM)
-* - Shaders support, including Model shaders and Postprocessing shaders
-* - Powerful math module for Vector, Matrix and Quaternion operations: [raymath]
-* - Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD)
-* - VR stereo rendering with configurable HMD device parameters
-* - Bindings to multiple programming languages available!
-*
-* NOTES:
-* - One default Font is loaded on InitWindow()->LoadFontDefault() [core, text]
-* - One default Texture2D is loaded on rlglInit(), 1x1 white pixel R8G8B8A8 [rlgl] (OpenGL 3.3 or ES2)
-* - One default Shader is loaded on rlglInit()->rlLoadShaderDefault() [rlgl] (OpenGL 3.3 or ES2)
-* - One default RenderBatch is loaded on rlglInit()->rlLoadRenderBatch() [rlgl] (OpenGL 3.3 or ES2)
-*
-* DEPENDENCIES (included):
-* [rcore] rglfw (Camilla Löwy - github.com/glfw/glfw) for window/context management and input (PLATFORM_DESKTOP)
-* [rlgl] glad (David Herberth - github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading (PLATFORM_DESKTOP)
-* [raudio] miniaudio (David Reid - github.com/mackron/miniaudio) for audio device/context management
-*
-* OPTIONAL DEPENDENCIES (included):
-* [rcore] msf_gif (Miles Fogle) for GIF recording
-* [rcore] sinfl (Micha Mettke) for DEFLATE decompression algorythm
-* [rcore] sdefl (Micha Mettke) for DEFLATE compression algorythm
-* [rtextures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...)
-* [rtextures] stb_image_write (Sean Barret) for image writing (BMP, TGA, PNG, JPG)
-* [rtextures] stb_image_resize (Sean Barret) for image resizing algorithms
-* [rtext] stb_truetype (Sean Barret) for ttf fonts loading
-* [rtext] stb_rect_pack (Sean Barret) for rectangles packing
-* [rmodels] par_shapes (Philip Rideout) for parametric 3d shapes generation
-* [rmodels] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL)
-* [rmodels] cgltf (Johannes Kuhlmann) for models loading (glTF)
-* [raudio] dr_wav (David Reid) for WAV audio file loading
-* [raudio] dr_flac (David Reid) for FLAC audio file loading
-* [raudio] dr_mp3 (David Reid) for MP3 audio file loading
-* [raudio] stb_vorbis (Sean Barret) for OGG audio loading
-* [raudio] jar_xm (Joshua Reisenauer) for XM audio module loading
-* [raudio] jar_mod (Joshua Reisenauer) for MOD audio module loading
-*
-*
-* LICENSE: zlib/libpng
-*
-* raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified,
-* BSD-like license that allows static linking with closed source software:
-*
-* Copyright (c) 2013-2022 Ramon Santamaria (@raysan5)
-*
-* This software is provided "as-is", without any express or implied warranty. In no event
-* will the authors be held liable for any damages arising from the use of this software.
-*
-* Permission is granted to anyone to use this software for any purpose, including commercial
-* applications, and to alter it and redistribute it freely, subject to the following restrictions:
-*
-* 1. The origin of this software must not be misrepresented; you must not claim that you
-* wrote the original software. If you use this software in a product, an acknowledgment
-* in the product documentation would be appreciated but is not required.
-*
-* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
-* as being the original software.
-*
-* 3. This notice may not be removed or altered from any source distribution.
-*
-**********************************************************************************************/
-
-#ifndef RAYLIB_H
-#define RAYLIB_H
-
-#include <stdarg.h> // Required for: va_list - Only used by TraceLogCallback
-
-#define RAYLIB_VERSION "4.1-dev"
-
-// Function specifiers in case library is build/used as a shared library (Windows)
-// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
-#if defined(_WIN32)
- #if defined(BUILD_LIBTYPE_SHARED)
- #define RLAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll)
- #elif defined(USE_LIBTYPE_SHARED)
- #define RLAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll)
- #endif
-#endif
-
-#ifndef RLAPI
- #define RLAPI // Functions defined as 'extern' by default (implicit specifiers)
-#endif
-
-//----------------------------------------------------------------------------------
-// Some basic Defines
-//----------------------------------------------------------------------------------
-#ifndef PI
- #define PI 3.14159265358979323846f
-#endif
-#ifndef DEG2RAD
- #define DEG2RAD (PI/180.0f)
-#endif
-#ifndef RAD2DEG
- #define RAD2DEG (180.0f/PI)
-#endif
-
-// Allow custom memory allocators
-#ifndef RL_MALLOC
- #define RL_MALLOC(sz) malloc(sz)
-#endif
-#ifndef RL_CALLOC
- #define RL_CALLOC(n,sz) calloc(n,sz)
-#endif
-#ifndef RL_REALLOC
- #define RL_REALLOC(ptr,sz) realloc(ptr,sz)
-#endif
-#ifndef RL_FREE
- #define RL_FREE(ptr) free(ptr)
-#endif
-
-// NOTE: MSVC C++ compiler does not support compound literals (C99 feature)
-// Plain structures in C++ (without constructors) can be initialized with { }
-#if defined(__cplusplus)
- #define CLITERAL(type) type
-#else
- #define CLITERAL(type) (type)
-#endif
-
-// NOTE: We set some defines with some data types declared by raylib
-// Other modules (raymath, rlgl) also require some of those types, so,
-// to be able to use those other modules as standalone (not depending on raylib)
-// this defines are very useful for internal check and avoid type (re)definitions
-#define RL_COLOR_TYPE
-#define RL_RECTANGLE_TYPE
-#define RL_VECTOR2_TYPE
-#define RL_VECTOR3_TYPE
-#define RL_VECTOR4_TYPE
-#define RL_QUATERNION_TYPE
-#define RL_MATRIX_TYPE
-
-// Some Basic Colors
-// NOTE: Custom raylib color palette for amazing visuals on WHITE background
-#define LIGHTGRAY CLITERAL(Color){ 200, 200, 200, 255 } // Light Gray
-#define GRAY CLITERAL(Color){ 130, 130, 130, 255 } // Gray
-#define DARKGRAY CLITERAL(Color){ 80, 80, 80, 255 } // Dark Gray
-#define YELLOW CLITERAL(Color){ 253, 249, 0, 255 } // Yellow
-#define GOLD CLITERAL(Color){ 255, 203, 0, 255 } // Gold
-#define ORANGE CLITERAL(Color){ 255, 161, 0, 255 } // Orange
-#define PINK CLITERAL(Color){ 255, 109, 194, 255 } // Pink
-#define RED CLITERAL(Color){ 230, 41, 55, 255 } // Red
-#define MAROON CLITERAL(Color){ 190, 33, 55, 255 } // Maroon
-#define GREEN CLITERAL(Color){ 0, 228, 48, 255 } // Green
-#define LIME CLITERAL(Color){ 0, 158, 47, 255 } // Lime
-#define DARKGREEN CLITERAL(Color){ 0, 117, 44, 255 } // Dark Green
-#define SKYBLUE CLITERAL(Color){ 102, 191, 255, 255 } // Sky Blue
-#define BLUE CLITERAL(Color){ 0, 121, 241, 255 } // Blue
-#define DARKBLUE CLITERAL(Color){ 0, 82, 172, 255 } // Dark Blue
-#define PURPLE CLITERAL(Color){ 200, 122, 255, 255 } // Purple
-#define VIOLET CLITERAL(Color){ 135, 60, 190, 255 } // Violet
-#define DARKPURPLE CLITERAL(Color){ 112, 31, 126, 255 } // Dark Purple
-#define BEIGE CLITERAL(Color){ 211, 176, 131, 255 } // Beige
-#define BROWN CLITERAL(Color){ 127, 106, 79, 255 } // Brown
-#define DARKBROWN CLITERAL(Color){ 76, 63, 47, 255 } // Dark Brown
-
-#define WHITE CLITERAL(Color){ 255, 255, 255, 255 } // White
-#define BLACK CLITERAL(Color){ 0, 0, 0, 255 } // Black
-#define BLANK CLITERAL(Color){ 0, 0, 0, 0 } // Blank (Transparent)
-#define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta
-#define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo)
-
-//----------------------------------------------------------------------------------
-// Structures Definition
-//----------------------------------------------------------------------------------
-// Boolean type
-#if defined(__STDC__) && __STDC_VERSION__ >= 199901L
- #include <stdbool.h>
-#elif !defined(__cplusplus) && !defined(bool)
- typedef enum bool { false, true } bool;
- #define RL_BOOL_TYPE
-#endif
-
-// Vector2, 2 components
-typedef struct Vector2 {
- float x; // Vector x component
- float y; // Vector y component
-} Vector2;
-
-// Vector3, 3 components
-typedef struct Vector3 {
- float x; // Vector x component
- float y; // Vector y component
- float z; // Vector z component
-} Vector3;
-
-// Vector4, 4 components
-typedef struct Vector4 {
- float x; // Vector x component
- float y; // Vector y component
- float z; // Vector z component
- float w; // Vector w component
-} Vector4;
-
-// Quaternion, 4 components (Vector4 alias)
-typedef Vector4 Quaternion;
-
-// Matrix, 4x4 components, column major, OpenGL style, right handed
-typedef struct Matrix {
- float m0, m4, m8, m12; // Matrix first row (4 components)
- float m1, m5, m9, m13; // Matrix second row (4 components)
- float m2, m6, m10, m14; // Matrix third row (4 components)
- float m3, m7, m11, m15; // Matrix fourth row (4 components)
-} Matrix;
-
-// Color, 4 components, R8G8B8A8 (32bit)
-typedef struct Color {
- unsigned char r; // Color red value
- unsigned char g; // Color green value
- unsigned char b; // Color blue value
- unsigned char a; // Color alpha value
-} Color;
-
-// Rectangle, 4 components
-typedef struct Rectangle {
- float x; // Rectangle top-left corner position x
- float y; // Rectangle top-left corner position y
- float width; // Rectangle width
- float height; // Rectangle height
-} Rectangle;
-
-// Image, pixel data stored in CPU memory (RAM)
-typedef struct Image {
- void *data; // Image raw data
- int width; // Image base width
- int height; // Image base height
- int mipmaps; // Mipmap levels, 1 by default
- int format; // Data format (PixelFormat type)
-} Image;
-
-// Texture, tex data stored in GPU memory (VRAM)
-typedef struct Texture {
- unsigned int id; // OpenGL texture id
- int width; // Texture base width
- int height; // Texture base height
- int mipmaps; // Mipmap levels, 1 by default
- int format; // Data format (PixelFormat type)
-} Texture;
-
-// Texture2D, same as Texture
-typedef Texture Texture2D;
-
-// TextureCubemap, same as Texture
-typedef Texture TextureCubemap;
-
-// RenderTexture, fbo for texture rendering
-typedef struct RenderTexture {
- unsigned int id; // OpenGL framebuffer object id
- Texture texture; // Color buffer attachment texture
- Texture depth; // Depth buffer attachment texture
-} RenderTexture;
-
-// RenderTexture2D, same as RenderTexture
-typedef RenderTexture RenderTexture2D;
-
-// NPatchInfo, n-patch layout info
-typedef struct NPatchInfo {
- Rectangle source; // Texture source rectangle
- int left; // Left border offset
- int top; // Top border offset
- int right; // Right border offset
- int bottom; // Bottom border offset
- int layout; // Layout of the n-patch: 3x3, 1x3 or 3x1
-} NPatchInfo;
-
-// GlyphInfo, font characters glyphs info
-typedef struct GlyphInfo {
- int value; // Character value (Unicode)
- int offsetX; // Character offset X when drawing
- int offsetY; // Character offset Y when drawing
- int advanceX; // Character advance position X
- Image image; // Character image data
-} GlyphInfo;
-
-// Font, font texture and GlyphInfo array data
-typedef struct Font {
- int baseSize; // Base size (default chars height)
- int glyphCount; // Number of glyph characters
- int glyphPadding; // Padding around the glyph characters
- Texture2D texture; // Texture atlas containing the glyphs
- Rectangle *recs; // Rectangles in texture for the glyphs
- GlyphInfo *glyphs; // Glyphs info data
-} Font;
-
-// Camera, defines position/orientation in 3d space
-typedef struct Camera3D {
- Vector3 position; // Camera position
- Vector3 target; // Camera target it looks-at
- Vector3 up; // Camera up vector (rotation over its axis)
- float fovy; // Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic
- int projection; // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC
-} Camera3D;
-
-typedef Camera3D Camera; // Camera type fallback, defaults to Camera3D
-
-// Camera2D, defines position/orientation in 2d space
-typedef struct Camera2D {
- Vector2 offset; // Camera offset (displacement from target)
- Vector2 target; // Camera target (rotation and zoom origin)
- float rotation; // Camera rotation in degrees
- float zoom; // Camera zoom (scaling), should be 1.0f by default
-} Camera2D;
-
-// Mesh, vertex data and vao/vbo
-typedef struct Mesh {
- int vertexCount; // Number of vertices stored in arrays
- int triangleCount; // Number of triangles stored (indexed or not)
-
- // Vertex attributes data
- float *vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0)
- float *texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
- float *texcoords2; // Vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
- float *normals; // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
- float *tangents; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4)
- unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
- unsigned short *indices; // Vertex indices (in case vertex data comes indexed)
-
- // Animation vertex data
- float *animVertices; // Animated vertex positions (after bones transformations)
- float *animNormals; // Animated normals (after bones transformations)
- unsigned char *boneIds; // Vertex bone ids, max 255 bone ids, up to 4 bones influence by vertex (skinning)
- float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning)
-
- // OpenGL identifiers
- unsigned int vaoId; // OpenGL Vertex Array Object id
- unsigned int *vboId; // OpenGL Vertex Buffer Objects id (default vertex data)
-} Mesh;
-
-// Shader
-typedef struct Shader {
- unsigned int id; // Shader program id
- int *locs; // Shader locations array (RL_MAX_SHADER_LOCATIONS)
-} Shader;
-
-// MaterialMap
-typedef struct MaterialMap {
- Texture2D texture; // Material map texture
- Color color; // Material map color
- float value; // Material map value
-} MaterialMap;
-
-// Material, includes shader and maps
-typedef struct Material {
- Shader shader; // Material shader
- MaterialMap *maps; // Material maps array (MAX_MATERIAL_MAPS)
- float params[4]; // Material generic parameters (if required)
-} Material;
-
-// Transform, vectex transformation data
-typedef struct Transform {
- Vector3 translation; // Translation
- Quaternion rotation; // Rotation
- Vector3 scale; // Scale
-} Transform;
-
-// Bone, skeletal animation bone
-typedef struct BoneInfo {
- char name[32]; // Bone name
- int parent; // Bone parent
-} BoneInfo;
-
-// Model, meshes, materials and animation data
-typedef struct Model {
- Matrix transform; // Local transform matrix
-
- int meshCount; // Number of meshes
- int materialCount; // Number of materials
- Mesh *meshes; // Meshes array
- Material *materials; // Materials array
- int *meshMaterial; // Mesh material number
-
- // Animation data
- int boneCount; // Number of bones
- BoneInfo *bones; // Bones information (skeleton)
- Transform *bindPose; // Bones base transformation (pose)
-} Model;
-
-// ModelAnimation
-typedef struct ModelAnimation {
- int boneCount; // Number of bones
- int frameCount; // Number of animation frames
- BoneInfo *bones; // Bones information (skeleton)
- Transform **framePoses; // Poses array by frame
-} ModelAnimation;
-
-// Ray, ray for raycasting
-typedef struct Ray {
- Vector3 position; // Ray position (origin)
- Vector3 direction; // Ray direction
-} Ray;
-
-// RayCollision, ray hit information
-typedef struct RayCollision {
- bool hit; // Did the ray hit something?
- float distance; // Distance to nearest hit
- Vector3 point; // Point of nearest hit
- Vector3 normal; // Surface normal of hit
-} RayCollision;
-
-// BoundingBox
-typedef struct BoundingBox {
- Vector3 min; // Minimum vertex box-corner
- Vector3 max; // Maximum vertex box-corner
-} BoundingBox;
-
-// Wave, audio wave data
-typedef struct Wave {
- unsigned int frameCount; // Total number of frames (considering channels)
- unsigned int sampleRate; // Frequency (samples per second)
- unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
- unsigned int channels; // Number of channels (1-mono, 2-stereo, ...)
- void *data; // Buffer data pointer
-} Wave;
-
-typedef struct rAudioBuffer rAudioBuffer;
-
-// AudioStream, custom audio stream
-typedef struct AudioStream {
- rAudioBuffer *buffer; // Pointer to internal data used by the audio system
-
- unsigned int sampleRate; // Frequency (samples per second)
- unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported)
- unsigned int channels; // Number of channels (1-mono, 2-stereo, ...)
-} AudioStream;
-
-// Sound
-typedef struct Sound {
- AudioStream stream; // Audio stream
- unsigned int frameCount; // Total number of frames (considering channels)
-} Sound;
-
-// Music, audio stream, anything longer than ~10 seconds should be streamed
-typedef struct Music {
- AudioStream stream; // Audio stream
- unsigned int frameCount; // Total number of frames (considering channels)
- bool looping; // Music looping enable
-
- int ctxType; // Type of music context (audio filetype)
- void *ctxData; // Audio context data, depends on type
-} Music;
-
-// VrDeviceInfo, Head-Mounted-Display device parameters
-typedef struct VrDeviceInfo {
- int hResolution; // Horizontal resolution in pixels
- int vResolution; // Vertical resolution in pixels
- float hScreenSize; // Horizontal size in meters
- float vScreenSize; // Vertical size in meters
- float vScreenCenter; // Screen center in meters
- float eyeToScreenDistance; // Distance between eye and display in meters
- float lensSeparationDistance; // Lens separation distance in meters
- float interpupillaryDistance; // IPD (distance between pupils) in meters
- float lensDistortionValues[4]; // Lens distortion constant parameters
- float chromaAbCorrection[4]; // Chromatic aberration correction parameters
-} VrDeviceInfo;
-
-// VrStereoConfig, VR stereo rendering configuration for simulator
-typedef struct VrStereoConfig {
- Matrix projection[2]; // VR projection matrices (per eye)
- Matrix viewOffset[2]; // VR view offset matrices (per eye)
- float leftLensCenter[2]; // VR left lens center
- float rightLensCenter[2]; // VR right lens center
- float leftScreenCenter[2]; // VR left screen center
- float rightScreenCenter[2]; // VR right screen center
- float scale[2]; // VR distortion scale
- float scaleIn[2]; // VR distortion scale in
-} VrStereoConfig;
-
-//----------------------------------------------------------------------------------
-// Enumerators Definition
-//----------------------------------------------------------------------------------
-// System/Window config flags
-// NOTE: Every bit registers one state (use it with bit masks)
-// By default all flags are set to 0
-typedef enum {
- FLAG_VSYNC_HINT = 0x00000040, // Set to try enabling V-Sync on GPU
- FLAG_FULLSCREEN_MODE = 0x00000002, // Set to run program in fullscreen
- FLAG_WINDOW_RESIZABLE = 0x00000004, // Set to allow resizable window
- FLAG_WINDOW_UNDECORATED = 0x00000008, // Set to disable window decoration (frame and buttons)
- FLAG_WINDOW_HIDDEN = 0x00000080, // Set to hide window
- FLAG_WINDOW_MINIMIZED = 0x00000200, // Set to minimize window (iconify)
- FLAG_WINDOW_MAXIMIZED = 0x00000400, // Set to maximize window (expanded to monitor)
- FLAG_WINDOW_UNFOCUSED = 0x00000800, // Set to window non focused
- FLAG_WINDOW_TOPMOST = 0x00001000, // Set to window always on top
- FLAG_WINDOW_ALWAYS_RUN = 0x00000100, // Set to allow windows running while minimized
- FLAG_WINDOW_TRANSPARENT = 0x00000010, // Set to allow transparent framebuffer
- FLAG_WINDOW_HIGHDPI = 0x00002000, // Set to support HighDPI
- FLAG_MSAA_4X_HINT = 0x00000020, // Set to try enabling MSAA 4X
- FLAG_INTERLACED_HINT = 0x00010000 // Set to try enabling interlaced video format (for V3D)
-} ConfigFlags;
-
-// Trace log level
-// NOTE: Organized by priority level
-typedef enum {
- LOG_ALL = 0, // Display all logs
- LOG_TRACE, // Trace logging, intended for internal use only
- LOG_DEBUG, // Debug logging, used for internal debugging, it should be disabled on release builds
- LOG_INFO, // Info logging, used for program execution info
- LOG_WARNING, // Warning logging, used on recoverable failures
- LOG_ERROR, // Error logging, used on unrecoverable failures
- LOG_FATAL, // Fatal logging, used to abort program: exit(EXIT_FAILURE)
- LOG_NONE // Disable logging
-} TraceLogLevel;
-
-// Keyboard keys (US keyboard layout)
-// NOTE: Use GetKeyPressed() to allow redefining
-// required keys for alternative layouts
-typedef enum {
- KEY_NULL = 0, // Key: NULL, used for no key pressed
- // Alphanumeric keys
- KEY_APOSTROPHE = 39, // Key: '
- KEY_COMMA = 44, // Key: ,
- KEY_MINUS = 45, // Key: -
- KEY_PERIOD = 46, // Key: .
- KEY_SLASH = 47, // Key: /
- KEY_ZERO = 48, // Key: 0
- KEY_ONE = 49, // Key: 1
- KEY_TWO = 50, // Key: 2
- KEY_THREE = 51, // Key: 3
- KEY_FOUR = 52, // Key: 4
- KEY_FIVE = 53, // Key: 5
- KEY_SIX = 54, // Key: 6
- KEY_SEVEN = 55, // Key: 7
- KEY_EIGHT = 56, // Key: 8
- KEY_NINE = 57, // Key: 9
- KEY_SEMICOLON = 59, // Key: ;
- KEY_EQUAL = 61, // Key: =
- KEY_A = 65, // Key: A | a
- KEY_B = 66, // Key: B | b
- KEY_C = 67, // Key: C | c
- KEY_D = 68, // Key: D | d
- KEY_E = 69, // Key: E | e
- KEY_F = 70, // Key: F | f
- KEY_G = 71, // Key: G | g
- KEY_H = 72, // Key: H | h
- KEY_I = 73, // Key: I | i
- KEY_J = 74, // Key: J | j
- KEY_K = 75, // Key: K | k
- KEY_L = 76, // Key: L | l
- KEY_M = 77, // Key: M | m
- KEY_N = 78, // Key: N | n
- KEY_O = 79, // Key: O | o
- KEY_P = 80, // Key: P | p
- KEY_Q = 81, // Key: Q | q
- KEY_R = 82, // Key: R | r
- KEY_S = 83, // Key: S | s
- KEY_T = 84, // Key: T | t
- KEY_U = 85, // Key: U | u
- KEY_V = 86, // Key: V | v
- KEY_W = 87, // Key: W | w
- KEY_X = 88, // Key: X | x
- KEY_Y = 89, // Key: Y | y
- KEY_Z = 90, // Key: Z | z
- KEY_LEFT_BRACKET = 91, // Key: [
- KEY_BACKSLASH = 92, // Key: '\'
- KEY_RIGHT_BRACKET = 93, // Key: ]
- KEY_GRAVE = 96, // Key: `
- // Function keys
- KEY_SPACE = 32, // Key: Space
- KEY_ESCAPE = 256, // Key: Esc
- KEY_ENTER = 257, // Key: Enter
- KEY_TAB = 258, // Key: Tab
- KEY_BACKSPACE = 259, // Key: Backspace
- KEY_INSERT = 260, // Key: Ins
- KEY_DELETE = 261, // Key: Del
- KEY_RIGHT = 262, // Key: Cursor right
- KEY_LEFT = 263, // Key: Cursor left
- KEY_DOWN = 264, // Key: Cursor down
- KEY_UP = 265, // Key: Cursor up
- KEY_PAGE_UP = 266, // Key: Page up
- KEY_PAGE_DOWN = 267, // Key: Page down
- KEY_HOME = 268, // Key: Home
- KEY_END = 269, // Key: End
- KEY_CAPS_LOCK = 280, // Key: Caps lock
- KEY_SCROLL_LOCK = 281, // Key: Scroll down
- KEY_NUM_LOCK = 282, // Key: Num lock
- KEY_PRINT_SCREEN = 283, // Key: Print screen
- KEY_PAUSE = 284, // Key: Pause
- KEY_F1 = 290, // Key: F1
- KEY_F2 = 291, // Key: F2
- KEY_F3 = 292, // Key: F3
- KEY_F4 = 293, // Key: F4
- KEY_F5 = 294, // Key: F5
- KEY_F6 = 295, // Key: F6
- KEY_F7 = 296, // Key: F7
- KEY_F8 = 297, // Key: F8
- KEY_F9 = 298, // Key: F9
- KEY_F10 = 299, // Key: F10
- KEY_F11 = 300, // Key: F11
- KEY_F12 = 301, // Key: F12
- KEY_LEFT_SHIFT = 340, // Key: Shift left
- KEY_LEFT_CONTROL = 341, // Key: Control left
- KEY_LEFT_ALT = 342, // Key: Alt left
- KEY_LEFT_SUPER = 343, // Key: Super left
- KEY_RIGHT_SHIFT = 344, // Key: Shift right
- KEY_RIGHT_CONTROL = 345, // Key: Control right
- KEY_RIGHT_ALT = 346, // Key: Alt right
- KEY_RIGHT_SUPER = 347, // Key: Super right
- KEY_KB_MENU = 348, // Key: KB menu
- // Keypad keys
- KEY_KP_0 = 320, // Key: Keypad 0
- KEY_KP_1 = 321, // Key: Keypad 1
- KEY_KP_2 = 322, // Key: Keypad 2
- KEY_KP_3 = 323, // Key: Keypad 3
- KEY_KP_4 = 324, // Key: Keypad 4
- KEY_KP_5 = 325, // Key: Keypad 5
- KEY_KP_6 = 326, // Key: Keypad 6
- KEY_KP_7 = 327, // Key: Keypad 7
- KEY_KP_8 = 328, // Key: Keypad 8
- KEY_KP_9 = 329, // Key: Keypad 9
- KEY_KP_DECIMAL = 330, // Key: Keypad .
- KEY_KP_DIVIDE = 331, // Key: Keypad /
- KEY_KP_MULTIPLY = 332, // Key: Keypad *
- KEY_KP_SUBTRACT = 333, // Key: Keypad -
- KEY_KP_ADD = 334, // Key: Keypad +
- KEY_KP_ENTER = 335, // Key: Keypad Enter
- KEY_KP_EQUAL = 336, // Key: Keypad =
- // Android key buttons
- KEY_BACK = 4, // Key: Android back button
- KEY_MENU = 82, // Key: Android menu button
- KEY_VOLUME_UP = 24, // Key: Android volume up button
- KEY_VOLUME_DOWN = 25 // Key: Android volume down button
-} KeyboardKey;
-
-// Add backwards compatibility support for deprecated names
-#define MOUSE_LEFT_BUTTON MOUSE_BUTTON_LEFT
-#define MOUSE_RIGHT_BUTTON MOUSE_BUTTON_RIGHT
-#define MOUSE_MIDDLE_BUTTON MOUSE_BUTTON_MIDDLE
-
-// Mouse buttons
-typedef enum {
- MOUSE_BUTTON_LEFT = 0, // Mouse button left
- MOUSE_BUTTON_RIGHT = 1, // Mouse button right
- MOUSE_BUTTON_MIDDLE = 2, // Mouse button middle (pressed wheel)
- MOUSE_BUTTON_SIDE = 3, // Mouse button side (advanced mouse device)
- MOUSE_BUTTON_EXTRA = 4, // Mouse button extra (advanced mouse device)
- MOUSE_BUTTON_FORWARD = 5, // Mouse button fordward (advanced mouse device)
- MOUSE_BUTTON_BACK = 6, // Mouse button back (advanced mouse device)
-} MouseButton;
-
-// Mouse cursor
-typedef enum {
- MOUSE_CURSOR_DEFAULT = 0, // Default pointer shape
- MOUSE_CURSOR_ARROW = 1, // Arrow shape
- MOUSE_CURSOR_IBEAM = 2, // Text writing cursor shape
- MOUSE_CURSOR_CROSSHAIR = 3, // Cross shape
- MOUSE_CURSOR_POINTING_HAND = 4, // Pointing hand cursor
- MOUSE_CURSOR_RESIZE_EW = 5, // Horizontal resize/move arrow shape
- MOUSE_CURSOR_RESIZE_NS = 6, // Vertical resize/move arrow shape
- MOUSE_CURSOR_RESIZE_NWSE = 7, // Top-left to bottom-right diagonal resize/move arrow shape
- MOUSE_CURSOR_RESIZE_NESW = 8, // The top-right to bottom-left diagonal resize/move arrow shape
- MOUSE_CURSOR_RESIZE_ALL = 9, // The omni-directional resize/move cursor shape
- MOUSE_CURSOR_NOT_ALLOWED = 10 // The operation-not-allowed shape
-} MouseCursor;
-
-// Gamepad buttons
-typedef enum {
- GAMEPAD_BUTTON_UNKNOWN = 0, // Unknown button, just for error checking
- GAMEPAD_BUTTON_LEFT_FACE_UP, // Gamepad left DPAD up button
- GAMEPAD_BUTTON_LEFT_FACE_RIGHT, // Gamepad left DPAD right button
- GAMEPAD_BUTTON_LEFT_FACE_DOWN, // Gamepad left DPAD down button
- GAMEPAD_BUTTON_LEFT_FACE_LEFT, // Gamepad left DPAD left button
- GAMEPAD_BUTTON_RIGHT_FACE_UP, // Gamepad right button up (i.e. PS3: Triangle, Xbox: Y)
- GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, // Gamepad right button right (i.e. PS3: Square, Xbox: X)
- GAMEPAD_BUTTON_RIGHT_FACE_DOWN, // Gamepad right button down (i.e. PS3: Cross, Xbox: A)
- GAMEPAD_BUTTON_RIGHT_FACE_LEFT, // Gamepad right button left (i.e. PS3: Circle, Xbox: B)
- GAMEPAD_BUTTON_LEFT_TRIGGER_1, // Gamepad top/back trigger left (first), it could be a trailing button
- GAMEPAD_BUTTON_LEFT_TRIGGER_2, // Gamepad top/back trigger left (second), it could be a trailing button
- GAMEPAD_BUTTON_RIGHT_TRIGGER_1, // Gamepad top/back trigger right (one), it could be a trailing button
- GAMEPAD_BUTTON_RIGHT_TRIGGER_2, // Gamepad top/back trigger right (second), it could be a trailing button
- GAMEPAD_BUTTON_MIDDLE_LEFT, // Gamepad center buttons, left one (i.e. PS3: Select)
- GAMEPAD_BUTTON_MIDDLE, // Gamepad center buttons, middle one (i.e. PS3: PS, Xbox: XBOX)
- GAMEPAD_BUTTON_MIDDLE_RIGHT, // Gamepad center buttons, right one (i.e. PS3: Start)
- GAMEPAD_BUTTON_LEFT_THUMB, // Gamepad joystick pressed button left
- GAMEPAD_BUTTON_RIGHT_THUMB // Gamepad joystick pressed button right
-} GamepadButton;
-
-// Gamepad axis
-typedef enum {
- GAMEPAD_AXIS_LEFT_X = 0, // Gamepad left stick X axis
- GAMEPAD_AXIS_LEFT_Y = 1, // Gamepad left stick Y axis
- GAMEPAD_AXIS_RIGHT_X = 2, // Gamepad right stick X axis
- GAMEPAD_AXIS_RIGHT_Y = 3, // Gamepad right stick Y axis
- GAMEPAD_AXIS_LEFT_TRIGGER = 4, // Gamepad back trigger left, pressure level: [1..-1]
- GAMEPAD_AXIS_RIGHT_TRIGGER = 5 // Gamepad back trigger right, pressure level: [1..-1]
-} GamepadAxis;
-
-// Material map index
-typedef enum {
- MATERIAL_MAP_ALBEDO = 0, // Albedo material (same as: MATERIAL_MAP_DIFFUSE)
- MATERIAL_MAP_METALNESS, // Metalness material (same as: MATERIAL_MAP_SPECULAR)
- MATERIAL_MAP_NORMAL, // Normal material
- MATERIAL_MAP_ROUGHNESS, // Roughness material
- MATERIAL_MAP_OCCLUSION, // Ambient occlusion material
- MATERIAL_MAP_EMISSION, // Emission material
- MATERIAL_MAP_HEIGHT, // Heightmap material
- MATERIAL_MAP_CUBEMAP, // Cubemap material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
- MATERIAL_MAP_IRRADIANCE, // Irradiance material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
- MATERIAL_MAP_PREFILTER, // Prefilter material (NOTE: Uses GL_TEXTURE_CUBE_MAP)
- MATERIAL_MAP_BRDF // Brdf material
-} MaterialMapIndex;
-
-#define MATERIAL_MAP_DIFFUSE MATERIAL_MAP_ALBEDO
-#define MATERIAL_MAP_SPECULAR MATERIAL_MAP_METALNESS
-
-// Shader location index
-typedef enum {
- SHADER_LOC_VERTEX_POSITION = 0, // Shader location: vertex attribute: position
- SHADER_LOC_VERTEX_TEXCOORD01, // Shader location: vertex attribute: texcoord01
- SHADER_LOC_VERTEX_TEXCOORD02, // Shader location: vertex attribute: texcoord02
- SHADER_LOC_VERTEX_NORMAL, // Shader location: vertex attribute: normal
- SHADER_LOC_VERTEX_TANGENT, // Shader location: vertex attribute: tangent
- SHADER_LOC_VERTEX_COLOR, // Shader location: vertex attribute: color
- SHADER_LOC_MATRIX_MVP, // Shader location: matrix uniform: model-view-projection
- SHADER_LOC_MATRIX_VIEW, // Shader location: matrix uniform: view (camera transform)
- SHADER_LOC_MATRIX_PROJECTION, // Shader location: matrix uniform: projection
- SHADER_LOC_MATRIX_MODEL, // Shader location: matrix uniform: model (transform)
- SHADER_LOC_MATRIX_NORMAL, // Shader location: matrix uniform: normal
- SHADER_LOC_VECTOR_VIEW, // Shader location: vector uniform: view
- SHADER_LOC_COLOR_DIFFUSE, // Shader location: vector uniform: diffuse color
- SHADER_LOC_COLOR_SPECULAR, // Shader location: vector uniform: specular color
- SHADER_LOC_COLOR_AMBIENT, // Shader location: vector uniform: ambient color
- SHADER_LOC_MAP_ALBEDO, // Shader location: sampler2d texture: albedo (same as: SHADER_LOC_MAP_DIFFUSE)
- SHADER_LOC_MAP_METALNESS, // Shader location: sampler2d texture: metalness (same as: SHADER_LOC_MAP_SPECULAR)
- SHADER_LOC_MAP_NORMAL, // Shader location: sampler2d texture: normal
- SHADER_LOC_MAP_ROUGHNESS, // Shader location: sampler2d texture: roughness
- SHADER_LOC_MAP_OCCLUSION, // Shader location: sampler2d texture: occlusion
- SHADER_LOC_MAP_EMISSION, // Shader location: sampler2d texture: emission
- SHADER_LOC_MAP_HEIGHT, // Shader location: sampler2d texture: height
- SHADER_LOC_MAP_CUBEMAP, // Shader location: samplerCube texture: cubemap
- SHADER_LOC_MAP_IRRADIANCE, // Shader location: samplerCube texture: irradiance
- SHADER_LOC_MAP_PREFILTER, // Shader location: samplerCube texture: prefilter
- SHADER_LOC_MAP_BRDF // Shader location: sampler2d texture: brdf
-} ShaderLocationIndex;
-
-#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO
-#define SHADER_LOC_MAP_SPECULAR SHADER_LOC_MAP_METALNESS
-
-// Shader uniform data type
-typedef enum {
- SHADER_UNIFORM_FLOAT = 0, // Shader uniform type: float
- SHADER_UNIFORM_VEC2, // Shader uniform type: vec2 (2 float)
- SHADER_UNIFORM_VEC3, // Shader uniform type: vec3 (3 float)
- SHADER_UNIFORM_VEC4, // Shader uniform type: vec4 (4 float)
- SHADER_UNIFORM_INT, // Shader uniform type: int
- SHADER_UNIFORM_IVEC2, // Shader uniform type: ivec2 (2 int)
- SHADER_UNIFORM_IVEC3, // Shader uniform type: ivec3 (3 int)
- SHADER_UNIFORM_IVEC4, // Shader uniform type: ivec4 (4 int)
- SHADER_UNIFORM_SAMPLER2D // Shader uniform type: sampler2d
-} ShaderUniformDataType;
-
-// Shader attribute data types
-typedef enum {
- SHADER_ATTRIB_FLOAT = 0, // Shader attribute type: float
- SHADER_ATTRIB_VEC2, // Shader attribute type: vec2 (2 float)
- SHADER_ATTRIB_VEC3, // Shader attribute type: vec3 (3 float)
- SHADER_ATTRIB_VEC4 // Shader attribute type: vec4 (4 float)
-} ShaderAttributeDataType;
-
-// Pixel formats
-// NOTE: Support depends on OpenGL version and platform
-typedef enum {
- PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha)
- PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels)
- PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp
- PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp
- PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha)
- PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha)
- PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp
- PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
- PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
- PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
- PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
- PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
- PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
- PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp
- PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp
- PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp
- PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp
- PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp
- PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp
- PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp
- PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp
-} PixelFormat;
-
-// Texture parameters: filter mode
-// NOTE 1: Filtering considers mipmaps if available in the texture
-// NOTE 2: Filter is accordingly set for minification and magnification
-typedef enum {
- TEXTURE_FILTER_POINT = 0, // No filter, just pixel approximation
- TEXTURE_FILTER_BILINEAR, // Linear filtering
- TEXTURE_FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps)
- TEXTURE_FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x
- TEXTURE_FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x
- TEXTURE_FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x
-} TextureFilter;
-
-// Texture parameters: wrap mode
-typedef enum {
- TEXTURE_WRAP_REPEAT = 0, // Repeats texture in tiled mode
- TEXTURE_WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode
- TEXTURE_WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode
- TEXTURE_WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode
-} TextureWrap;
-
-// Cubemap layouts
-typedef enum {
- CUBEMAP_LAYOUT_AUTO_DETECT = 0, // Automatically detect layout type
- CUBEMAP_LAYOUT_LINE_VERTICAL, // Layout is defined by a vertical line with faces
- CUBEMAP_LAYOUT_LINE_HORIZONTAL, // Layout is defined by an horizontal line with faces
- CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR, // Layout is defined by a 3x4 cross with cubemap faces
- CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE, // Layout is defined by a 4x3 cross with cubemap faces
- CUBEMAP_LAYOUT_PANORAMA // Layout is defined by a panorama image (equirectangular map)
-} CubemapLayout;
-
-// Font type, defines generation method
-typedef enum {
- FONT_DEFAULT = 0, // Default font generation, anti-aliased
- FONT_BITMAP, // Bitmap font generation, no anti-aliasing
- FONT_SDF // SDF font generation, requires external shader
-} FontType;
-
-// Color blending modes (pre-defined)
-typedef enum {
- BLEND_ALPHA = 0, // Blend textures considering alpha (default)
- BLEND_ADDITIVE, // Blend textures adding colors
- BLEND_MULTIPLIED, // Blend textures multiplying colors
- BLEND_ADD_COLORS, // Blend textures adding colors (alternative)
- BLEND_SUBTRACT_COLORS, // Blend textures subtracting colors (alternative)
- BLEND_ALPHA_PREMUL, // Blend premultiplied textures considering alpha
- BLEND_CUSTOM // Blend textures using custom src/dst factors (use rlSetBlendMode())
-} BlendMode;
-
-// Gesture
-// NOTE: It could be used as flags to enable only some gestures
-typedef enum {
- GESTURE_NONE = 0, // No gesture
- GESTURE_TAP = 1, // Tap gesture
- GESTURE_DOUBLETAP = 2, // Double tap gesture
- GESTURE_HOLD = 4, // Hold gesture
- GESTURE_DRAG = 8, // Drag gesture
- GESTURE_SWIPE_RIGHT = 16, // Swipe right gesture
- GESTURE_SWIPE_LEFT = 32, // Swipe left gesture
- GESTURE_SWIPE_UP = 64, // Swipe up gesture
- GESTURE_SWIPE_DOWN = 128, // Swipe down gesture
- GESTURE_PINCH_IN = 256, // Pinch in gesture
- GESTURE_PINCH_OUT = 512 // Pinch out gesture
-} Gesture;
-
-// Camera system modes
-typedef enum {
- CAMERA_CUSTOM = 0, // Custom camera
- CAMERA_FREE, // Free camera
- CAMERA_ORBITAL, // Orbital camera
- CAMERA_FIRST_PERSON, // First person camera
- CAMERA_THIRD_PERSON // Third person camera
-} CameraMode;
-
-// Camera projection
-typedef enum {
- CAMERA_PERSPECTIVE = 0, // Perspective projection
- CAMERA_ORTHOGRAPHIC // Orthographic projection
-} CameraProjection;
-
-// N-patch layout
-typedef enum {
- NPATCH_NINE_PATCH = 0, // Npatch layout: 3x3 tiles
- NPATCH_THREE_PATCH_VERTICAL, // Npatch layout: 1x3 tiles
- NPATCH_THREE_PATCH_HORIZONTAL // Npatch layout: 3x1 tiles
-} NPatchLayout;
-
-// Callbacks to hook some internal functions
-// WARNING: This callbacks are intended for advance users
-typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); // Logging: Redirect trace log messages
-typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, unsigned int *bytesRead); // FileIO: Load binary data
-typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, unsigned int bytesToWrite); // FileIO: Save binary data
-typedef char *(*LoadFileTextCallback)(const char *fileName); // FileIO: Load text data
-typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); // FileIO: Save text data
-
-//------------------------------------------------------------------------------------
-// Global Variables Definition
-//------------------------------------------------------------------------------------
-// It's lonely here...
-
-//------------------------------------------------------------------------------------
-// Window and Graphics Device Functions (Module: core)
-//------------------------------------------------------------------------------------
-
-#if defined(__cplusplus)
-extern "C" { // Prevents name mangling of functions
-#endif
-
-// Window-related functions
-RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context
-RLAPI bool WindowShouldClose(void); // Check if KEY_ESCAPE pressed or Close icon pressed
-RLAPI void CloseWindow(void); // Close window and unload OpenGL context
-RLAPI bool IsWindowReady(void); // Check if window has been initialized successfully
-RLAPI bool IsWindowFullscreen(void); // Check if window is currently fullscreen
-RLAPI bool IsWindowHidden(void); // Check if window is currently hidden (only PLATFORM_DESKTOP)
-RLAPI bool IsWindowMinimized(void); // Check if window is currently minimized (only PLATFORM_DESKTOP)
-RLAPI bool IsWindowMaximized(void); // Check if window is currently maximized (only PLATFORM_DESKTOP)
-RLAPI bool IsWindowFocused(void); // Check if window is currently focused (only PLATFORM_DESKTOP)
-RLAPI bool IsWindowResized(void); // Check if window has been resized last frame
-RLAPI bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled
-RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags (only PLATFORM_DESKTOP)
-RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags
-RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
-RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
-RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
-RLAPI void RestoreWindow(void); // Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
-RLAPI void SetWindowIcon(Image image); // Set icon for window (only PLATFORM_DESKTOP)
-RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP)
-RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP)
-RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode)
-RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
-RLAPI void SetWindowSize(int width, int height); // Set window dimensions
-RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
-RLAPI void *GetWindowHandle(void); // Get native window handle
-RLAPI int GetScreenWidth(void); // Get current screen width
-RLAPI int GetScreenHeight(void); // Get current screen height
-RLAPI int GetRenderWidth(void); // Get current render width (it considers HiDPI)
-RLAPI int GetRenderHeight(void); // Get current render height (it considers HiDPI)
-RLAPI int GetMonitorCount(void); // Get number of connected monitors
-RLAPI int GetCurrentMonitor(void); // Get current connected monitor
-RLAPI Vector2 GetMonitorPosition(int monitor); // Get specified monitor position
-RLAPI int GetMonitorWidth(int monitor); // Get specified monitor width (max available by monitor)
-RLAPI int GetMonitorHeight(int monitor); // Get specified monitor height (max available by monitor)
-RLAPI int GetMonitorPhysicalWidth(int monitor); // Get specified monitor physical width in millimetres
-RLAPI int GetMonitorPhysicalHeight(int monitor); // Get specified monitor physical height in millimetres
-RLAPI int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate
-RLAPI Vector2 GetWindowPosition(void); // Get window position XY on monitor
-RLAPI Vector2 GetWindowScaleDPI(void); // Get window scale DPI factor
-RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the primary monitor
-RLAPI void SetClipboardText(const char *text); // Set clipboard text content
-RLAPI const char *GetClipboardText(void); // Get clipboard text content
-
-// Custom frame control functions
-// NOTE: Those functions are intended for advance users that want full control over the frame processing
-// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timming + PollInputEvents()
-// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL
-RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing)
-RLAPI void PollInputEvents(void); // Register all input events
-RLAPI void WaitTime(float ms); // Wait for some milliseconds (halt program execution)
-
-// Cursor-related functions
-RLAPI void ShowCursor(void); // Shows cursor
-RLAPI void HideCursor(void); // Hides cursor
-RLAPI bool IsCursorHidden(void); // Check if cursor is not visible
-RLAPI void EnableCursor(void); // Enables cursor (unlock cursor)
-RLAPI void DisableCursor(void); // Disables cursor (lock cursor)
-RLAPI bool IsCursorOnScreen(void); // Check if cursor is on the screen
-
-// Drawing-related functions
-RLAPI void ClearBackground(Color color); // Set background color (framebuffer clear color)
-RLAPI void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing
-RLAPI void EndDrawing(void); // End canvas drawing and swap buffers (double buffering)
-RLAPI void BeginMode2D(Camera2D camera); // Begin 2D mode with custom camera (2D)
-RLAPI void EndMode2D(void); // Ends 2D mode with custom camera
-RLAPI void BeginMode3D(Camera3D camera); // Begin 3D mode with custom camera (3D)
-RLAPI void EndMode3D(void); // Ends 3D mode and returns to default 2D orthographic mode
-RLAPI void BeginTextureMode(RenderTexture2D target); // Begin drawing to render texture
-RLAPI void EndTextureMode(void); // Ends drawing to render texture
-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, subtract, custom)
-RLAPI void EndBlendMode(void); // End blending mode (reset to default: alpha blending)
-RLAPI void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing)
-RLAPI void EndScissorMode(void); // End scissor mode
-RLAPI void BeginVrStereoMode(VrStereoConfig config); // Begin stereo rendering (requires VR simulator)
-RLAPI void EndVrStereoMode(void); // End stereo rendering (requires VR simulator)
-
-// VR stereo config functions for VR simulator
-RLAPI VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); // Load VR stereo config for VR simulator device parameters
-RLAPI void UnloadVrStereoConfig(VrStereoConfig config); // Unload VR stereo config
-
-// Shader management functions
-// NOTE: Shader functionality is not available on OpenGL 1.1
-RLAPI Shader LoadShader(const char *vsFileName, const char *fsFileName); // Load shader from files and bind default locations
-RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode); // Load shader from code strings and bind default locations
-RLAPI int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location
-RLAPI int GetShaderLocationAttrib(Shader shader, const char *attribName); // Get shader attribute location
-RLAPI void SetShaderValue(Shader shader, int locIndex, const void *value, int uniformType); // Set shader uniform value
-RLAPI void SetShaderValueV(Shader shader, int locIndex, const void *value, int uniformType, int count); // Set shader uniform value vector