//--- CORE ---------------------------------------------------------------------------------------- #define GRAPHICS_API_OPENGL_11 // #define RLGL_IMPLEMENTATION #include "raylib.h" #include "rlgl.h" #include "raymath.h" // Enable vertex state pointer void rlEnableStatePointer(int vertexAttribType, void *buffer); // Disable vertex state pointer void rlDisableStatePointer(int vertexAttribType);// Initialize window and OpenGL context void mInitWindow(int width, int height, const char * title); // Close window and unload OpenGL context void mCloseWindow(void); // Check if application should close (KEY_ESCAPE pressed or windows close icon clicked) bool mWindowShouldClose(void); // Check if window has been initialized successfully bool mIsWindowReady(void); // Check if window is currently fullscreen bool mIsWindowFullscreen(void); // Check if window is currently hidden (only PLATFORM_DESKTOP) bool mIsWindowHidden(void); // Check if window is currently minimized (only PLATFORM_DESKTOP) bool mIsWindowMinimized(void); // Check if window is currently maximized (only PLATFORM_DESKTOP) bool mIsWindowMaximized(void); // Check if window is currently focused (only PLATFORM_DESKTOP) bool mIsWindowFocused(void); // Check if window has been resized last frame bool mIsWindowResized(void); // Check if one specific window flag is enabled bool mIsWindowState(unsigned int flag); // Set window configuration state using flags (only PLATFORM_DESKTOP) void mSetWindowState(unsigned int flags); // Clear window configuration state flags void mClearWindowState(unsigned int flags); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) void mToggleFullscreen(void); // Toggle window state: borderless windowed (only PLATFORM_DESKTOP) void mToggleBorderlessWindowed(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) void mMaximizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP) void mMinimizeWindow(void); // Set window state: not minimized/maximized (only PLATFORM_DESKTOP) void mRestoreWindow(void); // Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP) void mSetWindowIcon(Image *image); // Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) void mSetWindowIcons(Image * images, int count); // Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB) void mSetWindowTitle(const char * title); // Set window position on screen (only PLATFORM_DESKTOP) void mSetWindowPosition(int x, int y); // Set monitor for the current window void mSetWindowMonitor(int monitor); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) void mSetWindowMinSize(int width, int height); // Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE) void mSetWindowMaxSize(int width, int height); // Set window dimensions void mSetWindowSize(int width, int height); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) void mSetWindowOpacity(float opacity); // Set window focused (only PLATFORM_DESKTOP) void mSetWindowFocused(void); // Get current screen width int mGetScreenWidth(void); // Get current screen height int mGetScreenHeight(void); // Get current render width (it considers HiDPI) int mGetRenderWidth(void); // Get current render height (it considers HiDPI) int mGetRenderHeight(void); // Get number of connected monitors int mGetMonitorCount(void); // Get current connected monitor int mGetCurrentMonitor(void); // Get specified monitor position void mGetMonitorPosition(Vector2 *out, int monitor); // Get specified monitor width (current video mode used by monitor) int mGetMonitorWidth(int monitor); // Get specified monitor height (current video mode used by monitor) int mGetMonitorHeight(int monitor); // Get specified monitor physical width in millimetres int mGetMonitorPhysicalWidth(int monitor); // Get specified monitor physical height in millimetres int mGetMonitorPhysicalHeight(int monitor); // Get specified monitor refresh rate int mGetMonitorRefreshRate(int monitor); // Get window position XY on monitor void mGetWindowPosition(Vector2 *out); // Get window scale DPI factor void mGetWindowScaleDPI(Vector2 *out); // Get the human-readable, UTF-8 encoded name of the specified monitor const char * mGetMonitorName(int monitor); // Set clipboard text content void mSetClipboardText(const char * text); // Get clipboard text content const char * mGetClipboardText(void); // Enable waiting for events on EndDrawing(), no automatic event polling void mEnableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling void mDisableEventWaiting(void); // Shows cursor void mShowCursor(void); // Hides cursor void mHideCursor(void); // Check if cursor is not visible bool mIsCursorHidden(void); // Enables cursor (unlock cursor) void mEnableCursor(void); // Disables cursor (lock cursor) void mDisableCursor(void); // Check if cursor is on the screen bool mIsCursorOnScreen(void); // Set background color (framebuffer clear color) void mClearBackground(Color *color); // Setup canvas (framebuffer) to start drawing void mBeginDrawing(void); // End canvas drawing and swap buffers (double buffering) void mEndDrawing(void); // Begin 2D mode with custom camera (2D) void mBeginMode2D(Camera2D *camera); // Ends 2D mode with custom camera void mEndMode2D(void); // Begin 3D mode with custom camera (3D) void mBeginMode3D(Camera3D *camera); // Ends 3D mode and returns to default 2D orthographic mode void mEndMode3D(void); // Begin drawing to render texture void mBeginTextureMode(RenderTexture2D *target); // Ends drawing to render texture void mEndTextureMode(void); // Begin custom shader drawing void mBeginShaderMode(Shader *shader); // End custom shader drawing (use default shader) void mEndShaderMode(void); // Begin blending mode (alpha, additive, multiplied, subtract, custom) void mBeginBlendMode(int mode); // End blending mode (reset to default: alpha blending) void mEndBlendMode(void); // Begin scissor mode (define screen area for following drawing) void mBeginScissorMode(int x, int y, int width, int height); // End scissor mode void mEndScissorMode(void); // Begin stereo rendering (requires VR simulator) void mBeginVrStereoMode(VrStereoConfig *config); // End stereo rendering (requires VR simulator) void mEndVrStereoMode(void); // Load VR stereo config for VR simulator device parameters void mLoadVrStereoConfig(VrStereoConfig *out, VrDeviceInfo *device); // Unload VR stereo config void mUnloadVrStereoConfig(VrStereoConfig *config); // Load shader from files and bind default locations void mLoadShader(Shader *out, const char * vsFileName, const char * fsFileName); // Load shader from code strings and bind default locations void mLoadShaderFromMemory(Shader *out, const char * vsCode, const char * fsCode); // Check if a shader is ready bool mIsShaderReady(Shader *shader); // Get shader uniform location int mGetShaderLocation(Shader *shader, const char * uniformName); // Get shader attribute location int mGetShaderLocationAttrib(Shader *shader, const char * attribName); // Set shader uniform value void mSetShaderValue(Shader *shader, int locIndex, const void * value, int uniformType); // Set shader uniform value vector void mSetShaderValueV(Shader *shader, int locIndex, const void * value, int uniformType, int count); // Set shader uniform value (matrix 4x4) void mSetShaderValueMatrix(Shader *shader, int locIndex, Matrix *mat); // Set shader uniform value for texture (sampler2d) void mSetShaderValueTexture(Shader *shader, int locIndex, Texture2D *texture); // Unload shader from GPU memory (VRAM) void mUnloadShader(Shader *shader); // Get a ray trace from mouse position void mGetMouseRay(Ray *out, Vector2 *mousePosition, Camera3D *camera); // Get camera transform matrix (view matrix) void mGetCameraMatrix(Matrix *out, Camera3D *camera); // Get camera 2d transform matrix void mGetCameraMatrix2D(Matrix *out, Camera2D *camera); // Get the screen space position for a 3d world space position void mGetWorldToScreen(Vector2 *out, Vector3 *position, Camera3D *camera); // Get the world space position for a 2d camera screen space position void mGetScreenToWorld2D(Vector2 *out, Vector2 *position, Camera2D *camera); // Get size position for a 3d world space position void mGetWorldToScreenEx(Vector2 *out, Vector3 *position, Camera3D *camera, int width, int height); // Get the screen space position for a 2d camera world space position void mGetWorldToScreen2D(Vector2 *out, Vector2 *position, Camera2D *camera); // Set target FPS (maximum) void mSetTargetFPS(int fps); // Get time in seconds for last frame drawn (delta time) float mGetFrameTime(void); // Get elapsed time in seconds since InitWindow() double mGetTime(void); // Get current FPS int mGetFPS(void); // Swap back buffer with front buffer (screen drawing) void mSwapScreenBuffer(void); // Register all input events void mPollInputEvents(void); // Wait for some time (halt program execution) void mWaitTime(double seconds); // Set the seed for the random number generator void mSetRandomSeed(unsigned int seed); // Get a random value between min and max (both included) int mGetRandomValue(int min, int max); // Load random values sequence, no values repeated int * mLoadRandomSequence(unsigned int count, int min, int max); // Unload random values sequence void mUnloadRandomSequence(int * sequence); // Takes a screenshot of current screen (filename extension defines format) void mTakeScreenshot(const char * fileName); // Open URL with default system browser (if available) void mOpenURL(const char * url); // Set the current threshold (minimum) log level void mSetTraceLogLevel(int logLevel); // Set custom file binary data loader void mSetLoadFileDataCallback(LoadFileDataCallback callback); // Set custom file binary data saver void mSetSaveFileDataCallback(SaveFileDataCallback callback); // Set custom file text data loader void mSetLoadFileTextCallback(LoadFileTextCallback callback); // Set custom file text data saver void mSetSaveFileTextCallback(SaveFileTextCallback callback); // Save data to file from byte array (write), returns true on success bool mSaveFileData(const char * fileName, void * data, int dataSize); // Export data to code (.h), returns true on success bool mExportDataAsCode(const unsigned char * data, int dataSize, const char * fileName); // Load text data from file (read), returns a '\0' terminated string char * mLoadFileText(const char * fileName); // Unload file text data allocated by LoadFileText() void mUnloadFileText(char * text); // Save text data to file (write), string must be '\0' terminated, returns true on success bool mSaveFileText(const char * fileName, char * text); // Check if file exists bool mFileExists(const char * fileName); // Check if a directory path exists bool mDirectoryExists(const char * dirPath); // Check file extension (including point: .png, .wav) bool mIsFileExtension(const char * fileName, const char * ext); // Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) int mGetFileLength(const char * fileName); // Get pointer to extension for a filename string (includes dot: '.png') const char * mGetFileExtension(const char * fileName); // Get pointer to filename for a path string const char * mGetFileName(const char * filePath); // Get filename string without extension (uses static string) const char * mGetFileNameWithoutExt(const char * filePath); // Get full path for a given fileName with path (uses static string) const char * mGetDirectoryPath(const char * filePath); // Get previous directory path for a given path (uses static string) const char * mGetPrevDirectoryPath(const char * dirPath); // Get current working directory (uses static string) const char * mGetWorkingDirectory(void); // Get the directory of the running application (uses static string) const char * mGetApplicationDirectory(void); // Change working directory, return true on success bool mChangeDirectory(const char * dir); // Check if a given path is a file or a directory bool mIsPathFile(const char * path); // Load directory filepaths void mLoadDirectoryFiles(FilePathList *out, const char * dirPath); // Load directory filepaths with extension filtering and recursive directory scan void mLoadDirectoryFilesEx(FilePathList *out, const char * basePath, const char * filter, bool scanSubdirs); // Unload filepaths void mUnloadDirectoryFiles(FilePathList *files); // Check if a file has been dropped into window bool mIsFileDropped(void); // Load dropped filepaths void mLoadDroppedFiles(FilePathList *out); // Unload dropped filepaths void mUnloadDroppedFiles(FilePathList *files); // Get file modification time (last write time) long mGetFileModTime(const char * fileName); // Compress data (DEFLATE algorithm), memory must be MemFree() unsigned char * mCompressData(const unsigned char * data, int dataSize, int * compDataSize); // Decompress data (DEFLATE algorithm), memory must be MemFree() unsigned char * mDecompressData(const unsigned char * compData, int compDataSize, int * dataSize); // Encode data to Base64 string, memory must be MemFree() char * mEncodeDataBase64(const unsigned char * data, int dataSize, int * outputSize); // Decode Base64 string data, memory must be MemFree() unsigned char * mDecodeDataBase64(const unsigned char * data, int * outputSize); // Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS void mLoadAutomationEventList(AutomationEventList *out, const char * fileName); // Unload automation events list from file void mUnloadAutomationEventList(AutomationEventList *list); // Export automation events list as text file bool mExportAutomationEventList(AutomationEventList *list, const char * fileName); // Set automation event list to record to void mSetAutomationEventList(AutomationEventList * list); // Set automation event internal base frame to start recording void mSetAutomationEventBaseFrame(int frame); // Start recording automation events (AutomationEventList must be set) void mStartAutomationEventRecording(void); // Stop recording automation events void mStopAutomationEventRecording(void); // Play a recorded automation event void mPlayAutomationEvent(AutomationEvent *event); // Check if a key has been pressed once bool mIsKeyPressed(int key); // Check if a key has been pressed again (Only PLATFORM_DESKTOP) bool mIsKeyPressedRepeat(int key); // Check if a key is being pressed bool mIsKeyDown(int key); // Check if a key has been released once bool mIsKeyReleased(int key); // Check if a key is NOT being pressed bool mIsKeyUp(int key); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty int mGetKeyPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty int mGetCharPressed(void); // Set a custom key to exit program (default is ESC) void mSetExitKey(int key); // Check if a gamepad is available bool mIsGamepadAvailable(int gamepad); // Get gamepad internal name id const char * mGetGamepadName(int gamepad); // Check if a gamepad button has been pressed once bool mIsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button is being pressed bool mIsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button has been released once bool mIsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button is NOT being pressed bool mIsGamepadButtonUp(int gamepad, int button); // Get gamepad axis count for a gamepad int mGetGamepadAxisCount(int gamepad); // Get axis movement value for a gamepad axis float mGetGamepadAxisMovement(int gamepad, int axis); // Set internal gamepad mappings (SDL_GameControllerDB) int mSetGamepadMappings(const char * mappings); // Check if a mouse button has been pressed once bool mIsMouseButtonPressed(int button); // Check if a mouse button is being pressed bool mIsMouseButtonDown(int button); // Check if a mouse button has been released once bool mIsMouseButtonReleased(int button); // Check if a mouse button is NOT being pressed bool mIsMouseButtonUp(int button); // Get mouse position X int mGetMouseX(void); // Get mouse position Y int mGetMouseY(void); // Get mouse position XY void mGetMousePosition(Vector2 *out); // Get mouse delta between frames void mGetMouseDelta(Vector2 *out); // Set mouse position XY void mSetMousePosition(int x, int y); // Set mouse offset void mSetMouseOffset(int offsetX, int offsetY); // Set mouse scaling void mSetMouseScale(float scaleX, float scaleY); // Get mouse wheel movement for X or Y, whichever is larger float mGetMouseWheelMove(void); // Get mouse wheel movement for both X and Y void mGetMouseWheelMoveV(Vector2 *out); // Set mouse cursor void mSetMouseCursor(int cursor); // Get touch position X for touch point 0 (relative to screen size) int mGetTouchX(void); // Get touch position Y for touch point 0 (relative to screen size) int mGetTouchY(void); // Get touch position XY for a touch point index (relative to screen size) void mGetTouchPosition(Vector2 *out, int index); // Get touch point identifier for given index int mGetTouchPointId(int index); // Get number of touch points int mGetTouchPointCount(void); // Enable a set of gestures using flags void mSetGesturesEnabled(unsigned int flags); // Check if a gesture have been detected bool mIsGestureDetected(unsigned int gesture); // Get latest detected gesture int mGetGestureDetected(void); // Get gesture hold time in milliseconds float mGetGestureHoldDuration(void); // Get gesture drag vector void mGetGestureDragVector(Vector2 *out); // Get gesture drag angle float mGetGestureDragAngle(void); // Get gesture pinch delta void mGetGesturePinchVector(Vector2 *out); // Get gesture pinch angle float mGetGesturePinchAngle(void); // Update camera position for selected mode void mUpdateCamera(Camera * camera, int mode); // Update camera movement/rotation void mUpdateCameraPro(Camera * camera, Vector3 *movement, Vector3 *rotation, float zoom); // Set texture and rectangle to be used on shapes drawing void mSetShapesTexture(Texture2D *texture, Rectangle *source); // Get texture that is used for shapes drawing void mGetShapesTexture(Texture2D *out); // Get texture source rectangle that is used for shapes drawing void mGetShapesTextureRectangle(Rectangle *out); // Draw a pixel void mDrawPixel(int posX, int posY, Color *color); // Draw a pixel (Vector version) void mDrawPixelV(Vector2 *position, Color *color); // Draw a line void mDrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color *color); // Draw a line (using gl lines) void mDrawLineV(Vector2 *startPos, Vector2 *endPos, Color *color); // Draw a line (using triangles/quads) void mDrawLineEx(Vector2 *startPos, Vector2 *endPos, float thick, Color *color); // Draw lines sequence (using gl lines) void mDrawLineStrip(Vector2 * points, int pointCount, Color *color); // Draw line segment cubic-bezier in-out interpolation void mDrawLineBezier(Vector2 *startPos, Vector2 *endPos, float thick, Color *color); // Draw a color-filled circle void mDrawCircle(int centerX, int centerY, float radius, Color *color); // Draw a piece of a circle void mDrawCircleSector(Vector2 *center, float radius, float startAngle, float endAngle, int segments, Color *color); // Draw circle sector outline void mDrawCircleSectorLines(Vector2 *center, float radius, float startAngle, float endAngle, int segments, Color *color); // Draw a gradient-filled circle void mDrawCircleGradient(int centerX, int centerY, float radius, Color *color1, Color *color2); // Draw a color-filled circle (Vector version) void mDrawCircleV(Vector2 *center, float radius, Color *color); // Draw circle outline void mDrawCircleLines(int centerX, int centerY, float radius, Color *color); // Draw circle outline (Vector version) void mDrawCircleLinesV(Vector2 *center, float radius, Color *color); // Draw ellipse void mDrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color *color); // Draw ellipse outline void mDrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color *color); // Draw ring void mDrawRing(Vector2 *center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color *color); // Draw ring outline void mDrawRingLines(Vector2 *center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color *color); // Draw a color-filled rectangle void mDrawRectangle(int posX, int posY, int width, int height, Color *color); // Draw a color-filled rectangle (Vector version) void mDrawRectangleV(Vector2 *position, Vector2 *size, Color *color); // Draw a color-filled rectangle void mDrawRectangleRec(Rectangle *rec, Color *color); // Draw a color-filled rectangle with pro parameters void mDrawRectanglePro(Rectangle *rec, Vector2 *origin, float rotation, Color *color); // Draw a vertical-gradient-filled rectangle void mDrawRectangleGradientV(int posX, int posY, int width, int height, Color *color1, Color *color2); // Draw a horizontal-gradient-filled rectangle void mDrawRectangleGradientH(int posX, int posY, int width, int height, Color *color1, Color *color2); // Draw a gradient-filled rectangle with custom vertex colors void mDrawRectangleGradientEx(Rectangle *rec, Color *col1, Color *col2, Color *col3, Color *col4); // Draw rectangle outline void mDrawRectangleLines(int posX, int posY, int width, int height, Color *color); // Draw rectangle outline with extended parameters void mDrawRectangleLinesEx(Rectangle *rec, float lineThick, Color *color); // Draw rectangle with rounded edges void mDrawRectangleRounded(Rectangle *rec, float roundness, int segments, Color *color); // Draw rectangle with rounded edges outline void mDrawRectangleRoundedLines(Rectangle *rec, float roundness, int segments, float lineThick, Color *color); // Draw a color-filled triangle (vertex in counter-clockwise order!) void mDrawTriangle(Vector2 *v1, Vector2 *v2, Vector2 *v3, Color *color); // Draw triangle outline (vertex in counter-clockwise order!) void mDrawTriangleLines(Vector2 *v1, Vector2 *v2, Vector2 *v3, Color *color); // Draw a triangle fan defined by points (first vertex is the center) void mDrawTriangleFan(Vector2 * points, int pointCount, Color *color); // Draw a triangle strip defined by points void mDrawTriangleStrip(Vector2 * points, int pointCount, Color *color); // Draw a regular polygon (Vector version) void mDrawPoly(Vector2 *center, int sides, float radius, float rotation, Color *color); // Draw a polygon outline of n sides void mDrawPolyLines(Vector2 *center, int sides, float radius, float rotation, Color *color); // Draw a polygon outline of n sides with extended parameters void mDrawPolyLinesEx(Vector2 *center, int sides, float radius, float rotation, float lineThick, Color *color); // Draw spline: Linear, minimum 2 points void mDrawSplineLinear(Vector2 * points, int pointCount, float thick, Color *color); // Draw spline: B-Spline, minimum 4 points void mDrawSplineBasis(Vector2 * points, int pointCount, float thick, Color *color); // Draw spline: Catmull-Rom, minimum 4 points void mDrawSplineCatmullRom(Vector2 * points, int pointCount, float thick, Color *color); // Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...] void mDrawSplineBezierQuadratic(Vector2 * points, int pointCount, float thick, Color *color); // Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...] void mDrawSplineBezierCubic(Vector2 * points, int pointCount, float thick, Color *color); // Draw spline segment: Linear, 2 points void mDrawSplineSegmentLinear(Vector2 *p1, Vector2 *p2, float thick, Color *color); // Draw spline segment: B-Spline, 4 points void mDrawSplineSegmentBasis(Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float thick, Color *color); // Draw spline segment: Catmull-Rom, 4 points void mDrawSplineSegmentCatmullRom(Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float thick, Color *color); // Draw spline segment: Quadratic Bezier, 2 points, 1 control point void mDrawSplineSegmentBezierQuadratic(Vector2 *p1, Vector2 *c2, Vector2 *p3, float thick, Color *color); // Draw spline segment: Cubic Bezier, 2 points, 2 control points void mDrawSplineSegmentBezierCubic(Vector2 *p1, Vector2 *c2, Vector2 *c3, Vector2 *p4, float thick, Color *color); // Get (evaluate) spline point: Linear void mGetSplinePointLinear(Vector2 *out, Vector2 *startPos, Vector2 *endPos, float t); // Get (evaluate) spline point: B-Spline void mGetSplinePointBasis(Vector2 *out, Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float t); // Get (evaluate) spline point: Catmull-Rom void mGetSplinePointCatmullRom(Vector2 *out, Vector2 *p1, Vector2 *p2, Vector2 *p3, Vector2 *p4, float t); // Get (evaluate) spline point: Quadratic Bezier void mGetSplinePointBezierQuad(Vector2 *out, Vector2 *p1, Vector2 *c2, Vector2 *p3, float t); // Get (evaluate) spline point: Cubic Bezier void mGetSplinePointBezierCubic(Vector2 *out, Vector2 *p1, Vector2 *c2, Vector2 *c3, Vector2 *p4, float t); // Check collision between two rectangles bool mCheckCollisionRecs(Rectangle *rec1, Rectangle *rec2); // Check collision between two circles bool mCheckCollisionCircles(Vector2 *center1, float radius1, Vector2 *center2, float radius2); // Check collision between circle and rectangle bool mCheckCollisionCircleRec(Vector2 *center, float radius, Rectangle *rec); // Check if point is inside rectangle bool mCheckCollisionPointRec(Vector2 *point, Rectangle *rec); // Check if point is inside circle bool mCheckCollisionPointCircle(Vector2 *point, Vector2 *center, float radius); // Check if point is inside a triangle bool mCheckCollisionPointTriangle(Vector2 *point, Vector2 *p1, Vector2 *p2, Vector2 *p3); // Check if point is within a polygon described by array of vertices bool mCheckCollisionPointPoly(Vector2 *point, Vector2 * points, int pointCount); // Check the collision between two lines defined by two points each, returns collision point by reference bool mCheckCollisionLines(Vector2 *startPos1, Vector2 *endPos1, Vector2 *startPos2, Vector2 *endPos2, Vector2 * collisionPoint); // Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] bool mCheckCollisionPointLine(Vector2 *point, Vector2 *p1, Vector2 *p2, int threshold); // Get collision rectangle for two rectangles collision void mGetCollisionRec(Rectangle *out, Rectangle *rec1, Rectangle *rec2); // Load image from file into CPU memory (RAM) void mLoadImage(Image *out, const char * fileName); // Load image from RAW file data void mLoadImageRaw(Image *out, const char * fileName, int width, int height, int format, int headerSize); // Load image from SVG file data or string with specified size void mLoadImageSvg(Image *out, const char * fileNameOrString, int width, int height); // Load image sequence from file (frames appended to image.data) void mLoadImageAnim(Image *out, const char * fileName, int * frames); // Load image sequence from memory buffer void mLoadImageAnimFromMemory(Image *out, const char * fileType, const unsigned char * fileData, int dataSize, int * frames); // Load image from memory buffer, fileType refers to extension: i.e. '.png' void mLoadImageFromMemory(Image *out, const char * fileType, const unsigned char * fileData, int dataSize); // Load image from GPU texture data void mLoadImageFromTexture(Image *out, Texture2D *texture); // Load image from screen buffer and (screenshot) void mLoadImageFromScreen(Image *out); // Check if an image is ready bool mIsImageReady(Image *image); // Unload image from CPU memory (RAM) void mUnloadImage(Image *image); // Export image data to file, returns true on success bool mExportImage(Image *image, const char * fileName); // Export image to memory buffer unsigned char * mExportImageToMemory(Image *image, const char * fileType, int * fileSize); // Export image as code file defining an array of bytes, returns true on success bool mExportImageAsCode(Image *image, const char * fileName); // Generate image: plain color void mGenImageColor(Image *out, int width, int height, Color *color); // Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient void mGenImageGradientLinear(Image *out, int width, int height, int direction, Color *start, Color *end); // Generate image: radial gradient void mGenImageGradientRadial(Image *out, int width, int height, float density, Color *inner, Color *outer); // Generate image: square gradient void mGenImageGradientSquare(Image *out, int width, int height, float density, Color *inner, Color *outer); // Generate image: checked void mGenImageChecked(Image *out, int width, int height, int checksX, int checksY, Color *col1, Color *col2); // Generate image: white noise void mGenImageWhiteNoise(Image *out, int width, int height, float factor); // Generate image: perlin noise void mGenImagePerlinNoise(Image *out, int width, int height, int offsetX, int offsetY, float scale); // Generate image: cellular algorithm, bigger tileSize means bigger cells void mGenImageCellular(Image *out, int width, int height, int tileSize); // Generate image: grayscale image from text data void mGenImageText(Image *out, int width, int height, const char * text); // Create an image duplicate (useful for transformations) void mImageCopy(Image *out, Image *image); // Create an image from another image piece void mImageFromImage(Image *out, Image *image, Rectangle *rec); // Create an image from text (default font) void mImageText(Image *out, const char * text, int fontSize, Color *color); // Create an image from text (custom sprite font) void mImageTextEx(Image *out, Font *font, const char * text, float fontSize, float spacing, Color *tint); // Convert image data to desired format void mImageFormat(Image * image, int newFormat); // Convert image to POT (power-of-two) void mImageToPOT(Image * image, Color *fill); // Crop an image to a defined rectangle void mImageCrop(Image * image, Rectangle *crop); // Crop image depending on alpha value void mImageAlphaCrop(Image * image, float threshold); // Clear alpha channel to desired color void mImageAlphaClear(Image * image, Color *color, float threshold); // Apply alpha mask to image void mImageAlphaMask(Image * image, Image *alphaMask); // Premultiply alpha channel void mImageAlphaPremultiply(Image * image); // Apply Gaussian blur using a box blur approximation void mImageBlurGaussian(Image * image, int blurSize); // Apply Custom Square image convolution kernel void mImageKernelConvolution(Image * image, float* kernel, int kernelSize); // Resize image (Bicubic scaling algorithm) void mImageResize(Image * image, int newWidth, int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) void mImageResizeNN(Image * image, int newWidth, int newHeight); // Resize canvas and fill with color void mImageResizeCanvas(Image * image, int newWidth, int newHeight, int offsetX, int offsetY, Color *fill); // Compute all mipmap levels for a provided image void mImageMipmaps(Image * image); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) void mImageDither(Image * image, int rBpp, int gBpp, int bBpp, int aBpp); // Flip image vertically void mImageFlipVertical(Image * image); // Flip image horizontally void mImageFlipHorizontal(Image * image); // Rotate image by input angle in degrees (-359 to 359) void mImageRotate(Image * image, int degrees); // Rotate image clockwise 90deg void mImageRotateCW(Image * image); // Rotate image counter-clockwise 90deg void mImageRotateCCW(Image * image); // Modify image color: tint void mImageColorTint(Image * image, Color *color); // Modify image color: invert void mImageColorInvert(Image * image); // Modify image color: grayscale void mImageColorGrayscale(Image * image); // Modify image color: contrast (-100 to 100) void mImageColorContrast(Image * image, float contrast); // Modify image color: brightness (-255 to 255) void mImageColorBrightness(Image * image, int brightness); // Modify image color: replace color void mImageColorReplace(Image * image, Color *color, Color *replace); // Load color data from image as a Color array (RGBA - 32bit) Color * mLoadImageColors(Image *image); // Load colors palette from image as a Color array (RGBA - 32bit) Color * mLoadImagePalette(Image *image, int maxPaletteSize, int * colorCount); // Unload color data loaded with LoadImageColors() void mUnloadImageColors(Color * colors); // Unload colors palette loaded with LoadImagePalette() void mUnloadImagePalette(Color * colors); // Get image alpha border rectangle void mGetImageAlphaBorder(Rectangle *out, Image *image, float threshold); // Get image pixel color at (x, y) position void mGetImageColor(Color *out, Image *image, int x, int y); // Clear image background with given color void mImageClearBackground(Image * dst, Color *color); // Draw pixel within an image void mImageDrawPixel(Image * dst, int posX, int posY, Color *color); // Draw pixel within an image (Vector version) void mImageDrawPixelV(Image * dst, Vector2 *position, Color *color); // Draw line within an image void mImageDrawLine(Image * dst, int startPosX, int startPosY, int endPosX, int endPosY, Color *color); // Draw line within an image (Vector version) void mImageDrawLineV(Image * dst, Vector2 *start, Vector2 *end, Color *color); // Draw a filled circle within an image void mImageDrawCircle(Image * dst, int centerX, int centerY, int radius, Color *color); // Draw a filled circle within an image (Vector version) void mImageDrawCircleV(Image * dst, Vector2 *center, int radius, Color *color); // Draw circle outline within an image void mImageDrawCircleLines(Image * dst, int centerX, int centerY, int radius, Color *color); // Draw circle outline within an image (Vector version) void mImageDrawCircleLinesV(Image * dst, Vector2 *center, int radius, Color *color); // Draw rectangle within an image void mImageDrawRectangle(Image * dst, int posX, int posY, int width, int height, Color *color); // Draw rectangle within an image (Vector version) void mImageDrawRectangleV(Image * dst, Vector2 *position, Vector2 *size, Color *color); // Draw rectangle within an image void mImageDrawRectangleRec(Image * dst, Rectangle *rec, Color *color); // Draw rectangle lines within an image void mImageDrawRectangleLines(Image * dst, Rectangle *rec, int thick, Color *color); // Draw a source image within a destination image (tint applied to source) void mImageDraw(Image * dst, Image *src, Rectangle *srcRec, Rectangle *dstRec, Color *tint); // Draw text (using default font) within an image (destination) void mImageDrawText(Image * dst, const char * text, int posX, int posY, int fontSize, Color *color); // Draw text (custom sprite font) within an image (destination) void mImageDrawTextEx(Image * dst, Font *font, const char * text, Vector2 *position, float fontSize, float spacing, Color *tint); // Load texture from file into GPU memory (VRAM) void mLoadTexture(Texture2D *out, const char * fileName); // Load texture from image data void mLoadTextureFromImage(Texture2D *out, Image *image); // Load cubemap from image, multiple image cubemap layouts supported void mLoadTextureCubemap(Texture2D *out, Image *image, int layout); // Load texture for rendering (framebuffer) void mLoadRenderTexture(RenderTexture2D *out, int width, int height); // Check if a texture is ready bool mIsTextureReady(Texture2D *texture); // Unload texture from GPU memory (VRAM) void mUnloadTexture(Texture2D *texture); // Check if a render texture is ready bool mIsRenderTextureReady(RenderTexture2D *target); // Unload render texture from GPU memory (VRAM) void mUnloadRenderTexture(RenderTexture2D *target); // Update GPU texture with new data void mUpdateTexture(Texture2D *texture, const void * pixels); // Update GPU texture rectangle with new data void mUpdateTextureRec(Texture2D *texture, Rectangle *rec, const void * pixels); // Generate GPU mipmaps for a texture void mGenTextureMipmaps(Texture2D * texture); // Set texture scaling filter mode void mSetTextureFilter(Texture2D *texture, int filter); // Set texture wrapping mode void mSetTextureWrap(Texture2D *texture, int wrap); // Draw a Texture2D void mDrawTexture(Texture2D *texture, int posX, int posY, Color *tint); // Draw a Texture2D with position defined as Vector2 void mDrawTextureV(Texture2D *texture, Vector2 *position, Color *tint); // Draw a Texture2D with extended parameters void mDrawTextureEx(Texture2D *texture, Vector2 *position, float rotation, float scale, Color *tint); // Draw a part of a texture defined by a rectangle void mDrawTextureRec(Texture2D *texture, Rectangle *source, Vector2 *position, Color *tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters void mDrawTexturePro(Texture2D *texture, Rectangle *source, Rectangle *dest, Vector2 *origin, float rotation, Color *tint); // Draws a texture (or part of it) that stretches or shrinks nicely void mDrawTextureNPatch(Texture2D *texture, NPatchInfo *nPatchInfo, Rectangle *dest, Vector2 *origin, float rotation, Color *tint); // Get color with alpha applied, alpha goes from 0.0f to 1.0f void mFade(Color *out, Color *color, float alpha); // Get hexadecimal value for a Color int mColorToInt(Color *color); // Get Color normalized as float [0..1] void mColorNormalize(Vector4 *out, Color *color); // Get Color from normalized values [0..1] void mColorFromNormalized(Color *out, Vector4 *normalized); // Get HSV values for a Color, hue [0..360], saturation/value [0..1] void mColorToHSV(Vector3 *out, Color *color); // Get a Color from HSV values, hue [0..360], saturation/value [0..1] void mColorFromHSV(Color *out, float hue, float saturation, float value); // Get color multiplied with another color void mColorTint(Color *out, Color *color, Color *tint); // Get color with brightness correction, brightness factor goes from -1.0f to 1.0f void mColorBrightness(Color *out, Color *color, float factor); // Get color with contrast correction, contrast values between -1.0f and 1.0f void mColorContrast(Color *out, Color *color, float contrast); // Get color with alpha applied, alpha goes from 0.0f to 1.0f void mColorAlpha(Color *out, Color *color, float alpha); // Get src alpha-blended into dst color with tint void mColorAlphaBlend(Color *out, Color *dst, Color *src, Color *tint); // Get Color structure from hexadecimal value void mGetColor(Color *out, unsigned int hexValue); // Get Color from a source pixel pointer of certain format void mGetPixelColor(Color *out, void * srcPtr, int format); // Set color formatted into destination pixel pointer void mSetPixelColor(void * dstPtr, Color *color, int format); // Get pixel data size in bytes for certain format int mGetPixelDataSize(int width, int height, int format); // Get the default Font void mGetFontDefault(Font *out); // Load font from file into GPU memory (VRAM) void mLoadFont(Font *out, const char * fileName); // Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character setFont void mLoadFontEx(Font *out, const char * fileName, int fontSize, int * codepoints, int codepointCount); // Load font from Image (XNA style) void mLoadFontFromImage(Font *out, Image *image, Color *key, int firstChar); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf' void mLoadFontFromMemory(Font *out, const char * fileType, const unsigned char * fileData, int dataSize, int fontSize, int * codepoints, int codepointCount); // Check if a font is ready bool mIsFontReady(Font *font); // Load font data for further use GlyphInfo * mLoadFontData(const unsigned char * fileData, int dataSize, int fontSize, int * codepoints, int codepointCount, int type); // Unload font chars info data (RAM) void mUnloadFontData(GlyphInfo * glyphs, int glyphCount); // Unload font from GPU memory (VRAM) void mUnloadFont(Font *font); // Export font as code file, returns true on success bool mExportFontAsCode(Font *font, const char * fileName); // Draw current FPS void mDrawFPS(int posX, int posY); // Draw text (using default font) void mDrawText(const char * text, int posX, int posY, int fontSize, Color *color); // Draw text using font and additional parameters void mDrawTextEx(Font *font, const char * text, Vector2 *position, float fontSize, float spacing, Color *tint); // Draw text using Font and pro parameters (rotation) void mDrawTextPro(Font *font, const char * text, Vector2 *position, Vector2 *origin, float rotation, float fontSize, float spacing, Color *tint); // Draw one character (codepoint) void mDrawTextCodepoint(Font *font, int codepoint, Vector2 *position, float fontSize, Color *tint); // Draw multiple character (codepoint) void mDrawTextCodepoints(Font *font, const int * codepoints, int codepointCount, Vector2 *position, float fontSize, float spacing, Color *tint); // Set vertical line spacing when drawing with line-breaks void mSetTextLineSpacing(int spacing); // Measure string width for default font int mMeasureText(const char * text, int fontSize); // Measure string size for Font void mMeasureTextEx(Vector2 *out, Font *font, const char * text, float fontSize, float spacing); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found int mGetGlyphIndex(Font *font, int codepoint); // Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found void mGetGlyphInfo(GlyphInfo *out, Font *font, int codepoint); // Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found void mGetGlyphAtlasRec(Rectangle *out, Font *font, int codepoint); // Load UTF-8 text encoded from codepoints array char * mLoadUTF8(const int * codepoints, int length); // Unload UTF-8 text encoded from codepoints array void mUnloadUTF8(char * text); // Load all codepoints from a UTF-8 text string, codepoints count returned by parameter int * mLoadCodepoints(const char * text, int * count); // Unload codepoints data from memory void mUnloadCodepoints(int * codepoints); // Get total number of codepoints in a UTF-8 encoded string int mGetCodepointCount(const char * text); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure int mGetCodepoint(const char * text, int * codepointSize); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure int mGetCodepointNext(const char * text, int * codepointSize); // Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure int mGetCodepointPrevious(const char * text, int * codepointSize); // Encode one codepoint into UTF-8 byte array (array length returned as parameter) const char * mCodepointToUTF8(int codepoint, int * utf8Size); // Copy one string to another, returns bytes copied int mTextCopy(char * dst, const char * src); // Check if two text string are equal bool mTextIsEqual(const char * text1, const char * text2); // Get text length, checks for '\0' ending unsigned int mTextLength(const char * text); // Get a piece of a text string const char * mTextSubtext(const char * text, int position, int length); // Replace text string (WARNING: memory must be freed!) char * mTextReplace(const char * text, const char * replace, const char * by); // Insert text in a position (WARNING: memory must be freed!) char * mTextInsert(const char * text, const char * insert, int position); // Find first text occurrence within a string int mTextFindIndex(const char * text, const char * find); // Get upper case version of provided string const char * mTextToUpper(const char * text); // Get lower case version of provided string const char * mTextToLower(const char * text); // Get Pascal case notation version of provided string const char * mTextToPascal(const char * text); // Get integer value from text (negative values not supported) int mTextToInteger(const char * text); // Get float value from text (negative values not supported) float mTextToFloat(const char * text); // Draw a line in 3D world space void mDrawLine3D(Vector3 *startPos, Vector3 *endPos, Color *color); // Draw a point in 3D space, actually a small line void mDrawPoint3D(Vector3 *position, Color *color); // Draw a circle in 3D world space void mDrawCircle3D(Vector3 *center, float radius, Vector3 *rotationAxis, float rotationAngle, Color *color); // Draw a color-filled triangle (vertex in counter-clockwise order!) void mDrawTriangle3D(Vector3 *v1, Vector3 *v2, Vector3 *v3, Color *color); // Draw a triangle strip defined by points void mDrawTriangleStrip3D(Vector3 * points, int pointCount, Color *color); // Draw cube void mDrawCube(Vector3 *position, float width, float height, float length, Color *color); // Draw cube (Vector version) void mDrawCubeV(Vector3 *position, Vector3 *size, Color *color); // Draw cube wires void mDrawCubeWires(Vector3 *position, float width, float height, float length, Color *color); // Draw cube wires (Vector version) void mDrawCubeWiresV(Vector3 *position, Vector3 *size, Color *color); // Draw sphere void mDrawSphere(Vector3 *centerPos, float radius, Color *color); // Draw sphere with extended parameters void mDrawSphereEx(Vector3 *centerPos, float radius, int rings, int slices, Color *color); // Draw sphere wires void mDrawSphereWires(Vector3 *centerPos, float radius, int rings, int slices, Color *color); // Draw a cylinder/cone void mDrawCylinder(Vector3 *position, float radiusTop, float radiusBottom, float height, int slices, Color *color); // Draw a cylinder with base at startPos and top at endPos void mDrawCylinderEx(Vector3 *startPos, Vector3 *endPos, float startRadius, float endRadius, int sides, Color *color); // Draw a cylinder/cone wires void mDrawCylinderWires(Vector3 *position, float radiusTop, float radiusBottom, float height, int slices, Color *color); // Draw a cylinder wires with base at startPos and top at endPos void mDrawCylinderWiresEx(Vector3 *startPos, Vector3 *endPos, float startRadius, float endRadius, int sides, Color *color); // Draw a capsule with the center of its sphere caps at startPos and endPos void mDrawCapsule(Vector3 *startPos, Vector3 *endPos, float radius, int slices, int rings, Color *color); // Draw capsule wireframe with the center of its sphere caps at startPos and endPos void mDrawCapsuleWires(Vector3 *startPos, Vector3 *endPos, float radius, int slices, int rings, Color *color); // Draw a plane XZ void mDrawPlane(Vector3 *centerPos, Vector2 *size, Color *color); // Draw a ray line void mDrawRay(Ray *ray, Color *color); // Draw a grid (centered at (0, 0, 0)) void mDrawGrid(int slices, float spacing); // Load model from files (meshes and materials) void mLoadModel(Model *out, const char * fileName); // Load model from generated mesh (default material) void mLoadModelFromMesh(Model *out, Mesh *mesh); // Check if a model is ready bool mIsModelReady(Model *model); // Unload model (including meshes) from memory (RAM and/or VRAM) void mUnloadModel(Model *model); // Compute model bounding box limits (considers all meshes) void mGetModelBoundingBox(BoundingBox *out, Model *model); // Draw a model (with texture if set) void mDrawModel(Model *model, Vector3 *position, float scale, Color *tint); // Draw a model with extended parameters void mDrawModelEx(Model *model, Vector3 *position, Vector3 *rotationAxis, float rotationAngle, Vector3 *scale, Color *tint); // Draw a model wires (with texture if set) void mDrawModelWires(Model *model, Vector3 *position, float scale, Color *tint); // Draw a model wires (with texture if set) with extended parameters void mDrawModelWiresEx(Model *model, Vector3 *position, Vector3 *rotationAxis, float rotationAngle, Vector3 *scale, Color *tint); // Draw bounding box (wires) void mDrawBoundingBox(BoundingBox *box, Color *color); // Draw a billboard texture void mDrawBillboard(Camera3D *camera, Texture2D *texture, Vector3 *position, float size, Color *tint); // Draw a billboard texture defined by source void mDrawBillboardRec(Camera3D *camera, Texture2D *texture, Rectangle *source, Vector3 *position, Vector2 *size, Color *tint); // Draw a billboard texture defined by source and rotation void mDrawBillboardPro(Camera3D *camera, Texture2D *texture, Rectangle *source, Vector3 *position, Vector3 *up, Vector2 *size, Vector2 *origin, float rotation, Color *tint); // Upload mesh vertex data in GPU and provide VAO/VBO ids void mUploadMesh(Mesh * mesh, bool dynamic); // Update mesh vertex data in GPU for a specific buffer index void mUpdateMeshBuffer(Mesh *mesh, int index, const void * data, int dataSize, int offset); // Unload mesh data from CPU and GPU void mUnloadMesh(Mesh *mesh); // Draw a 3d mesh with material and transform void mDrawMesh(Mesh *mesh, Material *material, Matrix *transform); // Draw multiple mesh instances with material and different transforms void mDrawMeshInstanced(Mesh *mesh, Material *material, const Matrix * transforms, int instances); // Compute mesh bounding box limits void mGetMeshBoundingBox(BoundingBox *out, Mesh *mesh); // Compute mesh tangents void mGenMeshTangents(Mesh * mesh); // Export mesh data to file, returns true on success bool mExportMesh(Mesh *mesh, const char * fileName); // Export mesh as code file (.h) defining multiple arrays of vertex attributes bool mExportMeshAsCode(Mesh *mesh, const char * fileName); // Generate polygonal mesh void mGenMeshPoly(Mesh *out, int sides, float radius); // Generate plane mesh (with subdivisions) void mGenMeshPlane(Mesh *out, float width, float length, int resX, int resZ); // Generate cuboid mesh void mGenMeshCube(Mesh *out, float width, float height, float length); // Generate sphere mesh (standard sphere) void mGenMeshSphere(Mesh *out, float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap) void mGenMeshHemiSphere(Mesh *out, float radius, int rings, int slices); // Generate cylinder mesh void mGenMeshCylinder(Mesh *out, float radius, float height, int slices); // Generate cone/pyramid mesh void mGenMeshCone(Mesh *out, float radius, float height, int slices); // Generate torus mesh void mGenMeshTorus(Mesh *out, float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh void mGenMeshKnot(Mesh *out, float radius, float size, int radSeg, int sides); // Generate heightmap mesh from image data void mGenMeshHeightmap(Mesh *out, Image *heightmap, Vector3 *size); // Generate cubes-based map mesh from image data void mGenMeshCubicmap(Mesh *out, Image *cubicmap, Vector3 *cubeSize); // Load materials from model file Material * mLoadMaterials(const char * fileName, int * materialCount); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) void mLoadMaterialDefault(Material *out); // Check if a material is ready bool mIsMaterialReady(Material *material); // Unload material from GPU memory (VRAM) void mUnloadMaterial(Material *material); // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) void mSetMaterialTexture(Material * material, int mapType, Texture2D *texture); // Set material for a mesh void mSetModelMeshMaterial(Model * model, int meshId, int materialId); // Load model animations from file ModelAnimation * mLoadModelAnimations(const char * fileName, int * animCount); // Update model animation pose void mUpdateModelAnimation(Model *model, ModelAnimation *anim, int frame); // Unload animation data void mUnloadModelAnimation(ModelAnimation *anim); // Unload animation array data void mUnloadModelAnimations(ModelAnimation * animations, int animCount); // Check model animation skeleton match bool mIsModelAnimationValid(Model *model, ModelAnimation *anim); // Check collision between two spheres bool mCheckCollisionSpheres(Vector3 *center1, float radius1, Vector3 *center2, float radius2); // Check collision between two bounding boxes bool mCheckCollisionBoxes(BoundingBox *box1, BoundingBox *box2); // Check collision between box and sphere bool mCheckCollisionBoxSphere(BoundingBox *box, Vector3 *center, float radius); // Get collision info between ray and sphere void mGetRayCollisionSphere(RayCollision *out, Ray *ray, Vector3 *center, float radius); // Get collision info between ray and box void mGetRayCollisionBox(RayCollision *out, Ray *ray, BoundingBox *box); // Get collision info between ray and mesh void mGetRayCollisionMesh(RayCollision *out, Ray *ray, Mesh *mesh, Matrix *transform); // Get collision info between ray and triangle void mGetRayCollisionTriangle(RayCollision *out, Ray *ray, Vector3 *p1, Vector3 *p2, Vector3 *p3); // Get collision info between ray and quad void mGetRayCollisionQuad(RayCollision *out, Ray *ray, Vector3 *p1, Vector3 *p2, Vector3 *p3, Vector3 *p4); // Initialize audio device and context void mInitAudioDevice(void); // Close the audio device and context void mCloseAudioDevice(void); // Check if audio device has been initialized successfully bool mIsAudioDeviceReady(void); // Set master volume (listener) void mSetMasterVolume(float volume); // Get master volume (listener) float mGetMasterVolume(void); // Load wave data from file void mLoadWave(Wave *out, const char * fileName); // Load wave from memory buffer, fileType refers to extension: i.e. '.wav' void mLoadWaveFromMemory(Wave *out, const char * fileType, const unsigned char * fileData, int dataSize); // Checks if wave data is ready bool mIsWaveReady(Wave *wave); // Load sound from file void mLoadSound(Sound *out, const char * fileName); // Load sound from wave data void mLoadSoundFromWave(Sound *out, Wave *wave); // Create a new sound that shares the same sample data as the source sound, does not own the sound data void mLoadSoundAlias(Sound *out, Sound *source); // Checks if a sound is ready bool mIsSoundReady(Sound *sound); // Update sound buffer with new data void mUpdateSound(Sound *sound, const void * data, int sampleCount); // Unload wave data void mUnloadWave(Wave *wave); // Unload sound void mUnloadSound(Sound *sound); // Unload a sound alias (does not deallocate sample data) void mUnloadSoundAlias(Sound *alias); // Export wave data to file, returns true on success bool mExportWave(Wave *wave, const char * fileName); // Export wave sample data to code (.h), returns true on success bool mExportWaveAsCode(Wave *wave, const char * fileName); // Play a sound void mPlaySound(Sound *sound); // Stop playing a sound void mStopSound(Sound *sound); // Pause a sound void mPauseSound(Sound *sound); // Resume a paused sound void mResumeSound(Sound *sound); // Check if a sound is currently playing bool mIsSoundPlaying(Sound *sound); // Set volume for a sound (1.0 is max level) void mSetSoundVolume(Sound *sound, float volume); // Set pitch for a sound (1.0 is base level) void mSetSoundPitch(Sound *sound, float pitch); // Set pan for a sound (0.5 is center) void mSetSoundPan(Sound *sound, float pan); // Copy a wave to a new wave void mWaveCopy(Wave *out, Wave *wave); // Crop a wave to defined samples range void mWaveCrop(Wave * wave, int initSample, int finalSample); // Convert wave data to desired format void mWaveFormat(Wave * wave, int sampleRate, int sampleSize, int channels); // Load samples data from wave as a 32bit float data array float * mLoadWaveSamples(Wave *wave); // Unload samples data loaded with LoadWaveSamples() void mUnloadWaveSamples(float * samples); // Load music stream from file void mLoadMusicStream(Music *out, const char * fileName); // Load music stream from data void mLoadMusicStreamFromMemory(Music *out, const char * fileType, const unsigned char * data, int dataSize); // Checks if a music stream is ready bool mIsMusicReady(Music *music); // Unload music stream void mUnloadMusicStream(Music *music); // Start music playing void mPlayMusicStream(Music *music); // Check if music is playing bool mIsMusicStreamPlaying(Music *music); // Updates buffers for music streaming void mUpdateMusicStream(Music *music); // Stop music playing void mStopMusicStream(Music *music); // Pause music playing void mPauseMusicStream(Music *music); // Resume playing paused music void mResumeMusicStream(Music *music); // Seek music to a position (in seconds) void mSeekMusicStream(Music *music, float position); // Set volume for music (1.0 is max level) void mSetMusicVolume(Music *music, float volume); // Set pitch for a music (1.0 is base level) void mSetMusicPitch(Music *music, float pitch); // Set pan for a music (0.5 is center) void mSetMusicPan(Music *music, float pan); // Get music time length (in seconds) float mGetMusicTimeLength(Music *music); // Get current music time played (in seconds) float mGetMusicTimePlayed(Music *music); // Load audio stream (to stream raw audio pcm data) void mLoadAudioStream(AudioStream *out, unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Checks if an audio stream is ready bool mIsAudioStreamReady(AudioStream *stream); // Unload audio stream and free memory void mUnloadAudioStream(AudioStream *stream); // Update audio stream buffers with data void mUpdateAudioStream(AudioStream *stream, const void * data, int frameCount); // Check if any audio stream buffers requires refill bool mIsAudioStreamProcessed(AudioStream *stream); // Play audio stream void mPlayAudioStream(AudioStream *stream); // Pause audio stream void mPauseAudioStream(AudioStream *stream); // Resume audio stream void mResumeAudioStream(AudioStream *stream); // Check if audio stream is playing bool mIsAudioStreamPlaying(AudioStream *stream); // Stop audio stream void mStopAudioStream(AudioStream *stream); // Set volume for audio stream (1.0 is max level) void mSetAudioStreamVolume(AudioStream *stream, float volume); // Set pitch for audio stream (1.0 is base level) void mSetAudioStreamPitch(AudioStream *stream, float pitch); // Set pan for audio stream (0.5 is centered) void mSetAudioStreamPan(AudioStream *stream, float pan); // Default size for new audio streams void mSetAudioStreamBufferSizeDefault(int size); // Audio thread callback to request new data void mSetAudioStreamCallback(AudioStream *stream, AudioCallback callback); // Attach audio stream processor to stream, receives the samples as s void mAttachAudioStreamProcessor(AudioStream *stream, AudioCallback processor); // Detach audio stream processor from stream void mDetachAudioStreamProcessor(AudioStream *stream, AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as s void mAttachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline void mDetachAudioMixedProcessor(AudioCallback processor); // Choose the current matrix to be transformed void mrlMatrixMode(int mode); // Push the current matrix to stack void mrlPushMatrix(void); // Pop latest inserted matrix from stack void mrlPopMatrix(void); // Reset current matrix to identity matrix void mrlLoadIdentity(void); // Multiply the current matrix by a translation matrix void mrlTranslatef(float x, float y, float z); // Multiply the current matrix by a rotation matrix void mrlRotatef(float angle, float x, float y, float z); // Multiply the current matrix by a scaling matrix void mrlScalef(float x, float y, float z); // Multiply the current matrix by another matrix void mrlMultMatrixf(const float * matf); // void mrlFrustum(double left, double right, double bottom, double top, double znear, double zfar); // void mrlOrtho(double left, double right, double bottom, double top, double znear, double zfar); // Set the viewport area void mrlViewport(int x, int y, int width, int height); // Initialize drawing mode (how to organize vertex) void mrlBegin(int mode); // Finish vertex providing void mrlEnd(void); // Define one vertex (position) - 2 int void mrlVertex2i(int x, int y); // Define one vertex (position) - 2 float void mrlVertex2f(float x, float y); // Define one vertex (position) - 3 float void mrlVertex3f(float x, float y, float z); // Define one vertex (texture coordinate) - 2 float void mrlTexCoord2f(float x, float y); // Define one vertex (normal) - 3 float void mrlNormal3f(float x, float y, float z); // Define one vertex (color) - 4 byte void mrlColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a); // Define one vertex (color) - 3 float void mrlColor3f(float x, float y, float z); // Define one vertex (color) - 4 float void mrlColor4f(float x, float y, float z, float w); // Enable vertex array (VAO, if supported) bool mrlEnableVertexArray(unsigned int vaoId); // Disable vertex array (VAO, if supported) void mrlDisableVertexArray(void); // Enable vertex buffer (VBO) void mrlEnableVertexBuffer(unsigned int id); // Disable vertex buffer (VBO) void mrlDisableVertexBuffer(void); // Enable vertex buffer element (VBO element) void mrlEnableVertexBufferElement(unsigned int id); // Disable vertex buffer element (VBO element) void mrlDisableVertexBufferElement(void); // Enable vertex attribute index void mrlEnableVertexAttribute(unsigned int index); // Disable vertex attribute index void mrlDisableVertexAttribute(unsigned int index); // Select and active a texture slot void mrlActiveTextureSlot(int slot); // Enable texture void mrlEnableTexture(unsigned int id); // Disable texture void mrlDisableTexture(void); // Enable texture cubemap void mrlEnableTextureCubemap(unsigned int id); // Disable texture cubemap void mrlDisableTextureCubemap(void); // Set texture parameters (filter, wrap) void mrlTextureParameters(unsigned int id, int param, int value); // Set cubemap parameters (filter, wrap) void mrlCubemapParameters(unsigned int id, int param, int value); // Enable shader program void mrlEnableShader(unsigned int id); // Disable shader program void mrlDisableShader(void); // Enable render texture (fbo) void mrlEnableFramebuffer(unsigned int id); // Disable render texture (fbo), return to default framebuffer void mrlDisableFramebuffer(void); // Activate multiple draw color buffers void mrlActiveDrawBuffers(int count); // Blit active framebuffer to main framebuffer void mrlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask); // Bind framebuffer (FBO) void mrlBindFramebuffer(unsigned int target, unsigned int framebuffer); // Enable color blending void mrlEnableColorBlend(void); // Disable color blending void mrlDisableColorBlend(void); // Enable depth test void mrlEnableDepthTest(void); // Disable depth test void mrlDisableDepthTest(void); // Enable depth write void mrlEnableDepthMask(void); // Disable depth write void mrlDisableDepthMask(void); // Enable backface culling void mrlEnableBackfaceCulling(void); // Disable backface culling void mrlDisableBackfaceCulling(void); // Color mask control void mrlColorMask(bool r, bool g, bool b, bool a); // Set face culling mode void mrlSetCullFace(int mode); // Enable scissor test void mrlEnableScissorTest(void); // Disable scissor test void mrlDisableScissorTest(void); // Scissor test void mrlScissor(int x, int y, int width, int height); // Enable wire mode void mrlEnableWireMode(void); // Enable point mode void mrlEnablePointMode(void); // Disable wire mode ( and point ) maybe rename void mrlDisableWireMode(void); // Set the line drawing width void mrlSetLineWidth(float width); // Get the line drawing width float mrlGetLineWidth(void); // Enable line aliasing void mrlEnableSmoothLines(void); // Disable line aliasing void mrlDisableSmoothLines(void); // Enable stereo rendering void mrlEnableStereoRender(void); // Disable stereo rendering void mrlDisableStereoRender(void); // Check if stereo render is enabled bool mrlIsStereoRenderEnabled(void); // Clear color buffer with color void mrlClearColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a); // Clear used screen buffers (color and depth) void mrlClearScreenBuffers(void); // Check and log OpenGL error codes void mrlCheckErrors(void); // Set blending mode void mrlSetBlendMode(int mode); // Set blending mode factor and equation (using OpenGL factors) void mrlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation); // Set blending mode factors and equations separately (using OpenGL factors) void mrlSetBlendFactorsSeparate(int glSrcRGB, int glDstRGB, int glSrcAlpha, int glDstAlpha, int glEqRGB, int glEqAlpha); // Initialize rlgl (buffers, shaders, textures, states) void mrlglInit(int width, int height); // De-initialize rlgl (buffers, shaders, textures) void mrlglClose(void); // Load OpenGL extensions (loader function required) void mrlLoadExtensions(void * loader); // Get current OpenGL version int mrlGetVersion(void); // Set current framebuffer width void mrlSetFramebufferWidth(int width); // Get default framebuffer width int mrlGetFramebufferWidth(void); // Set current framebuffer height void mrlSetFramebufferHeight(int height); // Get default framebuffer height int mrlGetFramebufferHeight(void); // Get default texture id unsigned int mrlGetTextureIdDefault(void); // Get default shader id unsigned int mrlGetShaderIdDefault(void); // Get default shader locations int * mrlGetShaderLocsDefault(void); // Load a render batch system void mrlLoadRenderBatch(rlRenderBatch *out, int numBuffers, int bufferElements); // Unload render batch system void mrlUnloadRenderBatch(rlRenderBatch *batch); // Draw render batch data (Update->Draw->Reset) void mrlDrawRenderBatch(rlRenderBatch * batch); // Set the active render batch for rlgl (NULL for default internal) void mrlSetRenderBatchActive(rlRenderBatch * batch); // Update and draw internal render batch void mrlDrawRenderBatchActive(void); // Check internal buffer overflow for a given number of vertex bool mrlCheckRenderBatchLimit(int vCount); // Set current texture for render batch and check buffers limits void mrlSetTexture(unsigned int id); // Load vertex array (vao) if supported unsigned int mrlLoadVertexArray(void); // Load a vertex buffer object unsigned int mrlLoadVertexBuffer(const void * buffer, int size, bool dynamic); // Load vertex buffer elements object unsigned int mrlLoadVertexBufferElement(const void * buffer, int size, bool dynamic); // Update vertex buffer object data on GPU buffer void mrlUpdateVertexBuffer(unsigned int bufferId, const void * data, int dataSize, int offset); // Update vertex buffer elements data on GPU buffer void mrlUpdateVertexBufferElements(unsigned int id, const void * data, int dataSize, int offset); // Unload vertex array (vao) void mrlUnloadVertexArray(unsigned int vaoId); // Unload vertex buffer object void mrlUnloadVertexBuffer(unsigned int vboId); // Set vertex attribute data configuration void mrlSetVertexAttribute(unsigned int index, int compSize, int type, bool normalized, int stride, const void * pointer); // Set vertex attribute data divisor void mrlSetVertexAttributeDivisor(unsigned int index, int divisor); // Set vertex attribute default value, when attribute to provided void mrlSetVertexAttributeDefault(int locIndex, const void * value, int attribType, int count); // Draw vertex array (currently active vao) void mrlDrawVertexArray(int offset, int count); // Draw vertex array elements void mrlDrawVertexArrayElements(int offset, int count, const void * buffer); // Draw vertex array (currently active vao) with instancing void mrlDrawVertexArrayInstanced(int offset, int count, int instances); // Draw vertex array elements with instancing void mrlDrawVertexArrayElementsInstanced(int offset, int count, const void * buffer, int instances); // Load texture data unsigned int mrlLoadTexture(const void * data, int width, int height, int format, int mipmapCount); // Load depth texture/renderbuffer (to be attached to fbo) unsigned int mrlLoadTextureDepth(int width, int height, bool useRenderBuffer); // Load texture cubemap data unsigned int mrlLoadTextureCubemap(const void * data, int size, int format); // Update texture with new data on GPU void mrlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void * data); // Get OpenGL internal formats void mrlGetGlTextureFormats(int format, unsigned int * glInternalFormat, unsigned int * glFormat, unsigned int * glType); // Get name string for pixel format const char * mrlGetPixelFormatName(unsigned int format); // Unload texture from GPU memory void mrlUnloadTexture(unsigned int id); // Generate mipmap data for selected texture void mrlGenTextureMipmaps(unsigned int id, int width, int height, int format, int * mipmaps); // Read texture pixel data void * mrlReadTexturePixels(unsigned int id, int width, int height, int format); // Read screen pixel data (color buffer) unsigned char * mrlReadScreenPixels(int width, int height); // Load an empty framebuffer unsigned int mrlLoadFramebuffer(int width, int height); // Attach texture/renderbuffer to a framebuffer void mrlFramebufferAttach(unsigned int fboId, unsigned int texId, int attachType, int texType, int mipLevel); // Verify framebuffer is complete bool mrlFramebufferComplete(unsigned int id); // Delete framebuffer from GPU void mrlUnloadFramebuffer(unsigned int id); // Load shader from code strings unsigned int mrlLoadShaderCode(const char * vsCode, const char * fsCode); // Compile custom shader and return shader id (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER) unsigned int mrlCompileShader(const char * shaderCode, int type); // Load custom shader program unsigned int mrlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId); // Unload shader program void mrlUnloadShaderProgram(unsigned int id); // Get shader location uniform int mrlGetLocationUniform(unsigned int shaderId, const char * uniformName); // Get shader location attribute int mrlGetLocationAttrib(unsigned int shaderId, const char * attribName); // Set shader value uniform void mrlSetUniform(int locIndex, const void * value, int uniformType, int count); // Set shader value matrix void mrlSetUniformMatrix(int locIndex, Matrix *mat); // Set shader value sampler void mrlSetUniformSampler(int locIndex, unsigned int textureId); // Set shader currently active (id and locations) void mrlSetShader(unsigned int id, int * locs); // Load compute shader program unsigned int mrlLoadComputeShaderProgram(unsigned int shaderId); // Dispatch compute shader (equivalent to *draw* for graphics pipeline) void mrlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ); // Load shader storage buffer object (SSBO) unsigned int mrlLoadShaderBuffer(unsigned int size, const void * data, int usageHint); // Unload shader storage buffer object (SSBO) void mrlUnloadShaderBuffer(unsigned int ssboId); // Update SSBO buffer data void mrlUpdateShaderBuffer(unsigned int id, const void * data, unsigned int dataSize, unsigned int offset); // Bind SSBO buffer void mrlBindShaderBuffer(unsigned int id, unsigned int index); // Read SSBO buffer data (GPU->CPU) void mrlReadShaderBuffer(unsigned int id, void * dest, unsigned int count, unsigned int offset); // Copy SSBO data between buffers void mrlCopyShaderBuffer(unsigned int destId, unsigned int srcId, unsigned int destOffset, unsigned int srcOffset, unsigned int count); // Get SSBO buffer size unsigned int mrlGetShaderBufferSize(unsigned int id); // Bind image texture void mrlBindImageTexture(unsigned int id, unsigned int index, int format, bool readonly); // Get internal modelview matrix void mrlGetMatrixModelview(Matrix *out); // Get internal projection matrix void mrlGetMatrixProjection(Matrix *out); // Get internal accumulated transform matrix void mrlGetMatrixTransform(Matrix *out); // void mrlGetMatrixProjectionStereo(Matrix *out, int eye); // void mrlGetMatrixViewOffsetStereo(Matrix *out, int eye); // Set a custom projection matrix (replaces internal projection matrix) void mrlSetMatrixProjection(Matrix *proj); // Set a custom modelview matrix (replaces internal modelview matrix) void mrlSetMatrixModelview(Matrix *view); // Set eyes projection matrices for stereo rendering void mrlSetMatrixProjectionStereo(Matrix *right, Matrix *left); // Set eyes view offsets matrices for stereo rendering void mrlSetMatrixViewOffsetStereo(Matrix *right, Matrix *left); // Load and draw a cube void mrlLoadDrawCube(void); // Load and draw a quad void mrlLoadDrawQuad(void); // float mClamp(float value, float min, float max); // float mLerp(float start, float end, float amount); // float mNormalize(float value, float start, float end); // float mRemap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd); // float mWrap(float value, float min, float max); // int mFloatEquals(float x, float y); // void mVector2Zero(Vector2 *out); // void mVector2One(Vector2 *out); // void mVector2Add(Vector2 *out, Vector2 *v1, Vector2 *v2); // void mVector2AddValue(Vector2 *out, Vector2 *v, float add); // void mVector2Subtract(Vector2 *out, Vector2 *v1, Vector2 *v2); // void mVector2SubtractValue(Vector2 *out, Vector2 *v, float sub); // float mVector2Length(Vector2 *v); // float mVector2LengthSqr(Vector2 *v); // float mVector2DotProduct(Vector2 *v1, Vector2 *v2); // float mVector2Distance(Vector2 *v1, Vector2 *v2); // float mVector2DistanceSqr(Vector2 *v1, Vector2 *v2); // float mVector2Angle(Vector2 *v1, Vector2 *v2); // float mVector2LineAngle(Vector2 *start, Vector2 *end); // void mVector2Scale(Vector2 *out, Vector2 *v, float scale); // void mVector2Multiply(Vector2 *out, Vector2 *v1, Vector2 *v2); // void mVector2Negate(Vector2 *out, Vector2 *v); // void mVector2Divide(Vector2 *out, Vector2 *v1, Vector2 *v2); // void mVector2Normalize(Vector2 *out, Vector2 *v); // void mVector2Transform(Vector2 *out, Vector2 *v, Matrix *mat); // void mVector2Lerp(Vector2 *out, Vector2 *v1, Vector2 *v2, float amount); // void mVector2Reflect(Vector2 *out, Vector2 *v, Vector2 *normal); // void mVector2Rotate(Vector2 *out, Vector2 *v, float angle); // void mVector2MoveTowards(Vector2 *out, Vector2 *v, Vector2 *target, float maxDistance); // void mVector2Invert(Vector2 *out, Vector2 *v); // void mVector2Clamp(Vector2 *out, Vector2 *v, Vector2 *min, Vector2 *max); // void mVector2ClampValue(Vector2 *out, Vector2 *v, float min, float max); // int mVector2Equals(Vector2 *p, Vector2 *q); // void mVector3Zero(Vector3 *out); // void mVector3One(Vector3 *out); // void mVector3Add(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3AddValue(Vector3 *out, Vector3 *v, float add); // void mVector3Subtract(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3SubtractValue(Vector3 *out, Vector3 *v, float sub); // void mVector3Scale(Vector3 *out, Vector3 *v, float scalar); // void mVector3Multiply(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3CrossProduct(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3Perpendicular(Vector3 *out, Vector3 *v); // float mVector3Length(const Vector3 *v); // float mVector3LengthSqr(const Vector3 *v); // float mVector3DotProduct(Vector3 *v1, Vector3 *v2); // float mVector3Distance(Vector3 *v1, Vector3 *v2); // float mVector3DistanceSqr(Vector3 *v1, Vector3 *v2); // float mVector3Angle(Vector3 *v1, Vector3 *v2); // void mVector3Negate(Vector3 *out, Vector3 *v); // void mVector3Divide(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3Normalize(Vector3 *out, Vector3 *v); // void mVector3Project(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3Reject(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3OrthoNormalize(Vector3 * v1, Vector3 * v2); // void mVector3Transform(Vector3 *out, Vector3 *v, Matrix *mat); // void mVector3RotateByQuaternion(Vector3 *out, Vector3 *v, Vector4 *q); // void mVector3RotateByAxisAngle(Vector3 *out, Vector3 *v, Vector3 *axis, float angle); // void mVector3Lerp(Vector3 *out, Vector3 *v1, Vector3 *v2, float amount); // void mVector3Reflect(Vector3 *out, Vector3 *v, Vector3 *normal); // void mVector3Min(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3Max(Vector3 *out, Vector3 *v1, Vector3 *v2); // void mVector3Barycenter(Vector3 *out, Vector3 *p, Vector3 *a, Vector3 *b, Vector3 *c); // void mVector3Unproject(Vector3 *out, Vector3 *source, Matrix *projection, Matrix *view); // void mVector3ToFloatV(float3 *out, Vector3 *v); // void mVector3Invert(Vector3 *out, Vector3 *v); // void mVector3Clamp(Vector3 *out, Vector3 *v, Vector3 *min, Vector3 *max); // void mVector3ClampValue(Vector3 *out, Vector3 *v, float min, float max); // int mVector3Equals(Vector3 *p, Vector3 *q); // void mVector3Refract(Vector3 *out, Vector3 *v, Vector3 *n, float r); // float mMatrixDeterminant(Matrix *mat); // float mMatrixTrace(Matrix *mat); // void mMatrixTranspose(Matrix *out, Matrix *mat); // void mMatrixInvert(Matrix *out, Matrix *mat); // void mMatrixIdentity(Matrix *out); // void mMatrixAdd(Matrix *out, Matrix *left, Matrix *right); // void mMatrixSubtract(Matrix *out, Matrix *left, Matrix *right); // void mMatrixMultiply(Matrix *out, Matrix *left, Matrix *right); // void mMatrixTranslate(Matrix *out, float x, float y, float z); // void mMatrixRotate(Matrix *out, Vector3 *axis, float angle); // void mMatrixRotateX(Matrix *out, float angle); // void mMatrixRotateY(Matrix *out, float angle); // void mMatrixRotateZ(Matrix *out, float angle); // void mMatrixRotateXYZ(Matrix *out, Vector3 *angle); // void mMatrixRotateZYX(Matrix *out, Vector3 *angle); // void mMatrixScale(Matrix *out, float x, float y, float z); // void mMatrixFrustum(Matrix *out, double left, double right, double bottom, double top, double near, double far); // void mMatrixPerspective(Matrix *out, double fovY, double aspect, double nearPlane, double farPlane); // void mMatrixOrtho(Matrix *out, double left, double right, double bottom, double top, double nearPlane, double farPlane); // void mMatrixLookAt(Matrix *out, Vector3 *eye, Vector3 *target, Vector3 *up); // void mMatrixToFloatV(float16 *out, Matrix *mat); // void mQuaternionAdd(Vector4 *out, Vector4 *q1, Vector4 *q2); // void mQuaternionAddValue(Vector4 *out, Vector4 *q, float add); // void mQuaternionSubtract(Vector4 *out, Vector4 *q1, Vector4 *q2); // void mQuaternionSubtractValue(Vector4 *out, Vector4 *q, float sub); // void mQuaternionIdentity(Vector4 *out); // float mQuaternionLength(Vector4 *q); // void mQuaternionNormalize(Vector4 *out, Vector4 *q); // void mQuaternionInvert(Vector4 *out, Vector4 *q); // void mQuaternionMultiply(Vector4 *out, Vector4 *q1, Vector4 *q2); // void mQuaternionScale(Vector4 *out, Vector4 *q, float mul); // void mQuaternionDivide(Vector4 *out, Vector4 *q1, Vector4 *q2); // void mQuaternionLerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount); // void mQuaternionNlerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount); // void mQuaternionSlerp(Vector4 *out, Vector4 *q1, Vector4 *q2, float amount); // void mQuaternionFromVector3ToVector3(Vector4 *out, Vector3 *from, Vector3 *to); // void mQuaternionFromMatrix(Vector4 *out, Matrix *mat); // void mQuaternionToMatrix(Matrix *out, Vector4 *q); // void mQuaternionFromAxisAngle(Vector4 *out, Vector3 *axis, float angle); // void mQuaternionToAxisAngle(Vector4 *q, Vector3 * outAxis, float * outAngle); // void mQuaternionFromEuler(Vector4 *out, float pitch, float yaw, float roll); // void mQuaternionToEuler(Vector3 *out, Vector4 *q); // void mQuaternionTransform(Vector4 *out, Vector4 *q, Matrix *mat); // int mQuaternionEquals(Vector4 *p, Vector4 *q);