1 module bindbc.raylib.bindstatic;
2 
3 version(BindBC_Static) version = BindRaylib_Static;
4 version(BindRaylib_Static):
5 
6 import bindbc.raylib.types;
7 extern (C) @nogc nothrow {
8    /**
9     * Initialize window and OpenGL context
10     */
11    void InitWindow(int width, int height, const(char)* title);
12    /**
13     * Check if KEY_ESCAPE pressed or Close icon pressed
14     */
15    bool WindowShouldClose();
16    /**
17     * Close window and unload OpenGL context
18     */
19    void CloseWindow();
20    /**
21     * Check if window has been initialized successfully
22     */
23    bool IsWindowReady();
24    /**
25     * Check if window is currently fullscreen
26     */
27    bool IsWindowFullscreen();
28    /**
29     * Check if window is currently hidden (only PLATFORM_DESKTOP)
30     */
31    bool IsWindowHidden();
32    /**
33     * Check if window is currently minimized (only PLATFORM_DESKTOP)
34     */
35    bool IsWindowMinimized();
36    /**
37     * Check if window is currently maximized (only PLATFORM_DESKTOP)
38     */
39    bool IsWindowMaximized();
40    /**
41     * Check if window is currently focused (only PLATFORM_DESKTOP)
42     */
43    bool IsWindowFocused();
44    /**
45     * Check if window has been resized last frame
46     */
47    bool IsWindowResized();
48    /**
49     * Check if one specific window flag is enabled
50     */
51    bool IsWindowState(uint flag);
52    /**
53     * Set window configuration state using flags
54     */
55    void SetWindowState(uint flags);
56    /**
57     * Clear window configuration state flags
58     */
59    void ClearWindowState(uint flags);
60    /**
61     * Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
62     */
63    void ToggleFullscreen();
64    /**
65     * Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
66     */
67    void MaximizeWindow();
68    /**
69     * Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
70     */
71    void MinimizeWindow();
72    /**
73     * Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
74     */
75    void RestoreWindow();
76    /**
77     * Set icon for window (only PLATFORM_DESKTOP)
78     */
79    void SetWindowIcon(Image image);
80    /**
81     * Set title for window (only PLATFORM_DESKTOP)
82     */
83    void SetWindowTitle(const(char)* title);
84    /**
85     * Set window position on screen (only PLATFORM_DESKTOP)
86     */
87    void SetWindowPosition(int x, int y);
88    /**
89     * Set monitor for the current window (fullscreen mode)
90     */
91    void SetWindowMonitor(int monitor);
92    /**
93     * Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
94     */
95    void SetWindowMinSize(int width, int height);
96    /**
97     * Set window dimensions
98     */
99    void SetWindowSize(int width, int height);
100    /**
101     * Get native window handle
102     */
103    void* GetWindowHandle();
104    /**
105     * Get current screen width
106     */
107    int GetScreenWidth();
108    /**
109     * Get current screen height
110     */
111    int GetScreenHeight();
112    /**
113     * Get number of connected monitors
114     */
115    int GetMonitorCount();
116    /**
117     * Get current connected monitor
118     */
119    int GetCurrentMonitor();
120    /**
121     * Get specified monitor position
122     */
123    Vector2 GetMonitorPosition(int monitor);
124    /**
125     * Get specified monitor width (max available by monitor)
126     */
127    int GetMonitorWidth(int monitor);
128    /**
129     * Get specified monitor height (max available by monitor)
130     */
131    int GetMonitorHeight(int monitor);
132    /**
133     * Get specified monitor physical width in millimetres
134     */
135    int GetMonitorPhysicalWidth(int monitor);
136    /**
137     * Get specified monitor physical height in millimetres
138     */
139    int GetMonitorPhysicalHeight(int monitor);
140    /**
141     * Get specified monitor refresh rate
142     */
143    int GetMonitorRefreshRate(int monitor);
144    /**
145     * Get window position XY on monitor
146     */
147    Vector2 GetWindowPosition();
148    /**
149     * Get window scale DPI factor
150     */
151    Vector2 GetWindowScaleDPI();
152    /**
153     * Get the human-readable, UTF-8 encoded name of the primary monitor
154     */
155    const(char)* GetMonitorName(int monitor);
156    /**
157     * Set clipboard text content
158     */
159    void SetClipboardText(const(char)* text);
160    /**
161     * Get clipboard text content
162     */
163    const(char)* GetClipboardText();
164    /**
165     * Swap back buffer with front buffer (screen drawing)
166     */
167    void SwapScreenBuffer();
168    /**
169     * Register all input events
170     */
171    void PollInputEvents();
172    /**
173     * Wait for some milliseconds (halt program execution)
174     */
175    void WaitTime(float ms);
176    /**
177     * Shows cursor
178     */
179    void ShowCursor();
180    /**
181     * Hides cursor
182     */
183    void HideCursor();
184    /**
185     * Check if cursor is not visible
186     */
187    bool IsCursorHidden();
188    /**
189     * Enables cursor (unlock cursor)
190     */
191    void EnableCursor();
192    /**
193     * Disables cursor (lock cursor)
194     */
195    void DisableCursor();
196    /**
197     * Check if cursor is on the screen
198     */
199    bool IsCursorOnScreen();
200    /**
201     * Set background color (framebuffer clear color)
202     */
203    void ClearBackground(Color color);
204    /**
205     * Setup canvas (framebuffer) to start drawing
206     */
207    void BeginDrawing();
208    /**
209     * End canvas drawing and swap buffers (double buffering)
210     */
211    void EndDrawing();
212    /**
213     * Begin 2D mode with custom camera (2D)
214     */
215    void BeginMode2D(Camera2D camera);
216    /**
217     * Ends 2D mode with custom camera
218     */
219    void EndMode2D();
220    /**
221     * Begin 3D mode with custom camera (3D)
222     */
223    void BeginMode3D(Camera3D camera);
224    /**
225     * Ends 3D mode and returns to default 2D orthographic mode
226     */
227    void EndMode3D();
228    /**
229     * Begin drawing to render texture
230     */
231    void BeginTextureMode(RenderTexture2D target);
232    /**
233     * Ends drawing to render texture
234     */
235    void EndTextureMode();
236    /**
237     * Begin custom shader drawing
238     */
239    void BeginShaderMode(Shader shader);
240    /**
241     * End custom shader drawing (use default shader)
242     */
243    void EndShaderMode();
244    /**
245     * Begin blending mode (alpha, additive, multiplied, subtract, custom)
246     */
247    void BeginBlendMode(int mode);
248    /**
249     * End blending mode (reset to default: alpha blending)
250     */
251    void EndBlendMode();
252    /**
253     * Begin scissor mode (define screen area for following drawing)
254     */
255    void BeginScissorMode(int x, int y, int width, int height);
256    /**
257     * End scissor mode
258     */
259    void EndScissorMode();
260    /**
261     * Begin stereo rendering (requires VR simulator)
262     */
263    void BeginVrStereoMode(VrStereoConfig config);
264    /**
265     * End stereo rendering (requires VR simulator)
266     */
267    void EndVrStereoMode();
268    /**
269     * Load VR stereo config for VR simulator device parameters
270     */
271    VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device);
272    /**
273     * Unload VR stereo config
274     */
275    void UnloadVrStereoConfig(VrStereoConfig config);
276    /**
277     * Load shader from files and bind default locations
278     */
279    Shader LoadShader(const(char)* vsFileName, const(char)* fsFileName);
280    /**
281     * Load shader from code strings and bind default locations
282     */
283    Shader LoadShaderFromMemory(const(char)* vsCode, const(char)* fsCode);
284    /**
285     * Get shader uniform location
286     */
287    int GetShaderLocation(Shader shader, const(char)* uniformName);
288    /**
289     * Get shader attribute location
290     */
291    int GetShaderLocationAttrib(Shader shader, const(char)* attribName);
292    /**
293     * Set shader uniform value
294     */
295    void SetShaderValue(Shader shader, int locIndex, const void* value, int uniformType);
296    /**
297     * Set shader uniform value vector
298     */
299    void SetShaderValueV(Shader shader, int locIndex, const void* value, int uniformType, int count);
300    /**
301     * Set shader uniform value (matrix 4x4)
302     */
303    void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat);
304    /**
305     * Set shader uniform value for texture (sampler2d)
306     */
307    void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture);
308    /**
309     * Unload shader from GPU memory (VRAM)
310     */
311    void UnloadShader(Shader shader);
312    /**
313     * Get a ray trace from mouse position
314     */
315    Ray GetMouseRay(Vector2 mousePosition, Camera camera);
316    /**
317     * Get camera transform matrix (view matrix)
318     */
319    Matrix GetCameraMatrix(Camera camera);
320    /**
321     * Get camera 2d transform matrix
322     */
323    Matrix GetCameraMatrix2D(Camera2D camera);
324    /**
325     * Get the screen space position for a 3d world space position
326     */
327    Vector2 GetWorldToScreen(Vector3 position, Camera camera);
328    /**
329     * Get size position for a 3d world space position
330     */
331    Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height);
332    /**
333     * Get the screen space position for a 2d camera world space position
334     */
335    Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera);
336    /**
337     * Get the world space position for a 2d camera screen space position
338     */
339    Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera);
340    /**
341     * Set target FPS (maximum)
342     */
343    void SetTargetFPS(int fps);
344    /**
345     * Get current FPS
346     */
347    int GetFPS();
348    /**
349     * Get time in seconds for last frame drawn (delta time)
350     */
351    float GetFrameTime();
352    /**
353     * Get elapsed time in seconds since InitWindow()
354     */
355    double GetTime();
356    /**
357     * Get a random value between min and max (both included)
358     */
359    int GetRandomValue(int min, int max);
360    /**
361     * Set the seed for the random number generator
362     */
363    void SetRandomSeed(uint seed);
364    /**
365     * Takes a screenshot of current screen (filename extension defines format)
366     */
367    void TakeScreenshot(const(char)* fileName);
368    /**
369     * Setup init configuration flags (view FLAGS)
370     */
371    void SetConfigFlags(uint flags);
372    /**
373     * Set the current threshold (minimum) log level
374     */
375    void SetTraceLogLevel(int logLevel);
376    /**
377     * Internal memory allocator
378     */
379    void* MemAlloc(int size);
380    /**
381     * Internal memory reallocator
382     */
383    void* MemRealloc(void* ptr, int size);
384    /**
385     * Internal memory free
386     */
387    void MemFree(void* ptr);
388    /**
389     * Load file data as byte array (read)
390     */
391    ubyte* LoadFileData(const(char)* fileName, uint* bytesRead);
392    /**
393     * Unload file data allocated by LoadFileData()
394     */
395    void UnloadFileData(ubyte* data);
396    /**
397     * Save data to file from byte array (write), returns true on success
398     */
399    bool SaveFileData(const(char)* fileName, void* data, uint bytesToWrite);
400    /**
401     * Load text data from file (read), returns a ' 0' terminated string
402     */
403    char* LoadFileText(const(char)* fileName);
404    /**
405     * Unload file text data allocated by LoadFileText()
406     */
407    void UnloadFileText(char* text);
408    /**
409     * Save text data to file (write), string must be ' 0' terminated, returns true on success
410     */
411    bool SaveFileText(const(char)* fileName, char* text);
412    /**
413     * Check if file exists
414     */
415    bool FileExists(const(char)* fileName);
416    /**
417     * Check if a directory path exists
418     */
419    bool DirectoryExists(const(char)* dirPath);
420    /**
421     * Check file extension (including point: .png, .wav)
422     */
423    bool IsFileExtension(const(char)* fileName, const(char)* ext);
424    /**
425     * Get pointer to extension for a filename string (includes dot: '.png')
426     */
427    const(char)* GetFileExtension(const(char)* fileName);
428    /**
429     * Get pointer to filename for a path string
430     */
431    const(char)* GetFileName(const(char)* filePath);
432    /**
433     * Get filename string without extension (uses static string)
434     */
435    const(char)* GetFileNameWithoutExt(const(char)* filePath);
436    /**
437     * Get full path for a given fileName with path (uses static string)
438     */
439    const(char)* GetDirectoryPath(const(char)* filePath);
440    /**
441     * Get previous directory path for a given path (uses static string)
442     */
443    const(char)* GetPrevDirectoryPath(const(char)* dirPath);
444    /**
445     * Get current working directory (uses static string)
446     */
447    const(char)* GetWorkingDirectory();
448    /**
449     * Get filenames in a directory path (memory should be freed)
450     */
451    char** GetDirectoryFiles(const(char)* dirPath, int* count);
452    /**
453     * Clear directory files paths buffers (free memory)
454     */
455    void ClearDirectoryFiles();
456    /**
457     * Change working directory, return true on success
458     */
459    bool ChangeDirectory(const(char)* dir);
460    /**
461     * Check if a file has been dropped into window
462     */
463    bool IsFileDropped();
464    /**
465     * Get dropped files names (memory should be freed)
466     */
467    char** GetDroppedFiles(int* count);
468    /**
469     * Clear dropped files paths buffer (free memory)
470     */
471    void ClearDroppedFiles();
472    /**
473     * Get file modification time (last write time)
474     */
475    long GetFileModTime(const(char)* fileName);
476    /**
477     * Compress data (DEFLATE algorithm)
478     */
479    ubyte* CompressData(ubyte* data, int dataLength, int* compDataLength);
480    /**
481     * Decompress data (DEFLATE algorithm)
482     */
483    ubyte* DecompressData(ubyte* compData, int compDataLength, int* dataLength);
484    /**
485     * Encode data to Base64 string
486     */
487    char* EncodeDataBase64(const(ubyte)* data, int dataLength, int* outputLength);
488    /**
489     * Decode Base64 string data
490     */
491    ubyte* DecodeDataBase64(ubyte* data, int* outputLength);
492    /**
493     * Save integer value to storage file (to defined position), returns true on success
494     */
495    bool SaveStorageValue(uint position, int value);
496    /**
497     * Load integer value from storage file (from defined position)
498     */
499    int LoadStorageValue(uint position);
500    /**
501     * Open URL with default system browser (if available)
502     */
503    void OpenURL(const(char)* url);
504    /**
505     * Check if a key has been pressed once
506     */
507    bool IsKeyPressed(int key);
508    /**
509     * Check if a key is being pressed
510     */
511    bool IsKeyDown(int key);
512    /**
513     * Check if a key has been released once
514     */
515    bool IsKeyReleased(int key);
516    /**
517     * Check if a key is NOT being pressed
518     */
519    bool IsKeyUp(int key);
520    /**
521     * Set a custom key to exit program (default is ESC)
522     */
523    void SetExitKey(int key);
524    /**
525     * Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty
526     */
527    int GetKeyPressed();
528    /**
529     * Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty
530     */
531    int GetCharPressed();
532    /**
533     * Check if a gamepad is available
534     */
535    bool IsGamepadAvailable(int gamepad);
536    /**
537     * Get gamepad internal name id
538     */
539    const(char)* GetGamepadName(int gamepad);
540    /**
541     * Check if a gamepad button has been pressed once
542     */
543    bool IsGamepadButtonPressed(int gamepad, int button);
544    /**
545     * Check if a gamepad button is being pressed
546     */
547    bool IsGamepadButtonDown(int gamepad, int button);
548    /**
549     * Check if a gamepad button has been released once
550     */
551    bool IsGamepadButtonReleased(int gamepad, int button);
552    /**
553     * Check if a gamepad button is NOT being pressed
554     */
555    bool IsGamepadButtonUp(int gamepad, int button);
556    /**
557     * Get the last gamepad button pressed
558     */
559    int GetGamepadButtonPressed();
560    /**
561     * Get gamepad axis count for a gamepad
562     */
563    int GetGamepadAxisCount(int gamepad);
564    /**
565     * Get axis movement value for a gamepad axis
566     */
567    float GetGamepadAxisMovement(int gamepad, int axis);
568    /**
569     * Set internal gamepad mappings (SDL_GameControllerDB)
570     */
571    int SetGamepadMappings(const(char)* mappings);
572    /**
573     * Check if a mouse button has been pressed once
574     */
575    bool IsMouseButtonPressed(int button);
576    /**
577     * Check if a mouse button is being pressed
578     */
579    bool IsMouseButtonDown(int button);
580    /**
581     * Check if a mouse button has been released once
582     */
583    bool IsMouseButtonReleased(int button);
584    /**
585     * Check if a mouse button is NOT being pressed
586     */
587    bool IsMouseButtonUp(int button);
588    /**
589     * Get mouse position X
590     */
591    int GetMouseX();
592    /**
593     * Get mouse position Y
594     */
595    int GetMouseY();
596    /**
597     * Get mouse position XY
598     */
599    Vector2 GetMousePosition();
600    /**
601     * Get mouse delta between frames
602     */
603    Vector2 GetMouseDelta();
604    /**
605     * Set mouse position XY
606     */
607    void SetMousePosition(int x, int y);
608    /**
609     * Set mouse offset
610     */
611    void SetMouseOffset(int offsetX, int offsetY);
612    /**
613     * Set mouse scaling
614     */
615    void SetMouseScale(float scaleX, float scaleY);
616    /**
617     * Get mouse wheel movement Y
618     */
619    float GetMouseWheelMove();
620    /**
621     * Set mouse cursor
622     */
623    void SetMouseCursor(int cursor);
624    /**
625     * Get touch position X for touch point 0 (relative to screen size)
626     */
627    int GetTouchX();
628    /**
629     * Get touch position Y for touch point 0 (relative to screen size)
630     */
631    int GetTouchY();
632    /**
633     * Get touch position XY for a touch point index (relative to screen size)
634     */
635    Vector2 GetTouchPosition(int index);
636    /**
637     * Get touch point identifier for given index
638     */
639    int GetTouchPointId(int index);
640    /**
641     * Get number of touch points
642     */
643    int GetTouchPointCount();
644    /**
645     * Enable a set of gestures using flags
646     */
647    void SetGesturesEnabled(uint flags);
648    /**
649     * Check if a gesture have been detected
650     */
651    bool IsGestureDetected(int gesture);
652    /**
653     * Get latest detected gesture
654     */
655    int GetGestureDetected();
656    /**
657     * Get gesture hold time in milliseconds
658     */
659    float GetGestureHoldDuration();
660    /**
661     * Get gesture drag vector
662     */
663    Vector2 GetGestureDragVector();
664    /**
665     * Get gesture drag angle
666     */
667    float GetGestureDragAngle();
668    /**
669     * Get gesture pinch delta
670     */
671    Vector2 GetGesturePinchVector();
672    /**
673     * Get gesture pinch angle
674     */
675    float GetGesturePinchAngle();
676    /**
677     * Set camera mode (multiple camera modes available)
678     */
679    void SetCameraMode(Camera camera, int mode);
680    /**
681     * Update camera position for selected mode
682     */
683    void UpdateCamera(Camera* camera);
684    /**
685     * Set camera pan key to combine with mouse movement (free camera)
686     */
687    void SetCameraPanControl(int keyPan);
688    /**
689     * Set camera alt key to combine with mouse movement (free camera)
690     */
691    void SetCameraAltControl(int keyAlt);
692    /**
693     * Set camera smooth zoom key to combine with mouse (free camera)
694     */
695    void SetCameraSmoothZoomControl(int keySmoothZoom);
696    /**
697     * Set camera move controls (1st person and 3rd person cameras)
698     */
699    void SetCameraMoveControls(int keyFront, int keyBack, int keyRight, int keyLeft, int keyUp, int keyDown);
700    /**
701     * Set texture and rectangle to be used on shapes drawing
702     */
703    void SetShapesTexture(Texture2D texture, Rectangle source);
704    /**
705     * Draw a pixel
706     */
707    void DrawPixel(int posX, int posY, Color color);
708    /**
709     * Draw a pixel (Vector version)
710     */
711    void DrawPixelV(Vector2 position, Color color);
712    /**
713     * Draw a line
714     */
715    void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color);
716    /**
717     * Draw a line (Vector version)
718     */
719    void DrawLineV(Vector2 startPos, Vector2 endPos, Color color);
720    /**
721     * Draw a line defining thickness
722     */
723    void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color);
724    /**
725     * Draw a line using cubic-bezier curves in-out
726     */
727    void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color);
728    /**
729     * Draw line using quadratic bezier curves with a control point
730     */
731    void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color);
732    /**
733     * Draw line using cubic bezier curves with 2 control points
734     */
735    void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color);
736    /**
737     * Draw lines sequence
738     */
739    void DrawLineStrip(Vector2* points, int pointCount, Color color);
740    /**
741     * Draw a color-filled circle
742     */
743    void DrawCircle(int centerX, int centerY, float radius, Color color);
744    /**
745     * Draw a piece of a circle
746     */
747    void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color);
748    /**
749     * Draw circle sector outline
750     */
751    void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color);
752    /**
753     * Draw a gradient-filled circle
754     */
755    void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2);
756    /**
757     * Draw a color-filled circle (Vector version)
758     */
759    void DrawCircleV(Vector2 center, float radius, Color color);
760    /**
761     * Draw circle outline
762     */
763    void DrawCircleLines(int centerX, int centerY, float radius, Color color);
764    /**
765     * Draw ellipse
766     */
767    void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color);
768    /**
769     * Draw ellipse outline
770     */
771    void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color);
772    /**
773     * Draw ring
774     */
775    void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color);
776    /**
777     * Draw ring outline
778     */
779    void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color);
780    /**
781     * Draw a color-filled rectangle
782     */
783    void DrawRectangle(int posX, int posY, int width, int height, Color color);
784    /**
785     * Draw a color-filled rectangle (Vector version)
786     */
787    void DrawRectangleV(Vector2 position, Vector2 size, Color color);
788    /**
789     * Draw a color-filled rectangle
790     */
791    void DrawRectangleRec(Rectangle rec, Color color);
792    /**
793     * Draw a color-filled rectangle with pro parameters
794     */
795    void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color);
796    /**
797     * Draw a vertical-gradient-filled rectangle
798     */
799    void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2);
800    /**
801     * Draw a horizontal-gradient-filled rectangle
802     */
803    void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2);
804    /**
805     * Draw a gradient-filled rectangle with custom vertex colors
806     */
807    void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4);
808    /**
809     * Draw rectangle outline
810     */
811    void DrawRectangleLines(int posX, int posY, int width, int height, Color color);
812    /**
813     * Draw rectangle outline with extended parameters
814     */
815    void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color);
816    /**
817     * Draw rectangle with rounded edges
818     */
819    void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color);
820    /**
821     * Draw rectangle with rounded edges outline
822     */
823    void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color);
824    /**
825     * Draw a color-filled triangle (vertex in counter-clockwise order!)
826     */
827    void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color);
828    /**
829     * Draw triangle outline (vertex in counter-clockwise order!)
830     */
831    void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color);
832    /**
833     * Draw a triangle fan defined by points (first vertex is the center)
834     */
835    void DrawTriangleFan(Vector2* points, int pointCount, Color color);
836    /**
837     * Draw a triangle strip defined by points
838     */
839    void DrawTriangleStrip(Vector2* points, int pointCount, Color color);
840    /**
841     * Draw a regular polygon (Vector version)
842     */
843    void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color);
844    /**
845     * Draw a polygon outline of n sides
846     */
847    void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color);
848    /**
849     * Draw a polygon outline of n sides with extended parameters
850     */
851    void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color);
852    /**
853     * Check collision between two rectangles
854     */
855    bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2);
856    /**
857     * Check collision between two circles
858     */
859    bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2);
860    /**
861     * Check collision between circle and rectangle
862     */
863    bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec);
864    /**
865     * Check if point is inside rectangle
866     */
867    bool CheckCollisionPointRec(Vector2 point, Rectangle rec);
868    /**
869     * Check if point is inside circle
870     */
871    bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius);
872    /**
873     * Check if point is inside a triangle
874     */
875    bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3);
876    /**
877     * Check the collision between two lines defined by two points each, returns collision point by reference
878     */
879    bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2* collisionPoint);
880    /**
881     * Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold]
882     */
883    bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold);
884    /**
885     * Get collision rectangle for two rectangles collision
886     */
887    Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2);
888    /**
889     * Load image from file into CPU memory (RAM)
890     */
891    Image LoadImage(const(char)* fileName);
892    /**
893     * Load image from RAW file data
894     */
895    Image LoadImageRaw(const(char)* fileName, int width, int height, int format, int headerSize);
896    /**
897     * Load image sequence from file (frames appended to image.data)
898     */
899    Image LoadImageAnim(const(char)* fileName, int* frames);
900    /**
901     * Load image from memory buffer, fileType refers to extension: i.e. '.png'
902     */
903    Image LoadImageFromMemory(const(char)* fileType, const(ubyte)* fileData, int dataSize);
904    /**
905     * Load image from GPU texture data
906     */
907    Image LoadImageFromTexture(Texture2D texture);
908    /**
909     * Load image from screen buffer and (screenshot)
910     */
911    Image LoadImageFromScreen();
912    /**
913     * Unload image from CPU memory (RAM)
914     */
915    void UnloadImage(Image image);
916    /**
917     * Export image data to file, returns true on success
918     */
919    bool ExportImage(Image image, const(char)* fileName);
920    /**
921     * Export image as code file defining an array of bytes, returns true on success
922     */
923    bool ExportImageAsCode(Image image, const(char)* fileName);
924    /**
925     * Generate image: plain color
926     */
927    Image GenImageColor(int width, int height, Color color);
928    /**
929     * Generate image: vertical gradient
930     */
931    Image GenImageGradientV(int width, int height, Color top, Color bottom);
932    /**
933     * Generate image: horizontal gradient
934     */
935    Image GenImageGradientH(int width, int height, Color left, Color right);
936    /**
937     * Generate image: radial gradient
938     */
939    Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer);
940    /**
941     * Generate image: checked
942     */
943    Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2);
944    /**
945     * Generate image: white noise
946     */
947    Image GenImageWhiteNoise(int width, int height, float factor);
948    /**
949     * Generate image: cellular algorithm, bigger tileSize means bigger cells
950     */
951    Image GenImageCellular(int width, int height, int tileSize);
952    /**
953     * Create an image duplicate (useful for transformations)
954     */
955    Image ImageCopy(Image image);
956    /**
957     * Create an image from another image piece
958     */
959    Image ImageFromImage(Image image, Rectangle rec);
960    /**
961     * Create an image from text (default font)
962     */
963    Image ImageText(const(char)* text, int fontSize, Color color);
964    /**
965     * Create an image from text (custom sprite font)
966     */
967    Image ImageTextEx(Font font, const(char)* text, float fontSize, float spacing, Color tint);
968    /**
969     * Convert image data to desired format
970     */
971    void ImageFormat(Image* image, int newFormat);
972    /**
973     * Convert image to POT (power-of-two)
974     */
975    void ImageToPOT(Image* image, Color fill);
976    /**
977     * Crop an image to a defined rectangle
978     */
979    void ImageCrop(Image* image, Rectangle crop);
980    /**
981     * Crop image depending on alpha value
982     */
983    void ImageAlphaCrop(Image* image, float threshold);
984    /**
985     * Clear alpha channel to desired color
986     */
987    void ImageAlphaClear(Image* image, Color color, float threshold);
988    /**
989     * Apply alpha mask to image
990     */
991    void ImageAlphaMask(Image* image, Image alphaMask);
992    /**
993     * Premultiply alpha channel
994     */
995    void ImageAlphaPremultiply(Image* image);
996    /**
997     * Resize image (Bicubic scaling algorithm)
998     */
999    void ImageResize(Image* image, int newWidth, int newHeight);
1000    /**
1001     * Resize image (Nearest-Neighbor scaling algorithm)
1002     */
1003    void ImageResizeNN(Image* image, int newWidth, int newHeight);
1004    /**
1005     * Resize canvas and fill with color
1006     */
1007    void ImageResizeCanvas(Image* image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill);
1008    /**
1009     * Compute all mipmap levels for a provided image
1010     */
1011    void ImageMipmaps(Image* image);
1012    /**
1013     * Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
1014     */
1015    void ImageDither(Image* image, int rBpp, int gBpp, int bBpp, int aBpp);
1016    /**
1017     * Flip image vertically
1018     */
1019    void ImageFlipVertical(Image* image);
1020    /**
1021     * Flip image horizontally
1022     */
1023    void ImageFlipHorizontal(Image* image);
1024    /**
1025     * Rotate image clockwise 90deg
1026     */
1027    void ImageRotateCW(Image* image);
1028    /**
1029     * Rotate image counter-clockwise 90deg
1030     */
1031    void ImageRotateCCW(Image* image);
1032    /**
1033     * Modify image color: tint
1034     */
1035    void ImageColorTint(Image* image, Color color);
1036    /**
1037     * Modify image color: invert
1038     */
1039    void ImageColorInvert(Image* image);
1040    /**
1041     * Modify image color: grayscale
1042     */
1043    void ImageColorGrayscale(Image* image);
1044    /**
1045     * Modify image color: contrast (-100 to 100)
1046     */
1047    void ImageColorContrast(Image* image, float contrast);
1048    /**
1049     * Modify image color: brightness (-255 to 255)
1050     */
1051    void ImageColorBrightness(Image* image, int brightness);
1052    /**
1053     * Modify image color: replace color
1054     */
1055    void ImageColorReplace(Image* image, Color color, Color replace);
1056    /**
1057     * Load color data from image as a Color array (RGBA - 32bit)
1058     */
1059    Color* LoadImageColors(Image image);
1060    /**
1061     * Load colors palette from image as a Color array (RGBA - 32bit)
1062     */
1063    Color* LoadImagePalette(Image image, int maxPaletteSize, int* colorCount);
1064    /**
1065     * Unload color data loaded with LoadImageColors()
1066     */
1067    void UnloadImageColors(Color* colors);
1068    /**
1069     * Unload colors palette loaded with LoadImagePalette()
1070     */
1071    void UnloadImagePalette(Color* colors);
1072    /**
1073     * Get image alpha border rectangle
1074     */
1075    Rectangle GetImageAlphaBorder(Image image, float threshold);
1076    /**
1077     * Get image pixel color at (x, y) position
1078     */
1079    Color GetImageColor(Image image, int x, int y);
1080    /**
1081     * Clear image background with given color
1082     */
1083    void ImageClearBackground(Image* dst, Color color);
1084    /**
1085     * Draw pixel within an image
1086     */
1087    void ImageDrawPixel(Image* dst, int posX, int posY, Color color);
1088    /**
1089     * Draw pixel within an image (Vector version)
1090     */
1091    void ImageDrawPixelV(Image* dst, Vector2 position, Color color);
1092    /**
1093     * Draw line within an image
1094     */
1095    void ImageDrawLine(Image* dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color);
1096    /**
1097     * Draw line within an image (Vector version)
1098     */
1099    void ImageDrawLineV(Image* dst, Vector2 start, Vector2 end, Color color);
1100    /**
1101     * Draw circle within an image
1102     */
1103    void ImageDrawCircle(Image* dst, int centerX, int centerY, int radius, Color color);
1104    /**
1105     * Draw circle within an image (Vector version)
1106     */
1107    void ImageDrawCircleV(Image* dst, Vector2 center, int radius, Color color);
1108    /**
1109     * Draw rectangle within an image
1110     */
1111    void ImageDrawRectangle(Image* dst, int posX, int posY, int width, int height, Color color);
1112    /**
1113     * Draw rectangle within an image (Vector version)
1114     */
1115    void ImageDrawRectangleV(Image* dst, Vector2 position, Vector2 size, Color color);
1116    /**
1117     * Draw rectangle within an image
1118     */
1119    void ImageDrawRectangleRec(Image* dst, Rectangle rec, Color color);
1120    /**
1121     * Draw rectangle lines within an image
1122     */
1123    void ImageDrawRectangleLines(Image* dst, Rectangle rec, int thick, Color color);
1124    /**
1125     * Draw a source image within a destination image (tint applied to source)
1126     */
1127    void ImageDraw(Image* dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint);
1128    /**
1129     * Draw text (using default font) within an image (destination)
1130     */
1131    void ImageDrawText(Image* dst, const(char)* text, int posX, int posY, int fontSize, Color color);
1132    /**
1133     * Draw text (custom sprite font) within an image (destination)
1134     */
1135    void ImageDrawTextEx(Image* dst, Font font, const(char)* text, Vector2 position, float fontSize, float spacing, Color tint);
1136    /**
1137     * Load texture from file into GPU memory (VRAM)
1138     */
1139    Texture2D LoadTexture(const(char)* fileName);
1140    /**
1141     * Load texture from image data
1142     */
1143    Texture2D LoadTextureFromImage(Image image);
1144    /**
1145     * Load cubemap from image, multiple image cubemap layouts supported
1146     */
1147    TextureCubemap LoadTextureCubemap(Image image, int layout);
1148    /**
1149     * Load texture for rendering (framebuffer)
1150     */
1151    RenderTexture2D LoadRenderTexture(int width, int height);
1152    /**
1153     * Unload texture from GPU memory (VRAM)
1154     */
1155    void UnloadTexture(Texture2D texture);
1156    /**
1157     * Unload render texture from GPU memory (VRAM)
1158     */
1159    void UnloadRenderTexture(RenderTexture2D target);
1160    /**
1161     * Update GPU texture with new data
1162     */
1163    void UpdateTexture(Texture2D texture, const void* pixels);
1164    /**
1165     * Update GPU texture rectangle with new data
1166     */
1167    void UpdateTextureRec(Texture2D texture, Rectangle rec, const void* pixels);
1168    /**
1169     * Generate GPU mipmaps for a texture
1170     */
1171    void GenTextureMipmaps(Texture2D* texture);
1172    /**
1173     * Set texture scaling filter mode
1174     */
1175    void SetTextureFilter(Texture2D texture, int filter);
1176    /**
1177     * Set texture wrapping mode
1178     */
1179    void SetTextureWrap(Texture2D texture, int wrap);
1180    /**
1181     * Draw a Texture2D
1182     */
1183    void DrawTexture(Texture2D texture, int posX, int posY, Color tint);
1184    /**
1185     * Draw a Texture2D with position defined as Vector2
1186     */
1187    void DrawTextureV(Texture2D texture, Vector2 position, Color tint);
1188    /**
1189     * Draw a Texture2D with extended parameters
1190     */
1191    void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint);
1192    /**
1193     * Draw a part of a texture defined by a rectangle
1194     */
1195    void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint);
1196    /**
1197     * Draw texture quad with tiling and offset parameters
1198     */
1199    void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, Rectangle quad, Color tint);
1200    /**
1201     * Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest.
1202     */
1203    void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint);
1204    /**
1205     * Draw a part of a texture defined by a rectangle with 'pro' parameters
1206     */
1207    void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint);
1208    /**
1209     * Draws a texture (or part of it) that stretches or shrinks nicely
1210     */
1211    void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint);
1212    /**
1213     * Draw a textured polygon
1214     */
1215    void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2* points, Vector2* texcoords, int pointCount, Color tint);
1216    /**
1217     * Get color with alpha applied, alpha goes from 0.0f to 1.0f
1218     */
1219    Color Fade(Color color, float alpha);
1220    /**
1221     * Get hexadecimal value for a Color
1222     */
1223    int ColorToInt(Color color);
1224    /**
1225     * Get Color normalized as float [0..1]
1226     */
1227    Vector4 ColorNormalize(Color color);
1228    /**
1229     * Get Color from normalized values [0..1]
1230     */
1231    Color ColorFromNormalized(Vector4 normalized);
1232    /**
1233     * Get HSV values for a Color, hue [0..360], saturation/value [0..1]
1234     */
1235    Vector3 ColorToHSV(Color color);
1236    /**
1237     * Get a Color from HSV values, hue [0..360], saturation/value [0..1]
1238     */
1239    Color ColorFromHSV(float hue, float saturation, float value);
1240    /**
1241     * Get color with alpha applied, alpha goes from 0.0f to 1.0f
1242     */
1243    Color ColorAlpha(Color color, float alpha);
1244    /**
1245     * Get src alpha-blended into dst color with tint
1246     */
1247    Color ColorAlphaBlend(Color dst, Color src, Color tint);
1248    /**
1249     * Get Color structure from hexadecimal value
1250     */
1251    Color GetColor(uint hexValue);
1252    /**
1253     * Get Color from a source pixel pointer of certain format
1254     */
1255    Color GetPixelColor(void* srcPtr, int format);
1256    /**
1257     * Set color formatted into destination pixel pointer
1258     */
1259    void SetPixelColor(void* dstPtr, Color color, int format);
1260    /**
1261     * Get pixel data size in bytes for certain format
1262     */
1263    int GetPixelDataSize(int width, int height, int format);
1264    /**
1265     * Get the default Font
1266     */
1267    Font GetFontDefault();
1268    /**
1269     * Load font from file into GPU memory (VRAM)
1270     */
1271    Font LoadFont(const(char)* fileName);
1272    /**
1273     * Load font from file with extended parameters
1274     */
1275    Font LoadFontEx(const(char)* fileName, int fontSize, int* fontChars, int glyphCount);
1276    /**
1277     * Load font from Image (XNA style)
1278     */
1279    Font LoadFontFromImage(Image image, Color key, int firstChar);
1280    /**
1281     * Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
1282     */
1283    Font LoadFontFromMemory(const(char)* fileType, const(ubyte)* fileData, int dataSize, int fontSize, int* fontChars, int glyphCount);
1284    /**
1285     * Load font data for further use
1286     */
1287    GlyphInfo* LoadFontData(const(ubyte)* fileData, int dataSize, int fontSize, int* fontChars, int glyphCount, int type);
1288    /**
1289     * Generate image font atlas using chars info
1290     */
1291    Image GenImageFontAtlas(const GlyphInfo* chars, Rectangle** recs, int glyphCount, int fontSize, int padding, int packMethod);
1292    /**
1293     * Unload font chars info data (RAM)
1294     */
1295    void UnloadFontData(GlyphInfo* chars, int glyphCount);
1296    /**
1297     * Unload Font from GPU memory (VRAM)
1298     */
1299    void UnloadFont(Font font);
1300    /**
1301     * Draw current FPS
1302     */
1303    void DrawFPS(int posX, int posY);
1304    /**
1305     * Draw text (using default font)
1306     */
1307    void DrawText(const(char)* text, int posX, int posY, int fontSize, Color color);
1308    /**
1309     * Draw text using font and additional parameters
1310     */
1311    void DrawTextEx(Font font, const(char)* text, Vector2 position, float fontSize, float spacing, Color tint);
1312    /**
1313     * Draw text using Font and pro parameters (rotation)
1314     */
1315    void DrawTextPro(Font font, const(char)* text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint);
1316    /**
1317     * Draw one character (codepoint)
1318     */
1319    void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint);
1320    /**
1321     * Measure string width for default font
1322     */
1323    int MeasureText(const(char)* text, int fontSize);
1324    /**
1325     * Measure string size for Font
1326     */
1327    Vector2 MeasureTextEx(Font font, const(char)* text, float fontSize, float spacing);
1328    /**
1329     * Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found
1330     */
1331    int GetGlyphIndex(Font font, int codepoint);
1332    /**
1333     * Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found
1334     */
1335    GlyphInfo GetGlyphInfo(Font font, int codepoint);
1336    /**
1337     * Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found
1338     */
1339    Rectangle GetGlyphAtlasRec(Font font, int codepoint);
1340    /**
1341     * Load all codepoints from a UTF-8 text string, codepoints count returned by parameter
1342     */
1343    int* LoadCodepoints(const(char)* text, int* count);
1344    /**
1345     * Unload codepoints data from memory
1346     */
1347    void UnloadCodepoints(int* codepoints);
1348    /**
1349     * Get total number of codepoints in a UTF-8 encoded string
1350     */
1351    int GetCodepointCount(const(char)* text);
1352    /**
1353     * Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
1354     */
1355    int GetCodepoint(const(char)* text, int* bytesProcessed);
1356    /**
1357     * Encode one codepoint into UTF-8 byte array (array length returned as parameter)
1358     */
1359    const(char)* CodepointToUTF8(int codepoint, int* byteSize);
1360    /**
1361     * Encode text as codepoints array into UTF-8 text string (WARNING: memory must be freed!)
1362     */
1363    char* TextCodepointsToUTF8(int* codepoints, int length);
1364    /**
1365     * Copy one string to another, returns bytes copied
1366     */
1367    int TextCopy(char* dst, const(char)* src);
1368    /**
1369     * Check if two text string are equal
1370     */
1371    bool TextIsEqual(const(char)* text1, const(char)* text2);
1372    /**
1373     * Get text length, checks for ' 0' ending
1374     */
1375    uint TextLength(const(char)* text);
1376    /**
1377     * Get a piece of a text string
1378     */
1379    const(char)* TextSubtext(const(char)* text, int position, int length);
1380    /**
1381     * Replace text string (WARNING: memory must be freed!)
1382     */
1383    char* TextReplace(char* text, const(char)* replace, const(char)* by);
1384    /**
1385     * Insert text in a position (WARNING: memory must be freed!)
1386     */
1387    char* TextInsert(const(char)* text, const(char)* insert, int position);
1388    /**
1389     * Join text strings with delimiter
1390     */
1391    const(char)* TextJoin(const char** textList, int count, const(char)* delimiter);
1392    /**
1393     * Split text into multiple strings
1394     */
1395    const char** TextSplit(const(char)* text, char delimiter, int* count);
1396    /**
1397     * Append text at specific position and move cursor!
1398     */
1399    void TextAppend(char* text, const(char)* append, int* position);
1400    /**
1401     * Find first text occurrence within a string
1402     */
1403    int TextFindIndex(const(char)* text, const(char)* find);
1404    /**
1405     * Get upper case version of provided string
1406     */
1407    const(char)* TextToUpper(const(char)* text);
1408    /**
1409     * Get lower case version of provided string
1410     */
1411    const(char)* TextToLower(const(char)* text);
1412    /**
1413     * Get Pascal case notation version of provided string
1414     */
1415    const(char)* TextToPascal(const(char)* text);
1416    /**
1417     * Get integer value from text (negative values not supported)
1418     */
1419    int TextToInteger(const(char)* text);
1420    /**
1421     * Draw a line in 3D world space
1422     */
1423    void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color);
1424    /**
1425     * Draw a point in 3D space, actually a small line
1426     */
1427    void DrawPoint3D(Vector3 position, Color color);
1428    /**
1429     * Draw a circle in 3D world space
1430     */
1431    void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color);
1432    /**
1433     * Draw a color-filled triangle (vertex in counter-clockwise order!)
1434     */
1435    void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color);
1436    /**
1437     * Draw a triangle strip defined by points
1438     */
1439    void DrawTriangleStrip3D(Vector3* points, int pointCount, Color color);
1440    /**
1441     * Draw cube
1442     */
1443    void DrawCube(Vector3 position, float width, float height, float length, Color color);
1444    /**
1445     * Draw cube (Vector version)
1446     */
1447    void DrawCubeV(Vector3 position, Vector3 size, Color color);
1448    /**
1449     * Draw cube wires
1450     */
1451    void DrawCubeWires(Vector3 position, float width, float height, float length, Color color);
1452    /**
1453     * Draw cube wires (Vector version)
1454     */
1455    void DrawCubeWiresV(Vector3 position, Vector3 size, Color color);
1456    /**
1457     * Draw cube textured
1458     */
1459    void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color);
1460    /**
1461     * Draw cube with a region of a texture
1462     */
1463    void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, float width, float height, float length, Color color);
1464    /**
1465     * Draw sphere
1466     */
1467    void DrawSphere(Vector3 centerPos, float radius, Color color);
1468    /**
1469     * Draw sphere with extended parameters
1470     */
1471    void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color);
1472    /**
1473     * Draw sphere wires
1474     */
1475    void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color);
1476    /**
1477     * Draw a cylinder/cone
1478     */
1479    void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color);
1480    /**
1481     * Draw a cylinder with base at startPos and top at endPos
1482     */
1483    void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color);
1484    /**
1485     * Draw a cylinder/cone wires
1486     */
1487    void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color);
1488    /**
1489     * Draw a cylinder wires with base at startPos and top at endPos
1490     */
1491    void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color);
1492    /**
1493     * Draw a plane XZ
1494     */
1495    void DrawPlane(Vector3 centerPos, Vector2 size, Color color);
1496    /**
1497     * Draw a ray line
1498     */
1499    void DrawRay(Ray ray, Color color);
1500    /**
1501     * Draw a grid (centered at (0, 0, 0))
1502     */
1503    void DrawGrid(int slices, float spacing);
1504    /**
1505     * Load model from files (meshes and materials)
1506     */
1507    Model LoadModel(const(char)* fileName);
1508    /**
1509     * Load model from generated mesh (default material)
1510     */
1511    Model LoadModelFromMesh(Mesh mesh);
1512    /**
1513     * Unload model (including meshes) from memory (RAM and/or VRAM)
1514     */
1515    void UnloadModel(Model model);
1516    /**
1517     * Unload model (but not meshes) from memory (RAM and/or VRAM)
1518     */
1519    void UnloadModelKeepMeshes(Model model);
1520    /**
1521     * Compute model bounding box limits (considers all meshes)
1522     */
1523    BoundingBox GetModelBoundingBox(Model model);
1524    /**
1525     * Draw a model (with texture if set)
1526     */
1527    void DrawModel(Model model, Vector3 position, float scale, Color tint);
1528    /**
1529     * Draw a model with extended parameters
1530     */
1531    void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint);
1532    /**
1533     * Draw a model wires (with texture if set)
1534     */
1535    void DrawModelWires(Model model, Vector3 position, float scale, Color tint);
1536    /**
1537     * Draw a model wires (with texture if set) with extended parameters
1538     */
1539    void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint);
1540    /**
1541     * Draw bounding box (wires)
1542     */
1543    void DrawBoundingBox(BoundingBox box, Color color);
1544    /**
1545     * Draw a billboard texture
1546     */
1547    void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint);
1548    /**
1549     * Draw a billboard texture defined by source
1550     */
1551    void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint);
1552    /**
1553     * Draw a billboard texture defined by source and rotation
1554     */
1555    void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint);
1556    /**
1557     * Upload mesh vertex data in GPU and provide VAO/VBO ids
1558     */
1559    void UploadMesh(Mesh* mesh, bool dynamic);
1560    /**
1561     * Update mesh vertex data in GPU for a specific buffer index
1562     */
1563    void UpdateMeshBuffer(Mesh mesh, int index, void* data, int dataSize, int offset);
1564    /**
1565     * Unload mesh data from CPU and GPU
1566     */
1567    void UnloadMesh(Mesh mesh);
1568    /**
1569     * Draw a 3d mesh with material and transform
1570     */
1571    void DrawMesh(Mesh mesh, Material material, Matrix transform);
1572    /**
1573     * Draw multiple mesh instances with material and different transforms
1574     */
1575    void DrawMeshInstanced(Mesh mesh, Material material, Matrix* transforms, int instances);
1576    /**
1577     * Export mesh data to file, returns true on success
1578     */
1579    bool ExportMesh(Mesh mesh, const(char)* fileName);
1580    /**
1581     * Compute mesh bounding box limits
1582     */
1583    BoundingBox GetMeshBoundingBox(Mesh mesh);
1584    /**
1585     * Compute mesh tangents
1586     */
1587    void GenMeshTangents(Mesh* mesh);
1588    /**
1589     * Compute mesh binormals
1590     */
1591    void GenMeshBinormals(Mesh* mesh);
1592    /**
1593     * Generate polygonal mesh
1594     */
1595    Mesh GenMeshPoly(int sides, float radius);
1596    /**
1597     * Generate plane mesh (with subdivisions)
1598     */
1599    Mesh GenMeshPlane(float width, float length, int resX, int resZ);
1600    /**
1601     * Generate cuboid mesh
1602     */
1603    Mesh GenMeshCube(float width, float height, float length);
1604    /**
1605     * Generate sphere mesh (standard sphere)
1606     */
1607    Mesh GenMeshSphere(float radius, int rings, int slices);
1608    /**
1609     * Generate half-sphere mesh (no bottom cap)
1610     */
1611    Mesh GenMeshHemiSphere(float radius, int rings, int slices);
1612    /**
1613     * Generate cylinder mesh
1614     */
1615    Mesh GenMeshCylinder(float radius, float height, int slices);
1616    /**
1617     * Generate cone/pyramid mesh
1618     */
1619    Mesh GenMeshCone(float radius, float height, int slices);
1620    /**
1621     * Generate torus mesh
1622     */
1623    Mesh GenMeshTorus(float radius, float size, int radSeg, int sides);
1624    /**
1625     * Generate trefoil knot mesh
1626     */
1627    Mesh GenMeshKnot(float radius, float size, int radSeg, int sides);
1628    /**
1629     * Generate heightmap mesh from image data
1630     */
1631    Mesh GenMeshHeightmap(Image heightmap, Vector3 size);
1632    /**
1633     * Generate cubes-based map mesh from image data
1634     */
1635    Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize);
1636    /**
1637     * Load materials from model file
1638     */
1639    Material* LoadMaterials(const(char)* fileName, int* materialCount);
1640    /**
1641     * Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps)
1642     */
1643    Material LoadMaterialDefault();
1644    /**
1645     * Unload material from GPU memory (VRAM)
1646     */
1647    void UnloadMaterial(Material material);
1648    /**
1649     * Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...)
1650     */
1651    void SetMaterialTexture(Material* material, int mapType, Texture2D texture);
1652    /**
1653     * Set material for a mesh
1654     */
1655    void SetModelMeshMaterial(Model* model, int meshId, int materialId);
1656    /**
1657     * Load model animations from file
1658     */
1659    ModelAnimation* LoadModelAnimations(const(char)* fileName, uint* animCount);
1660    /**
1661     * Update model animation pose
1662     */
1663    void UpdateModelAnimation(Model model, ModelAnimation anim, int frame);
1664    /**
1665     * Unload animation data
1666     */
1667    void UnloadModelAnimation(ModelAnimation anim);
1668    /**
1669     * Unload animation array data
1670     */
1671    void UnloadModelAnimations(ModelAnimation* animations, uint count);
1672    /**
1673     * Check model animation skeleton match
1674     */
1675    bool IsModelAnimationValid(Model model, ModelAnimation anim);
1676    /**
1677     * Check collision between two spheres
1678     */
1679    bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2);
1680    /**
1681     * Check collision between two bounding boxes
1682     */
1683    bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2);
1684    /**
1685     * Check collision between box and sphere
1686     */
1687    bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius);
1688    /**
1689     * Get collision info between ray and sphere
1690     */
1691    RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius);
1692    /**
1693     * Get collision info between ray and box
1694     */
1695    RayCollision GetRayCollisionBox(Ray ray, BoundingBox box);
1696    /**
1697     * Get collision info between ray and model
1698     */
1699    RayCollision GetRayCollisionModel(Ray ray, Model model);
1700    /**
1701     * Get collision info between ray and mesh
1702     */
1703    RayCollision GetRayCollisionMesh(Ray ray, Mesh mesh, Matrix transform);
1704    /**
1705     * Get collision info between ray and triangle
1706     */
1707    RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3);
1708    /**
1709     * Get collision info between ray and quad
1710     */
1711    RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4);
1712    /**
1713     * Initialize audio device and context
1714     */
1715    void InitAudioDevice();
1716    /**
1717     * Close the audio device and context
1718     */
1719    void CloseAudioDevice();
1720    /**
1721     * Check if audio device has been initialized successfully
1722     */
1723    bool IsAudioDeviceReady();
1724    /**
1725     * Set master volume (listener)
1726     */
1727    void SetMasterVolume(float volume);
1728    /**
1729     * Load wave data from file
1730     */
1731    Wave LoadWave(const(char)* fileName);
1732    /**
1733     * Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
1734     */
1735    Wave LoadWaveFromMemory(const(char)* fileType, const(ubyte)* fileData, int dataSize);
1736    /**
1737     * Load sound from file
1738     */
1739    Sound LoadSound(const(char)* fileName);
1740    /**
1741     * Load sound from wave data
1742     */
1743    Sound LoadSoundFromWave(Wave wave);
1744    /**
1745     * Update sound buffer with new data
1746     */
1747    void UpdateSound(Sound sound, const void* data, int sampleCount);
1748    /**
1749     * Unload wave data
1750     */
1751    void UnloadWave(Wave wave);
1752    /**
1753     * Unload sound
1754     */
1755    void UnloadSound(Sound sound);
1756    /**
1757     * Export wave data to file, returns true on success
1758     */
1759    bool ExportWave(Wave wave, const(char)* fileName);
1760    /**
1761     * Export wave sample data to code (.h), returns true on success
1762     */
1763    bool ExportWaveAsCode(Wave wave, const(char)* fileName);
1764    /**
1765     * Play a sound
1766     */
1767    void PlaySound(Sound sound);
1768    /**
1769     * Stop playing a sound
1770     */
1771    void StopSound(Sound sound);
1772    /**
1773     * Pause a sound
1774     */
1775    void PauseSound(Sound sound);
1776    /**
1777     * Resume a paused sound
1778     */
1779    void ResumeSound(Sound sound);
1780    /**
1781     * Play a sound (using multichannel buffer pool)
1782     */
1783    void PlaySoundMulti(Sound sound);
1784    /**
1785     * Stop any sound playing (using multichannel buffer pool)
1786     */
1787    void StopSoundMulti();
1788    /**
1789     * Get number of sounds playing in the multichannel
1790     */
1791    int GetSoundsPlaying();
1792    /**
1793     * Check if a sound is currently playing
1794     */
1795    bool IsSoundPlaying(Sound sound);
1796    /**
1797     * Set volume for a sound (1.0 is max level)
1798     */
1799    void SetSoundVolume(Sound sound, float volume);
1800    /**
1801     * Set pitch for a sound (1.0 is base level)
1802     */
1803    void SetSoundPitch(Sound sound, float pitch);
1804    /**
1805     * Convert wave data to desired format
1806     */
1807    void WaveFormat(Wave* wave, int sampleRate, int sampleSize, int channels);
1808    /**
1809     * Copy a wave to a new wave
1810     */
1811    Wave WaveCopy(Wave wave);
1812    /**
1813     * Crop a wave to defined samples range
1814     */
1815    void WaveCrop(Wave* wave, int initSample, int finalSample);
1816    /**
1817     * Load samples data from wave as a floats array
1818     */
1819    float* LoadWaveSamples(Wave wave);
1820    /**
1821     * Unload samples data loaded with LoadWaveSamples()
1822     */
1823    void UnloadWaveSamples(float* samples);
1824    /**
1825     * Load music stream from file
1826     */
1827    Music LoadMusicStream(const(char)* fileName);
1828    /**
1829     * Load music stream from data
1830     */
1831    Music LoadMusicStreamFromMemory(const(char)* fileType, ubyte* data, int dataSize);
1832    /**
1833     * Unload music stream
1834     */
1835    void UnloadMusicStream(Music music);
1836    /**
1837     * Start music playing
1838     */
1839    void PlayMusicStream(Music music);
1840    /**
1841     * Check if music is playing
1842     */
1843    bool IsMusicStreamPlaying(Music music);
1844    /**
1845     * Updates buffers for music streaming
1846     */
1847    void UpdateMusicStream(Music music);
1848    /**
1849     * Stop music playing
1850     */
1851    void StopMusicStream(Music music);
1852    /**
1853     * Pause music playing
1854     */
1855    void PauseMusicStream(Music music);
1856    /**
1857     * Resume playing paused music
1858     */
1859    void ResumeMusicStream(Music music);
1860    /**
1861     * Seek music to a position (in seconds)
1862     */
1863    void SeekMusicStream(Music music, float position);
1864    /**
1865     * Set volume for music (1.0 is max level)
1866     */
1867    void SetMusicVolume(Music music, float volume);
1868    /**
1869     * Set pitch for a music (1.0 is base level)
1870     */
1871    void SetMusicPitch(Music music, float pitch);
1872    /**
1873     * Get music time length (in seconds)
1874     */
1875    float GetMusicTimeLength(Music music);
1876    /**
1877     * Get current music time played (in seconds)
1878     */
1879    float GetMusicTimePlayed(Music music);
1880    /**
1881     * Load audio stream (to stream raw audio pcm data)
1882     */
1883    AudioStream LoadAudioStream(uint sampleRate, uint sampleSize, uint channels);
1884    /**
1885     * Unload audio stream and free memory
1886     */
1887    void UnloadAudioStream(AudioStream stream);
1888    /**
1889     * Update audio stream buffers with data
1890     */
1891    void UpdateAudioStream(AudioStream stream, const void* data, int frameCount);
1892    /**
1893     * Check if any audio stream buffers requires refill
1894     */
1895    bool IsAudioStreamProcessed(AudioStream stream);
1896    /**
1897     * Play audio stream
1898     */
1899    void PlayAudioStream(AudioStream stream);
1900    /**
1901     * Pause audio stream
1902     */
1903    void PauseAudioStream(AudioStream stream);
1904    /**
1905     * Resume audio stream
1906     */
1907    void ResumeAudioStream(AudioStream stream);
1908    /**
1909     * Check if audio stream is playing
1910     */
1911    bool IsAudioStreamPlaying(AudioStream stream);
1912    /**
1913     * Stop audio stream
1914     */
1915    void StopAudioStream(AudioStream stream);
1916    /**
1917     * Set volume for audio stream (1.0 is max level)
1918     */
1919    void SetAudioStreamVolume(AudioStream stream, float volume);
1920    /**
1921     * Set pitch for audio stream (1.0 is base level)
1922     */
1923    void SetAudioStreamPitch(AudioStream stream, float pitch);
1924    /**
1925     * Default size for new audio streams
1926     */
1927    void SetAudioStreamBufferSizeDefault(int size);
1928 }
1929