Initial changes for Raylib 5.0 and some missing functions.
This commit is contained in:
404
API.md
404
API.md
@@ -1803,67 +1803,67 @@ Shader attribute type: vec4 (4 float)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_DXT1_RGB = 11
|
> PIXELFORMAT_COMPRESSED_DXT1_RGB = 14
|
||||||
|
|
||||||
4 bpp (no alpha)
|
4 bpp (no alpha)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_DXT1_RGBA = 12
|
> PIXELFORMAT_COMPRESSED_DXT1_RGBA = 15
|
||||||
|
|
||||||
4 bpp (1 bit alpha)
|
4 bpp (1 bit alpha)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_DXT3_RGBA = 13
|
> PIXELFORMAT_COMPRESSED_DXT3_RGBA = 16
|
||||||
|
|
||||||
8 bpp
|
8 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_DXT5_RGBA = 14
|
> PIXELFORMAT_COMPRESSED_DXT5_RGBA = 17
|
||||||
|
|
||||||
8 bpp
|
8 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_ETC1_RGB = 15
|
> PIXELFORMAT_COMPRESSED_ETC1_RGB = 18
|
||||||
|
|
||||||
4 bpp
|
4 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_ETC2_RGB = 16
|
> PIXELFORMAT_COMPRESSED_ETC2_RGB = 19
|
||||||
|
|
||||||
4 bpp
|
4 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 17
|
> PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 20
|
||||||
|
|
||||||
8 bpp
|
8 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_PVRT_RGB = 18
|
> PIXELFORMAT_COMPRESSED_PVRT_RGB = 21
|
||||||
|
|
||||||
4 bpp
|
4 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_PVRT_RGBA = 19
|
> PIXELFORMAT_COMPRESSED_PVRT_RGBA = 22
|
||||||
|
|
||||||
4 bpp
|
4 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20
|
> PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 23
|
||||||
|
|
||||||
8 bpp
|
8 bpp
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21
|
> PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 24
|
||||||
|
|
||||||
2 bpp
|
2 bpp
|
||||||
|
|
||||||
@@ -3540,6 +3540,12 @@ GLFW event joystick
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.CloseWindow()
|
||||||
|
|
||||||
|
Close window and unload OpenGL context and free all resources
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> state = RL.IsWindowReady()
|
> state = RL.IsWindowReady()
|
||||||
|
|
||||||
Check if window has been initialized successfully
|
Check if window has been initialized successfully
|
||||||
@@ -3588,79 +3594,11 @@ Check if window is currently focused (only PLATFORM_DESKTOP)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> RL.SetWindowMonitor( int monitor )
|
> resized = RL.IsWindowResized()
|
||||||
|
|
||||||
Set monitor for the current window (fullscreen mode)
|
Check if window has been resized from last frame
|
||||||
|
|
||||||
---
|
- Success return bool
|
||||||
|
|
||||||
> RL.SetWindowPosition( Vector2 pos )
|
|
||||||
|
|
||||||
Set window position on screen
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.SetWindowSize( Vector2 size )
|
|
||||||
|
|
||||||
Set window dimensions
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.SetWindowOpacity( float opacity )
|
|
||||||
|
|
||||||
Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> windowHandle = RL.GetWindowHandle()
|
|
||||||
|
|
||||||
Get native window handle. Return as lightuserdata
|
|
||||||
|
|
||||||
- Success return lightuserdata
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.SetWindowMinSize( Vector2 size )
|
|
||||||
|
|
||||||
Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> position = RL.GetMonitorPosition( int monitor )
|
|
||||||
|
|
||||||
Get specified monitor position
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> size = RL.GetMonitorSize( int monitor )
|
|
||||||
|
|
||||||
Get specified monitor size
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> position = RL.GetWindowPosition()
|
|
||||||
|
|
||||||
Get window position on monitor
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> size = RL.GetScreenSize()
|
|
||||||
|
|
||||||
Get screen size
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.SetWindowState( int flag )
|
|
||||||
|
|
||||||
Set window configuration state using flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -3672,6 +3610,12 @@ Check if one specific window flag is enabled (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowState( int flag )
|
||||||
|
|
||||||
|
Set window configuration state using flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> resized = RL.ClearWindowState( int flag )
|
> resized = RL.ClearWindowState( int flag )
|
||||||
|
|
||||||
Clear window configuration state flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
Clear window configuration state flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
||||||
@@ -3680,11 +3624,33 @@ Clear window configuration state flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZA
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> resized = RL.IsWindowResized()
|
> RL.ToggleFullscreen()
|
||||||
|
|
||||||
Check if window has been resized from last frame
|
Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
- Success return bool
|
---
|
||||||
|
|
||||||
|
> RL.ToggleBorderlessWindowed()
|
||||||
|
|
||||||
|
Toggle window state: borderless windowed (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.MaximizeWindow()
|
||||||
|
|
||||||
|
Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.MinimizeWindow()
|
||||||
|
|
||||||
|
Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.RestoreWindow()
|
||||||
|
|
||||||
|
Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -3702,7 +3668,73 @@ Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
|
|||||||
|
|
||||||
> RL.SetWindowTitle( string title )
|
> RL.SetWindowTitle( string title )
|
||||||
|
|
||||||
Set title for window (Only PLATFORM_DESKTOP)
|
Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowPosition( Vector2 pos )
|
||||||
|
|
||||||
|
Set window position on screen
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowMonitor( int monitor )
|
||||||
|
|
||||||
|
Set monitor for the current window
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowMinSize( Vector2 size )
|
||||||
|
|
||||||
|
Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowMaxSize( Vector2 size )
|
||||||
|
|
||||||
|
Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowSize( Vector2 size )
|
||||||
|
|
||||||
|
Set window dimensions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowOpacity( float opacity )
|
||||||
|
|
||||||
|
Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetWindowFocused()
|
||||||
|
|
||||||
|
Set window focused (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> windowHandle = RL.GetWindowHandle()
|
||||||
|
|
||||||
|
Get native window handle. Return as lightuserdata
|
||||||
|
|
||||||
|
- Success return lightuserdata
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> size = RL.GetScreenSize()
|
||||||
|
|
||||||
|
Get screen size
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> size = RL.GetRenderSize()
|
||||||
|
|
||||||
|
Get render size
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -3722,6 +3754,22 @@ Get current connected monitor
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> position = RL.GetMonitorPosition( int monitor )
|
||||||
|
|
||||||
|
Get specified monitor position
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> size = RL.GetMonitorSize( int monitor )
|
||||||
|
|
||||||
|
Get specified monitor size
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> size = RL.GetMonitorPhysicalSize( int monitor )
|
> size = RL.GetMonitorPhysicalSize( int monitor )
|
||||||
|
|
||||||
Get specified monitor physical size in millimetres
|
Get specified monitor physical size in millimetres
|
||||||
@@ -3738,6 +3786,14 @@ Get specified monitor refresh rate
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> position = RL.GetWindowPosition()
|
||||||
|
|
||||||
|
Get window position on monitor
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> dpi = RL.GetWindowScaleDPI()
|
> dpi = RL.GetWindowScaleDPI()
|
||||||
|
|
||||||
Get window scale DPI factor
|
Get window scale DPI factor
|
||||||
@@ -3748,18 +3804,12 @@ Get window scale DPI factor
|
|||||||
|
|
||||||
> name = RL.GetMonitorName( int monitor )
|
> name = RL.GetMonitorName( int monitor )
|
||||||
|
|
||||||
Get the human-readable, UTF-8 encoded name of the monitor
|
Get the human-readable, UTF-8 encoded name of the specified monitor
|
||||||
|
|
||||||
- Success return string
|
- Success return string
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> RL.CloseWindow()
|
|
||||||
|
|
||||||
Close window and unload OpenGL context and free all resources
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.SetClipboardText( string text )
|
> RL.SetClipboardText( string text )
|
||||||
|
|
||||||
Set clipboard text content
|
Set clipboard text content
|
||||||
@@ -4100,6 +4150,32 @@ Get elapsed time in seconds since InitWindow()
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Core - Random values generation functions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.SetRandomSeed( int seed )
|
||||||
|
|
||||||
|
Set the seed for the random number generator
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> time = RL.GetRandomValue( int min, int max )
|
||||||
|
|
||||||
|
Get a random value between min and max (both included)
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> sequence = RL.GetRandomValue( int count, int min, int max )
|
||||||
|
|
||||||
|
Load random values sequence, no values repeated
|
||||||
|
|
||||||
|
- Success return int{}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Core - Misc
|
## Core - Misc
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -4144,7 +4220,7 @@ Get the log level for bad function calls and invalid data formats.
|
|||||||
|
|
||||||
> RL.OpenURL( string url )
|
> RL.OpenURL( string url )
|
||||||
|
|
||||||
Open URL with default system browser (If available)
|
Open URL with default system browser (if available)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -4254,6 +4330,14 @@ Get current working directory (Uses static string)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> directory = RL.GetApplicationDirectory()
|
||||||
|
|
||||||
|
Get the directory of the running application (uses static string)
|
||||||
|
|
||||||
|
- Success return string
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> fileNames = RL.LoadDirectoryFiles( string dirPath )
|
> fileNames = RL.LoadDirectoryFiles( string dirPath )
|
||||||
|
|
||||||
Load directory filepaths
|
Load directory filepaths
|
||||||
@@ -4444,6 +4528,14 @@ Detect if a gamepad is available
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> name = RL.GetGamepadName( int gamepad )
|
||||||
|
|
||||||
|
Return gamepad internal name id
|
||||||
|
|
||||||
|
- Success return string
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> pressed = RL.IsGamepadButtonPressed( int gamepad, int button )
|
> pressed = RL.IsGamepadButtonPressed( int gamepad, int button )
|
||||||
|
|
||||||
Detect if a gamepad button has been pressed once
|
Detect if a gamepad button has been pressed once
|
||||||
@@ -4484,11 +4576,11 @@ Return axis movement value for a gamepad axis
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> name = RL.GetGamepadName( int gamepad )
|
> result = RL.SetGamepadMappings( string mappings )
|
||||||
|
|
||||||
Return gamepad internal name id
|
Set internal gamepad mappings (SDL_GameControllerDB)
|
||||||
|
|
||||||
- Success return string
|
- Success return int
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -5005,30 +5097,18 @@ Draw a line defining thickness
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> RL.DrawLineBezier( Vector2 startPos, Vector2 endPos, float thickness, Color color )
|
|
||||||
|
|
||||||
Draw a line using cubic-bezier curves in-out
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.DrawLineBezierQuad( Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thickness, Color color )
|
|
||||||
|
|
||||||
Draw line using quadratic bezier curves with a control point
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.DrawLineBezierCubic( Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thickness, Color color )
|
|
||||||
|
|
||||||
Draw line using quadratic bezier curves with a control point
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> RL.DrawLineStrip( Vector2{} points, Color color )
|
> RL.DrawLineStrip( Vector2{} points, Color color )
|
||||||
|
|
||||||
Draw lines sequence
|
Draw lines sequence
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.DrawLineBezier( Vector2 startPos, Vector2 endPos, float thickness, Color color )
|
||||||
|
|
||||||
|
Draw a line using cubic-bezier curves in-out
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> RL.DrawCircle( Vector2 center, float radius, Color color )
|
> RL.DrawCircle( Vector2 center, float radius, Color color )
|
||||||
|
|
||||||
Draw a color-filled circle
|
Draw a color-filled circle
|
||||||
@@ -5285,6 +5365,14 @@ Load image from RAW file data
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> image = RL.LoadImageSvg( string fileNameOrString, Vector2 size )
|
||||||
|
|
||||||
|
Load image from SVG file data or string with specified size
|
||||||
|
|
||||||
|
- Success return Image
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> image, frameCount = RL.LoadImageAnim( string fileName )
|
> image, frameCount = RL.LoadImageAnim( string fileName )
|
||||||
|
|
||||||
Load image sequence from file (frames appended to image.data). All frames are returned in RGBA format
|
Load image sequence from file (frames appended to image.data). All frames are returned in RGBA format
|
||||||
@@ -5340,6 +5428,14 @@ Export image data to file, returns true on success
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> buffer = RL.ExportImageToMemory( Image image, string fileType )
|
||||||
|
|
||||||
|
Export image to memory buffer
|
||||||
|
|
||||||
|
- Success return Buffer
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> success = RL.ExportImageAsCode( Image image, string fileName )
|
> success = RL.ExportImageAsCode( Image image, string fileName )
|
||||||
|
|
||||||
Export image as code file defining an array of bytes, returns true on success
|
Export image as code file defining an array of bytes, returns true on success
|
||||||
@@ -5360,17 +5456,9 @@ Generate image: plain color
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> image = RL.GenImageGradientV( Vector2 size, Color top, Color bottom )
|
> image = RL.GenImageGradientLinear( Vector2 size, int direction, Color a, Color b )
|
||||||
|
|
||||||
Generate image: vertical gradient
|
Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
|
||||||
|
|
||||||
- Success return Image
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> image = RL.GenImageGradientH( Vector2 size, Color left, Color right )
|
|
||||||
|
|
||||||
Generate image: horizontal gradient
|
|
||||||
|
|
||||||
- Success return Image
|
- Success return Image
|
||||||
|
|
||||||
@@ -5384,6 +5472,14 @@ Generate image: radial gradient
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> image = RL.GenImageGradientSquare( Vector2 size, float density, Color inner, Color outer )
|
||||||
|
|
||||||
|
Generate image: square gradient
|
||||||
|
|
||||||
|
- Success return Image
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> image = RL.GenImageChecked( Vector2 size, Vector2 checks, Color col1, Color col2 )
|
> image = RL.GenImageChecked( Vector2 size, Vector2 checks, Color col1, Color col2 )
|
||||||
|
|
||||||
Generate image: checked
|
Generate image: checked
|
||||||
@@ -5542,6 +5638,12 @@ Flip image horizontally
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.ImageRotate( Image image, int degrees )
|
||||||
|
|
||||||
|
Rotate image by input angle in degrees (-359 to 359)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> RL.ImageRotateCW( Image image )
|
> RL.ImageRotateCW( Image image )
|
||||||
|
|
||||||
Rotate image clockwise 90deg
|
Rotate image clockwise 90deg
|
||||||
@@ -6048,9 +6150,9 @@ Load font from file into GPU memory (VRAM)
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> font = RL.LoadFontEx( string fileName, int fontSize, int{} fontChars )
|
> font = RL.LoadFontEx( string fileName, int fontSize, int{} codepoints )
|
||||||
|
|
||||||
Load font from file with extended parameters, use NULL for fontChars to load the default character set
|
Load font from file with extended parameters, use NULL for codepoints to load the default character set
|
||||||
|
|
||||||
- Failure return nil
|
- Failure return nil
|
||||||
- Success return Font
|
- Success return Font
|
||||||
@@ -6139,6 +6241,12 @@ Draw text using font inside rectangle limits with support for tint and backgroun
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> size = RL.SetTextLineSpacing( int spacing )
|
||||||
|
|
||||||
|
Set vertical line spacing when drawing with line-breaks
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> size = RL.MeasureText( Font font, string text, float fontSize, float spacing )
|
> size = RL.MeasureText( Font font, string text, float fontSize, float spacing )
|
||||||
|
|
||||||
Measure string size for Font
|
Measure string size for Font
|
||||||
@@ -6834,12 +6942,40 @@ Get collision info between ray and quad
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.InitAudioDevice()
|
||||||
|
|
||||||
|
Initialize audio device and context
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> RL.CloseAudioDevice()
|
||||||
|
|
||||||
|
Close the audio device and context
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> isReady = RL.IsAudioDeviceReady()
|
||||||
|
|
||||||
|
Check if audio device has been initialized successfully
|
||||||
|
|
||||||
|
- Success return bool
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> RL.SetMasterVolume( float volume )
|
> RL.SetMasterVolume( float volume )
|
||||||
|
|
||||||
Set master volume (listener)
|
Set master volume (listener)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> isReady = RL.GetMasterVolume()
|
||||||
|
|
||||||
|
Get master volume (listener)
|
||||||
|
|
||||||
|
- Success return float
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Audio - Wave/Sound loading/unloading functions
|
## Audio - Wave/Sound loading/unloading functions
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -6878,6 +7014,14 @@ Load sound from wave data
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> sound = RL.LoadSoundAlias( Sound source )
|
||||||
|
|
||||||
|
Create a new sound that shares the same sample data as the source sound, does not own the sound data
|
||||||
|
|
||||||
|
- Success return Sound
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> isReady = RL.IsSoundReady( Sound sound )
|
> isReady = RL.IsSoundReady( Sound sound )
|
||||||
|
|
||||||
Checks if a sound is ready
|
Checks if a sound is ready
|
||||||
@@ -6898,6 +7042,12 @@ Unload sound
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> RL.UnloadSoundAlias( Sound alias )
|
||||||
|
|
||||||
|
Unload a sound alias (does not deallocate sample data)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> success = RL.ExportWave( Wave wave, string fileName )
|
> success = RL.ExportWave( Wave wave, string fileName )
|
||||||
|
|
||||||
Export wave data to file, returns true on success
|
Export wave data to file, returns true on success
|
||||||
|
|||||||
358
ReiLua_API.lua
358
ReiLua_API.lua
@@ -537,27 +537,27 @@ RL.PIXELFORMAT_UNCOMPRESSED_R32G32B32=9
|
|||||||
---32*4 bpp (4 channels - float)
|
---32*4 bpp (4 channels - float)
|
||||||
RL.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32=10
|
RL.PIXELFORMAT_UNCOMPRESSED_R32G32B32A32=10
|
||||||
---4 bpp (no alpha)
|
---4 bpp (no alpha)
|
||||||
RL.PIXELFORMAT_COMPRESSED_DXT1_RGB=11
|
RL.PIXELFORMAT_COMPRESSED_DXT1_RGB=14
|
||||||
---4 bpp (1 bit alpha)
|
---4 bpp (1 bit alpha)
|
||||||
RL.PIXELFORMAT_COMPRESSED_DXT1_RGBA=12
|
RL.PIXELFORMAT_COMPRESSED_DXT1_RGBA=15
|
||||||
---8 bpp
|
---8 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_DXT3_RGBA=13
|
RL.PIXELFORMAT_COMPRESSED_DXT3_RGBA=16
|
||||||
---8 bpp
|
---8 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_DXT5_RGBA=14
|
RL.PIXELFORMAT_COMPRESSED_DXT5_RGBA=17
|
||||||
---4 bpp
|
---4 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_ETC1_RGB=15
|
RL.PIXELFORMAT_COMPRESSED_ETC1_RGB=18
|
||||||
---4 bpp
|
---4 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_ETC2_RGB=16
|
RL.PIXELFORMAT_COMPRESSED_ETC2_RGB=19
|
||||||
---8 bpp
|
---8 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA=17
|
RL.PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA=20
|
||||||
---4 bpp
|
---4 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_PVRT_RGB=18
|
RL.PIXELFORMAT_COMPRESSED_PVRT_RGB=21
|
||||||
---4 bpp
|
---4 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_PVRT_RGBA=19
|
RL.PIXELFORMAT_COMPRESSED_PVRT_RGBA=22
|
||||||
---8 bpp
|
---8 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA=20
|
RL.PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA=23
|
||||||
---2 bpp
|
---2 bpp
|
||||||
RL.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA=21
|
RL.PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA=24
|
||||||
|
|
||||||
-- Globals - TextureFilters
|
-- Globals - TextureFilters
|
||||||
|
|
||||||
@@ -1214,6 +1214,10 @@ RL.EVENT_CURSOR_ENTER=10
|
|||||||
RL.EVENT_JOYSTICK=11
|
RL.EVENT_JOYSTICK=11
|
||||||
-- Core - Window-related functions
|
-- Core - Window-related functions
|
||||||
|
|
||||||
|
---Close window and unload OpenGL context and free all resources
|
||||||
|
---@return any RL.CloseWindow
|
||||||
|
function RL.CloseWindow() end
|
||||||
|
|
||||||
---Check if window has been initialized successfully
|
---Check if window has been initialized successfully
|
||||||
---- Success return bool
|
---- Success return bool
|
||||||
---@return any state
|
---@return any state
|
||||||
@@ -1244,16 +1248,83 @@ function RL.IsWindowMaximized() end
|
|||||||
---@return any state
|
---@return any state
|
||||||
function RL.IsWindowFocused() end
|
function RL.IsWindowFocused() end
|
||||||
|
|
||||||
---Set monitor for the current window (fullscreen mode)
|
---Check if window has been resized from last frame
|
||||||
---@param monitor integer
|
---- Success return bool
|
||||||
---@return any RL.SetWindowMonitor
|
---@return any resized
|
||||||
function RL.SetWindowMonitor( monitor ) end
|
function RL.IsWindowResized() end
|
||||||
|
|
||||||
|
---Check if one specific window flag is enabled (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
||||||
|
---- Success return bool
|
||||||
|
---@param flag integer
|
||||||
|
---@return any state
|
||||||
|
function RL.IsWindowState( flag ) end
|
||||||
|
|
||||||
|
---Set window configuration state using flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
||||||
|
---@param flag integer
|
||||||
|
---@return any RL.SetWindowState
|
||||||
|
function RL.SetWindowState( flag ) end
|
||||||
|
|
||||||
|
---Clear window configuration state flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
||||||
|
---- Success return bool
|
||||||
|
---@param flag integer
|
||||||
|
---@return any resized
|
||||||
|
function RL.ClearWindowState( flag ) end
|
||||||
|
|
||||||
|
---Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
|
||||||
|
---@return any RL.ToggleFullscreen
|
||||||
|
function RL.ToggleFullscreen() end
|
||||||
|
|
||||||
|
---Toggle window state: borderless windowed (only PLATFORM_DESKTOP)
|
||||||
|
---@return any RL.ToggleBorderlessWindowed
|
||||||
|
function RL.ToggleBorderlessWindowed() end
|
||||||
|
|
||||||
|
---Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
|
||||||
|
---@return any RL.MaximizeWindow
|
||||||
|
function RL.MaximizeWindow() end
|
||||||
|
|
||||||
|
---Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
|
||||||
|
---@return any RL.MinimizeWindow
|
||||||
|
function RL.MinimizeWindow() end
|
||||||
|
|
||||||
|
---Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
|
||||||
|
---@return any RL.RestoreWindow
|
||||||
|
function RL.RestoreWindow() end
|
||||||
|
|
||||||
|
---Set icon for window (Only PLATFORM_DESKTOP)
|
||||||
|
---@param image any
|
||||||
|
---@return any RL.SetWindowIcon
|
||||||
|
function RL.SetWindowIcon( image ) end
|
||||||
|
|
||||||
|
---Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
|
||||||
|
---@param images table
|
||||||
|
---@return any RL.SetWindowIcons
|
||||||
|
function RL.SetWindowIcons( images ) end
|
||||||
|
|
||||||
|
---Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)
|
||||||
|
---@param title string
|
||||||
|
---@return any RL.SetWindowTitle
|
||||||
|
function RL.SetWindowTitle( title ) end
|
||||||
|
|
||||||
---Set window position on screen
|
---Set window position on screen
|
||||||
---@param pos table
|
---@param pos table
|
||||||
---@return any RL.SetWindowPosition
|
---@return any RL.SetWindowPosition
|
||||||
function RL.SetWindowPosition( pos ) end
|
function RL.SetWindowPosition( pos ) end
|
||||||
|
|
||||||
|
---Set monitor for the current window
|
||||||
|
---@param monitor integer
|
||||||
|
---@return any RL.SetWindowMonitor
|
||||||
|
function RL.SetWindowMonitor( monitor ) end
|
||||||
|
|
||||||
|
---Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
---@param size table
|
||||||
|
---@return any RL.SetWindowMinSize
|
||||||
|
function RL.SetWindowMinSize( size ) end
|
||||||
|
|
||||||
|
---Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
---@param size table
|
||||||
|
---@return any RL.SetWindowMaxSize
|
||||||
|
function RL.SetWindowMaxSize( size ) end
|
||||||
|
|
||||||
---Set window dimensions
|
---Set window dimensions
|
||||||
---@param size table
|
---@param size table
|
||||||
---@return any RL.SetWindowSize
|
---@return any RL.SetWindowSize
|
||||||
@@ -1264,15 +1335,34 @@ function RL.SetWindowSize( size ) end
|
|||||||
---@return any RL.SetWindowOpacity
|
---@return any RL.SetWindowOpacity
|
||||||
function RL.SetWindowOpacity( opacity ) end
|
function RL.SetWindowOpacity( opacity ) end
|
||||||
|
|
||||||
|
---Set window focused (only PLATFORM_DESKTOP)
|
||||||
|
---@return any RL.SetWindowFocused
|
||||||
|
function RL.SetWindowFocused() end
|
||||||
|
|
||||||
---Get native window handle. Return as lightuserdata
|
---Get native window handle. Return as lightuserdata
|
||||||
---- Success return lightuserdata
|
---- Success return lightuserdata
|
||||||
---@return any windowHandle
|
---@return any windowHandle
|
||||||
function RL.GetWindowHandle() end
|
function RL.GetWindowHandle() end
|
||||||
|
|
||||||
---Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
---Get screen size
|
||||||
---@param size table
|
---- Success return Vector2
|
||||||
---@return any RL.SetWindowMinSize
|
---@return any size
|
||||||
function RL.SetWindowMinSize( size ) end
|
function RL.GetScreenSize() end
|
||||||
|
|
||||||
|
---Get render size
|
||||||
|
---- Success return Vector2
|
||||||
|
---@return any size
|
||||||
|
function RL.GetRenderSize() end
|
||||||
|
|
||||||
|
---Get number of connected monitors
|
||||||
|
---- Success return int
|
||||||
|
---@return any count
|
||||||
|
function RL.GetMonitorCount() end
|
||||||
|
|
||||||
|
---Get current connected monitor
|
||||||
|
---- Success return int
|
||||||
|
---@return any monitor
|
||||||
|
function RL.GetCurrentMonitor() end
|
||||||
|
|
||||||
---Get specified monitor position
|
---Get specified monitor position
|
||||||
---- Success return Vector2
|
---- Success return Vector2
|
||||||
@@ -1286,63 +1376,6 @@ function RL.GetMonitorPosition( monitor ) end
|
|||||||
---@return any size
|
---@return any size
|
||||||
function RL.GetMonitorSize( monitor ) end
|
function RL.GetMonitorSize( monitor ) end
|
||||||
|
|
||||||
---Get window position on monitor
|
|
||||||
---- Success return Vector2
|
|
||||||
---@return any position
|
|
||||||
function RL.GetWindowPosition() end
|
|
||||||
|
|
||||||
---Get screen size
|
|
||||||
---- Success return Vector2
|
|
||||||
---@return any size
|
|
||||||
function RL.GetScreenSize() end
|
|
||||||
|
|
||||||
---Set window configuration state using flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
|
||||||
---@param flag integer
|
|
||||||
---@return any RL.SetWindowState
|
|
||||||
function RL.SetWindowState( flag ) end
|
|
||||||
|
|
||||||
---Check if one specific window flag is enabled (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
|
||||||
---- Success return bool
|
|
||||||
---@param flag integer
|
|
||||||
---@return any state
|
|
||||||
function RL.IsWindowState( flag ) end
|
|
||||||
|
|
||||||
---Clear window configuration state flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
|
||||||
---- Success return bool
|
|
||||||
---@param flag integer
|
|
||||||
---@return any resized
|
|
||||||
function RL.ClearWindowState( flag ) end
|
|
||||||
|
|
||||||
---Check if window has been resized from last frame
|
|
||||||
---- Success return bool
|
|
||||||
---@return any resized
|
|
||||||
function RL.IsWindowResized() end
|
|
||||||
|
|
||||||
---Set icon for window (Only PLATFORM_DESKTOP)
|
|
||||||
---@param image any
|
|
||||||
---@return any RL.SetWindowIcon
|
|
||||||
function RL.SetWindowIcon( image ) end
|
|
||||||
|
|
||||||
---Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
|
|
||||||
---@param images table
|
|
||||||
---@return any RL.SetWindowIcons
|
|
||||||
function RL.SetWindowIcons( images ) end
|
|
||||||
|
|
||||||
---Set title for window (Only PLATFORM_DESKTOP)
|
|
||||||
---@param title string
|
|
||||||
---@return any RL.SetWindowTitle
|
|
||||||
function RL.SetWindowTitle( title ) end
|
|
||||||
|
|
||||||
---Get number of connected monitors
|
|
||||||
---- Success return int
|
|
||||||
---@return any count
|
|
||||||
function RL.GetMonitorCount() end
|
|
||||||
|
|
||||||
---Get current connected monitor
|
|
||||||
---- Success return int
|
|
||||||
---@return any monitor
|
|
||||||
function RL.GetCurrentMonitor() end
|
|
||||||
|
|
||||||
---Get specified monitor physical size in millimetres
|
---Get specified monitor physical size in millimetres
|
||||||
---- Success return Vector2
|
---- Success return Vector2
|
||||||
---@param monitor integer
|
---@param monitor integer
|
||||||
@@ -1355,21 +1388,22 @@ function RL.GetMonitorPhysicalSize( monitor ) end
|
|||||||
---@return any refreshRate
|
---@return any refreshRate
|
||||||
function RL.GetMonitorRefreshRate( monitor ) end
|
function RL.GetMonitorRefreshRate( monitor ) end
|
||||||
|
|
||||||
|
---Get window position on monitor
|
||||||
|
---- Success return Vector2
|
||||||
|
---@return any position
|
||||||
|
function RL.GetWindowPosition() end
|
||||||
|
|
||||||
---Get window scale DPI factor
|
---Get window scale DPI factor
|
||||||
---- Success return Vector2
|
---- Success return Vector2
|
||||||
---@return any dpi
|
---@return any dpi
|
||||||
function RL.GetWindowScaleDPI() end
|
function RL.GetWindowScaleDPI() end
|
||||||
|
|
||||||
---Get the human-readable, UTF-8 encoded name of the monitor
|
---Get the human-readable, UTF-8 encoded name of the specified monitor
|
||||||
---- Success return string
|
---- Success return string
|
||||||
---@param monitor integer
|
---@param monitor integer
|
||||||
---@return any name
|
---@return any name
|
||||||
function RL.GetMonitorName( monitor ) end
|
function RL.GetMonitorName( monitor ) end
|
||||||
|
|
||||||
---Close window and unload OpenGL context and free all resources
|
|
||||||
---@return any RL.CloseWindow
|
|
||||||
function RL.CloseWindow() end
|
|
||||||
|
|
||||||
---Set clipboard text content
|
---Set clipboard text content
|
||||||
---@param text string
|
---@param text string
|
||||||
---@return any RL.SetClipboardText
|
---@return any RL.SetClipboardText
|
||||||
@@ -1641,6 +1675,28 @@ function RL.GetFrameTime() end
|
|||||||
---@return any time
|
---@return any time
|
||||||
function RL.GetTime() end
|
function RL.GetTime() end
|
||||||
|
|
||||||
|
-- Core - Random values generation functions
|
||||||
|
|
||||||
|
---Set the seed for the random number generator
|
||||||
|
---@param seed integer
|
||||||
|
---@return any RL.SetRandomSeed
|
||||||
|
function RL.SetRandomSeed( seed ) end
|
||||||
|
|
||||||
|
---Get a random value between min and max (both included)
|
||||||
|
---- Success return int
|
||||||
|
---@param min integer
|
||||||
|
---@param max integer
|
||||||
|
---@return any time
|
||||||
|
function RL.GetRandomValue( min, max ) end
|
||||||
|
|
||||||
|
---Load random values sequence, no values repeated
|
||||||
|
---- Success return int{}
|
||||||
|
---@param count integer
|
||||||
|
---@param min integer
|
||||||
|
---@param max integer
|
||||||
|
---@return any sequence
|
||||||
|
function RL.GetRandomValue( count, min, max ) end
|
||||||
|
|
||||||
-- Core - Misc
|
-- Core - Misc
|
||||||
|
|
||||||
---Takes a screenshot of current screen (filename extension defines format)
|
---Takes a screenshot of current screen (filename extension defines format)
|
||||||
@@ -1674,7 +1730,7 @@ function RL.SetLogLevelInvalid( logLevel ) end
|
|||||||
---@return any logLevel
|
---@return any logLevel
|
||||||
function RL.GetLogLevelInvalid() end
|
function RL.GetLogLevelInvalid() end
|
||||||
|
|
||||||
---Open URL with default system browser (If available)
|
---Open URL with default system browser (if available)
|
||||||
---@param url string
|
---@param url string
|
||||||
---@return any RL.OpenURL
|
---@return any RL.OpenURL
|
||||||
function RL.OpenURL( url ) end
|
function RL.OpenURL( url ) end
|
||||||
@@ -1756,6 +1812,11 @@ function RL.GetPrevDirectoryPath( dirPath ) end
|
|||||||
---@return any directory
|
---@return any directory
|
||||||
function RL.GetWorkingDirectory() end
|
function RL.GetWorkingDirectory() end
|
||||||
|
|
||||||
|
---Get the directory of the running application (uses static string)
|
||||||
|
---- Success return string
|
||||||
|
---@return any directory
|
||||||
|
function RL.GetApplicationDirectory() end
|
||||||
|
|
||||||
---Load directory filepaths
|
---Load directory filepaths
|
||||||
---- Success return string{}
|
---- Success return string{}
|
||||||
---@param dirPath string
|
---@param dirPath string
|
||||||
@@ -1898,6 +1959,12 @@ function RL.GetKeyScancode( key ) end
|
|||||||
---@return any available
|
---@return any available
|
||||||
function RL.IsGamepadAvailable( gamepad ) end
|
function RL.IsGamepadAvailable( gamepad ) end
|
||||||
|
|
||||||
|
---Return gamepad internal name id
|
||||||
|
---- Success return string
|
||||||
|
---@param gamepad integer
|
||||||
|
---@return any name
|
||||||
|
function RL.GetGamepadName( gamepad ) end
|
||||||
|
|
||||||
---Detect if a gamepad button has been pressed once
|
---Detect if a gamepad button has been pressed once
|
||||||
---- Success return bool
|
---- Success return bool
|
||||||
---@param gamepad integer
|
---@param gamepad integer
|
||||||
@@ -1932,11 +1999,11 @@ function RL.GetGamepadAxisCount( gamepad ) end
|
|||||||
---@return any value
|
---@return any value
|
||||||
function RL.GetGamepadAxisMovement( gamepad, axis ) end
|
function RL.GetGamepadAxisMovement( gamepad, axis ) end
|
||||||
|
|
||||||
---Return gamepad internal name id
|
---Set internal gamepad mappings (SDL_GameControllerDB)
|
||||||
---- Success return string
|
---- Success return int
|
||||||
---@param gamepad integer
|
---@param mappings string
|
||||||
---@return any name
|
---@return any result
|
||||||
function RL.GetGamepadName( gamepad ) end
|
function RL.SetGamepadMappings( mappings ) end
|
||||||
|
|
||||||
-- Core - Input-related functions: mouse
|
-- Core - Input-related functions: mouse
|
||||||
|
|
||||||
@@ -2356,6 +2423,12 @@ function RL.DrawPixel( pos, color ) end
|
|||||||
---@return any RL.DrawLine
|
---@return any RL.DrawLine
|
||||||
function RL.DrawLine( startPos, endPos, thickness, color ) end
|
function RL.DrawLine( startPos, endPos, thickness, color ) end
|
||||||
|
|
||||||
|
---Draw lines sequence
|
||||||
|
---@param points table
|
||||||
|
---@param color table
|
||||||
|
---@return any RL.DrawLineStrip
|
||||||
|
function RL.DrawLineStrip( points, color ) end
|
||||||
|
|
||||||
---Draw a line using cubic-bezier curves in-out
|
---Draw a line using cubic-bezier curves in-out
|
||||||
---@param startPos table
|
---@param startPos table
|
||||||
---@param endPos table
|
---@param endPos table
|
||||||
@@ -2364,31 +2437,6 @@ function RL.DrawLine( startPos, endPos, thickness, color ) end
|
|||||||
---@return any RL.DrawLineBezier
|
---@return any RL.DrawLineBezier
|
||||||
function RL.DrawLineBezier( startPos, endPos, thickness, color ) end
|
function RL.DrawLineBezier( startPos, endPos, thickness, color ) end
|
||||||
|
|
||||||
---Draw line using quadratic bezier curves with a control point
|
|
||||||
---@param startPos table
|
|
||||||
---@param endPos table
|
|
||||||
---@param controlPos table
|
|
||||||
---@param thickness number
|
|
||||||
---@param color table
|
|
||||||
---@return any RL.DrawLineBezierQuad
|
|
||||||
function RL.DrawLineBezierQuad( startPos, endPos, controlPos, thickness, color ) end
|
|
||||||
|
|
||||||
---Draw line using quadratic bezier curves with a control point
|
|
||||||
---@param startPos table
|
|
||||||
---@param endPos table
|
|
||||||
---@param startControlPos table
|
|
||||||
---@param endControlPos table
|
|
||||||
---@param thickness number
|
|
||||||
---@param color table
|
|
||||||
---@return any RL.DrawLineBezierCubic
|
|
||||||
function RL.DrawLineBezierCubic( startPos, endPos, startControlPos, endControlPos, thickness, color ) end
|
|
||||||
|
|
||||||
---Draw lines sequence
|
|
||||||
---@param points table
|
|
||||||
---@param color table
|
|
||||||
---@return any RL.DrawLineStrip
|
|
||||||
function RL.DrawLineStrip( points, color ) end
|
|
||||||
|
|
||||||
---Draw a color-filled circle
|
---Draw a color-filled circle
|
||||||
---@param center table
|
---@param center table
|
||||||
---@param radius number
|
---@param radius number
|
||||||
@@ -2694,6 +2742,13 @@ function RL.LoadImage( fileName ) end
|
|||||||
---@return any image
|
---@return any image
|
||||||
function RL.LoadImageRaw( fileName, size, format, headerSize ) end
|
function RL.LoadImageRaw( fileName, size, format, headerSize ) end
|
||||||
|
|
||||||
|
---Load image from SVG file data or string with specified size
|
||||||
|
---- Success return Image
|
||||||
|
---@param fileNameOrString string
|
||||||
|
---@param size table
|
||||||
|
---@return any image
|
||||||
|
function RL.LoadImageSvg( fileNameOrString, size ) end
|
||||||
|
|
||||||
---Load image sequence from file (frames appended to image.data). All frames are returned in RGBA format
|
---Load image sequence from file (frames appended to image.data). All frames are returned in RGBA format
|
||||||
---- Failure return nil
|
---- Failure return nil
|
||||||
---- Success return Image, int
|
---- Success return Image, int
|
||||||
@@ -2739,6 +2794,13 @@ function RL.UnloadImage( image ) end
|
|||||||
---@return any success
|
---@return any success
|
||||||
function RL.ExportImage( image, fileName ) end
|
function RL.ExportImage( image, fileName ) end
|
||||||
|
|
||||||
|
---Export image to memory buffer
|
||||||
|
---- Success return Buffer
|
||||||
|
---@param image any
|
||||||
|
---@param fileType string
|
||||||
|
---@return any buffer
|
||||||
|
function RL.ExportImageToMemory( image, fileType ) end
|
||||||
|
|
||||||
---Export image as code file defining an array of bytes, returns true on success
|
---Export image as code file defining an array of bytes, returns true on success
|
||||||
---- Success return bool
|
---- Success return bool
|
||||||
---@param image any
|
---@param image any
|
||||||
@@ -2755,21 +2817,14 @@ function RL.ExportImageAsCode( image, fileName ) end
|
|||||||
---@return any image
|
---@return any image
|
||||||
function RL.GenImageColor( size, color ) end
|
function RL.GenImageColor( size, color ) end
|
||||||
|
|
||||||
---Generate image: vertical gradient
|
---Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
|
||||||
---- Success return Image
|
---- Success return Image
|
||||||
---@param size table
|
---@param size table
|
||||||
---@param top table
|
---@param direction integer
|
||||||
---@param bottom table
|
---@param a table
|
||||||
|
---@param b table
|
||||||
---@return any image
|
---@return any image
|
||||||
function RL.GenImageGradientV( size, top, bottom ) end
|
function RL.GenImageGradientLinear( size, direction, a, b ) end
|
||||||
|
|
||||||
---Generate image: horizontal gradient
|
|
||||||
---- Success return Image
|
|
||||||
---@param size table
|
|
||||||
---@param left table
|
|
||||||
---@param right table
|
|
||||||
---@return any image
|
|
||||||
function RL.GenImageGradientH( size, left, right ) end
|
|
||||||
|
|
||||||
---Generate image: radial gradient
|
---Generate image: radial gradient
|
||||||
---- Success return Image
|
---- Success return Image
|
||||||
@@ -2780,6 +2835,15 @@ function RL.GenImageGradientH( size, left, right ) end
|
|||||||
---@return any image
|
---@return any image
|
||||||
function RL.GenImageGradientRadial( size, density, inner, outer ) end
|
function RL.GenImageGradientRadial( size, density, inner, outer ) end
|
||||||
|
|
||||||
|
---Generate image: square gradient
|
||||||
|
---- Success return Image
|
||||||
|
---@param size table
|
||||||
|
---@param density number
|
||||||
|
---@param inner table
|
||||||
|
---@param outer table
|
||||||
|
---@return any image
|
||||||
|
function RL.GenImageGradientSquare( size, density, inner, outer ) end
|
||||||
|
|
||||||
---Generate image: checked
|
---Generate image: checked
|
||||||
---- Success return Image
|
---- Success return Image
|
||||||
---@param size table
|
---@param size table
|
||||||
@@ -2932,6 +2996,12 @@ function RL.ImageFlipVertical( image ) end
|
|||||||
---@return any RL.ImageFlipHorizontal
|
---@return any RL.ImageFlipHorizontal
|
||||||
function RL.ImageFlipHorizontal( image ) end
|
function RL.ImageFlipHorizontal( image ) end
|
||||||
|
|
||||||
|
---Rotate image by input angle in degrees (-359 to 359)
|
||||||
|
---@param image any
|
||||||
|
---@param degrees integer
|
||||||
|
---@return any RL.ImageRotate
|
||||||
|
function RL.ImageRotate( image, degrees ) end
|
||||||
|
|
||||||
---Rotate image clockwise 90deg
|
---Rotate image clockwise 90deg
|
||||||
---@param image any
|
---@param image any
|
||||||
---@return any RL.ImageRotateCW
|
---@return any RL.ImageRotateCW
|
||||||
@@ -3386,14 +3456,14 @@ function RL.GetFontDefault() end
|
|||||||
---@return any font
|
---@return any font
|
||||||
function RL.LoadFont( fileName ) end
|
function RL.LoadFont( fileName ) end
|
||||||
|
|
||||||
---Load font from file with extended parameters, use NULL for fontChars to load the default character set
|
---Load font from file with extended parameters, use NULL for codepoints to load the default character set
|
||||||
---- Failure return nil
|
---- Failure return nil
|
||||||
---- Success return Font
|
---- Success return Font
|
||||||
---@param fileName string
|
---@param fileName string
|
||||||
---@param fontSize integer
|
---@param fontSize integer
|
||||||
---@param fontChars table
|
---@param codepoints table
|
||||||
---@return any font
|
---@return any font
|
||||||
function RL.LoadFontEx( fileName, fontSize, fontChars ) end
|
function RL.LoadFontEx( fileName, fontSize, codepoints ) end
|
||||||
|
|
||||||
---Load font from Image (XNA style)
|
---Load font from Image (XNA style)
|
||||||
---- Success return Font
|
---- Success return Font
|
||||||
@@ -3497,6 +3567,11 @@ function RL.DrawTextBoxedTinted( font, text, rec, fontSize, spacing, wordWrap, t
|
|||||||
|
|
||||||
-- Text - Text font info functions
|
-- Text - Text font info functions
|
||||||
|
|
||||||
|
---Set vertical line spacing when drawing with line-breaks
|
||||||
|
---@param spacing integer
|
||||||
|
---@return any size
|
||||||
|
function RL.SetTextLineSpacing( spacing ) end
|
||||||
|
|
||||||
---Measure string size for Font
|
---Measure string size for Font
|
||||||
---- Success return Vector2
|
---- Success return Vector2
|
||||||
---@param font any
|
---@param font any
|
||||||
@@ -4195,11 +4270,29 @@ function RL.GetRayCollisionQuad( ray, p1, p2, p3, p4 ) end
|
|||||||
|
|
||||||
-- Audio - Audio device management functions
|
-- Audio - Audio device management functions
|
||||||
|
|
||||||
|
---Initialize audio device and context
|
||||||
|
---@return any RL.InitAudioDevice
|
||||||
|
function RL.InitAudioDevice() end
|
||||||
|
|
||||||
|
---Close the audio device and context
|
||||||
|
---@return any RL.CloseAudioDevice
|
||||||
|
function RL.CloseAudioDevice() end
|
||||||
|
|
||||||
|
---Check if audio device has been initialized successfully
|
||||||
|
---- Success return bool
|
||||||
|
---@return any isReady
|
||||||
|
function RL.IsAudioDeviceReady() end
|
||||||
|
|
||||||
---Set master volume (listener)
|
---Set master volume (listener)
|
||||||
---@param volume number
|
---@param volume number
|
||||||
---@return any RL.SetMasterVolume
|
---@return any RL.SetMasterVolume
|
||||||
function RL.SetMasterVolume( volume ) end
|
function RL.SetMasterVolume( volume ) end
|
||||||
|
|
||||||
|
---Get master volume (listener)
|
||||||
|
---- Success return float
|
||||||
|
---@return any isReady
|
||||||
|
function RL.GetMasterVolume() end
|
||||||
|
|
||||||
-- Audio - Wave/Sound loading/unloading functions
|
-- Audio - Wave/Sound loading/unloading functions
|
||||||
|
|
||||||
---Load sound from file
|
---Load sound from file
|
||||||
@@ -4228,6 +4321,12 @@ function RL.IsWaveReady( wave ) end
|
|||||||
---@return any sound
|
---@return any sound
|
||||||
function RL.LoadSoundFromWave( wave ) end
|
function RL.LoadSoundFromWave( wave ) end
|
||||||
|
|
||||||
|
---Create a new sound that shares the same sample data as the source sound, does not own the sound data
|
||||||
|
---- Success return Sound
|
||||||
|
---@param source any
|
||||||
|
---@return any sound
|
||||||
|
function RL.LoadSoundAlias( source ) end
|
||||||
|
|
||||||
---Checks if a sound is ready
|
---Checks if a sound is ready
|
||||||
---- Success return bool
|
---- Success return bool
|
||||||
---@param sound any
|
---@param sound any
|
||||||
@@ -4244,6 +4343,11 @@ function RL.UnloadWave( wave ) end
|
|||||||
---@return any RL.UnloadSound
|
---@return any RL.UnloadSound
|
||||||
function RL.UnloadSound( sound ) end
|
function RL.UnloadSound( sound ) end
|
||||||
|
|
||||||
|
---Unload a sound alias (does not deallocate sample data)
|
||||||
|
---@param alias any
|
||||||
|
---@return any RL.UnloadSoundAlias
|
||||||
|
function RL.UnloadSoundAlias( alias ) end
|
||||||
|
|
||||||
---Export wave data to file, returns true on success
|
---Export wave data to file, returns true on success
|
||||||
---- Success return bool
|
---- Success return bool
|
||||||
---@param wave any
|
---@param wave any
|
||||||
|
|||||||
20
changelog
20
changelog
@@ -1,3 +1,23 @@
|
|||||||
|
------------------------------------------------------------------------
|
||||||
|
Release: ReiLua version 0.7.0 Using Raylib 5.0 and Raygui 4.0
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
KEY CHANGES:
|
||||||
|
- CHANGE: Switch to Raylib 5.0 and Raygui 4.0.
|
||||||
|
- CHANGE: Audio device no longer initialize automatically in case some other device is used.
|
||||||
|
- ADDED: More audio device management functions.
|
||||||
|
- ADDED: Random values generation functions.
|
||||||
|
- ADDED: More Window-related functions.
|
||||||
|
|
||||||
|
DETAILED CHANGES:
|
||||||
|
- REMOVED: DrawLineBezierQuad, DrawLineBezierCubic.
|
||||||
|
- REMOVED: GenImageGradientV, GenImageGradientH.
|
||||||
|
- ADDED: GenImageGradientLinear and GenImageGradientSquare.
|
||||||
|
- ADDED: LoadImageSvg and ExportImageToMemory.
|
||||||
|
- ADDED: ImageRotate.
|
||||||
|
- ADDED: SetTextLineSpacing.
|
||||||
|
- ADDED: LoadSoundAlias and UnloadSoundAlias.
|
||||||
|
- ADDED: GetApplicationDirectory.
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Release: ReiLua version 0.6.0 Using Raylib 4.5
|
Release: ReiLua version 0.6.0 Using Raylib 4.5
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|||||||
5
devnotes
5
devnotes
@@ -1,10 +1,15 @@
|
|||||||
Current {
|
Current {
|
||||||
|
* Shapes
|
||||||
|
* Splines.
|
||||||
}
|
}
|
||||||
|
|
||||||
Backlog {
|
Backlog {
|
||||||
* Text
|
* Text
|
||||||
* Text codepoints management functions (unicode characters)? Could be usefull for luajit.
|
* Text codepoints management functions (unicode characters)? Could be usefull for luajit.
|
||||||
* Some of the Text strings management functions could be easier to use than the Lua ones.
|
* Some of the Text strings management functions could be easier to use than the Lua ones.
|
||||||
|
* LoadFontFromMemory.
|
||||||
|
* LoadFontData.
|
||||||
|
* GenImageFontAtlas.
|
||||||
* Audio
|
* Audio
|
||||||
* AudioStream.
|
* AudioStream.
|
||||||
* Models
|
* Models
|
||||||
|
|||||||
@@ -94,7 +94,8 @@ function RL.init()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function isTileWall( pos )
|
local function isTileWall( pos )
|
||||||
if RL.CheckCollisionPointRec( { pos.x, pos.y }, { 0, 0, tilemap.size.x - 1, tilemap.size.y - 1 } ) then
|
-- if RL.CheckCollisionPointRec( { pos.x, pos.y }, { 0, 0, tilemap.size.x - 1, tilemap.size.y - 1 } ) then
|
||||||
|
if RL.CheckCollisionPointRec( { pos.x, pos.y }, { 0, 0, tilemap.size.x, tilemap.size.y } ) then
|
||||||
return 0 < tilemap.tiles[ pos.x + 1 ][ pos.y + 1 ]
|
return 0 < tilemap.tiles[ pos.x + 1 ][ pos.y + 1 ]
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/* Audio device management functions. */
|
/* Audio device management functions. */
|
||||||
|
int laudioInitAudioDevice( lua_State *L );
|
||||||
|
int laudioCloseAudioDevice( lua_State *L );
|
||||||
|
int laudioIsAudioDeviceReady( lua_State *L );
|
||||||
int laudioSetMasterVolume( lua_State *L );
|
int laudioSetMasterVolume( lua_State *L );
|
||||||
|
int laudioGetMasterVolume( lua_State *L );
|
||||||
/* Wave/Sound loading/unloading functions. */
|
/* Wave/Sound loading/unloading functions. */
|
||||||
int laudioLoadSound( lua_State *L );
|
int laudioLoadSound( lua_State *L );
|
||||||
int laudioLoadWave( lua_State *L );
|
int laudioLoadWave( lua_State *L );
|
||||||
int laudioIsWaveReady( lua_State *L );
|
int laudioIsWaveReady( lua_State *L );
|
||||||
int laudioLoadSoundFromWave( lua_State *L );
|
int laudioLoadSoundFromWave( lua_State *L );
|
||||||
|
int laudioLoadSoundAlias( lua_State *L );
|
||||||
int laudioIsSoundReady( lua_State *L );
|
int laudioIsSoundReady( lua_State *L );
|
||||||
int laudioUnloadWave( lua_State *L );
|
int laudioUnloadWave( lua_State *L );
|
||||||
int laudioUnloadSound( lua_State *L );
|
int laudioUnloadSound( lua_State *L );
|
||||||
|
int laudioUnloadSoundAlias( lua_State *L );
|
||||||
int laudioExportWave( lua_State *L );
|
int laudioExportWave( lua_State *L );
|
||||||
int laudioExportWaveAsCode( lua_State *L );
|
int laudioExportWaveAsCode( lua_State *L );
|
||||||
/* Wave/Sound management functions. */
|
/* Wave/Sound management functions. */
|
||||||
|
|||||||
@@ -4,36 +4,44 @@
|
|||||||
|
|
||||||
void unloadBuffer( Buffer *buffer );
|
void unloadBuffer( Buffer *buffer );
|
||||||
/* Window-related functions. */
|
/* Window-related functions. */
|
||||||
|
int lcoreCloseWindow( lua_State *L );
|
||||||
int lcoreIsWindowReady( lua_State *L );
|
int lcoreIsWindowReady( lua_State *L );
|
||||||
int lcoreIsWindowFullscreen( lua_State *L );
|
int lcoreIsWindowFullscreen( lua_State *L );
|
||||||
int lcoreIsWindowHidden( lua_State *L );
|
int lcoreIsWindowHidden( lua_State *L );
|
||||||
int lcoreIsWindowMinimized( lua_State *L );
|
int lcoreIsWindowMinimized( lua_State *L );
|
||||||
int lcoreIsWindowMaximized( lua_State *L );
|
int lcoreIsWindowMaximized( lua_State *L );
|
||||||
int lcoreIsWindowFocused( lua_State *L );
|
int lcoreIsWindowFocused( lua_State *L );
|
||||||
int lcoreSetWindowMonitor( lua_State *L );
|
|
||||||
int lcoreSetWindowPosition( lua_State *L );
|
|
||||||
int lcoreSetWindowSize( lua_State *L );
|
|
||||||
int lcoreSetWindowOpacity( lua_State *L );
|
|
||||||
int lcoreGetWindowHandle( lua_State *L );
|
|
||||||
int lcoreSetWindowMinSize( lua_State *L );
|
|
||||||
int lcoreGetMonitorPosition( lua_State *L );
|
|
||||||
int lcoreGetMonitorSize( lua_State *L );
|
|
||||||
int lcoreGetWindowPosition( lua_State *L );
|
|
||||||
int lcoreGetScreenSize( lua_State *L );
|
|
||||||
int lcoreSetWindowState( lua_State *L );
|
|
||||||
int lcoreIsWindowState( lua_State *L );
|
|
||||||
int lcoreClearWindowState( lua_State *L );
|
|
||||||
int lcoreIsWindowResized( lua_State *L );
|
int lcoreIsWindowResized( lua_State *L );
|
||||||
|
int lcoreIsWindowState( lua_State *L );
|
||||||
|
int lcoreSetWindowState( lua_State *L );
|
||||||
|
int lcoreClearWindowState( lua_State *L );
|
||||||
|
int lcoreToggleFullscreen( lua_State *L );
|
||||||
|
int lcoreToggleBorderlessWindowed( lua_State *L );
|
||||||
|
int lcoreMaximizeWindow( lua_State *L );
|
||||||
|
int lcoreMinimizeWindow( lua_State *L );
|
||||||
|
int lcoreRestoreWindow( lua_State *L );
|
||||||
int lcoreSetWindowIcon( lua_State *L );
|
int lcoreSetWindowIcon( lua_State *L );
|
||||||
int lcoreSetWindowIcons( lua_State *L );
|
int lcoreSetWindowIcons( lua_State *L );
|
||||||
int lcoreSetWindowTitle( lua_State *L );
|
int lcoreSetWindowTitle( lua_State *L );
|
||||||
|
int lcoreSetWindowPosition( lua_State *L );
|
||||||
|
int lcoreSetWindowMonitor( lua_State *L );
|
||||||
|
int lcoreSetWindowMinSize( lua_State *L );
|
||||||
|
int lcoreSetWindowMaxSize( lua_State *L );
|
||||||
|
int lcoreSetWindowSize( lua_State *L );
|
||||||
|
int lcoreSetWindowOpacity( lua_State *L );
|
||||||
|
int lcoreSetWindowFocused( lua_State *L );
|
||||||
|
int lcoreGetWindowHandle( lua_State *L );
|
||||||
|
int lcoreGetScreenSize( lua_State *L );
|
||||||
|
int lcoreGetRenderSize( lua_State *L );
|
||||||
int lcoreGetMonitorCount( lua_State *L );
|
int lcoreGetMonitorCount( lua_State *L );
|
||||||
int lcoreGetCurrentMonitor( lua_State *L );
|
int lcoreGetCurrentMonitor( lua_State *L );
|
||||||
|
int lcoreGetMonitorPosition( lua_State *L );
|
||||||
|
int lcoreGetMonitorSize( lua_State *L );
|
||||||
int lcoreGetMonitorPhysicalSize( lua_State *L );
|
int lcoreGetMonitorPhysicalSize( lua_State *L );
|
||||||
int lcoreGetMonitorRefreshRate( lua_State *L );
|
int lcoreGetMonitorRefreshRate( lua_State *L );
|
||||||
|
int lcoreGetWindowPosition( lua_State *L );
|
||||||
int lcoreGetWindowScaleDPI( lua_State *L );
|
int lcoreGetWindowScaleDPI( lua_State *L );
|
||||||
int lcoreGetMonitorName( lua_State *L );
|
int lcoreGetMonitorName( lua_State *L );
|
||||||
int lcoreCloseWindow( lua_State *L );
|
|
||||||
int lcoreSetClipboardText( lua_State *L );
|
int lcoreSetClipboardText( lua_State *L );
|
||||||
int lcoreGetClipboardText( lua_State *L );
|
int lcoreGetClipboardText( lua_State *L );
|
||||||
/* Cursor-related functions. */
|
/* Cursor-related functions. */
|
||||||
@@ -85,6 +93,10 @@ int lcoreSetTargetFPS( lua_State *L );
|
|||||||
int lcoreGetFPS( lua_State *L );
|
int lcoreGetFPS( lua_State *L );
|
||||||
int lcoreGetFrameTime( lua_State *L );
|
int lcoreGetFrameTime( lua_State *L );
|
||||||
int lcoreGetTime( lua_State *L );
|
int lcoreGetTime( lua_State *L );
|
||||||
|
/* Random values generation functions. */
|
||||||
|
int lcoreSetRandomSeed( lua_State *L );
|
||||||
|
int lcoreGetRandomValue( lua_State *L );
|
||||||
|
int lcoreLoadRandomSequence( lua_State *L );
|
||||||
/* Misc. functions */
|
/* Misc. functions */
|
||||||
int lcoreTakeScreenshot( lua_State *L );
|
int lcoreTakeScreenshot( lua_State *L );
|
||||||
int lcoreSetConfigFlags( lua_State *L );
|
int lcoreSetConfigFlags( lua_State *L );
|
||||||
@@ -107,6 +119,7 @@ int lcoreGetFileNameWithoutExt( lua_State *L );
|
|||||||
int lcoreGetDirectoryPath( lua_State *L );
|
int lcoreGetDirectoryPath( lua_State *L );
|
||||||
int lcoreGetPrevDirectoryPath( lua_State *L );
|
int lcoreGetPrevDirectoryPath( lua_State *L );
|
||||||
int lcoreGetWorkingDirectory( lua_State *L );
|
int lcoreGetWorkingDirectory( lua_State *L );
|
||||||
|
int lcoreGetApplicationDirectory( lua_State *L );
|
||||||
int lcoreLoadDirectoryFiles( lua_State *L );
|
int lcoreLoadDirectoryFiles( lua_State *L );
|
||||||
int lcoreLoadDirectoryFilesEx( lua_State *L );
|
int lcoreLoadDirectoryFilesEx( lua_State *L );
|
||||||
int lcoreChangeDirectory( lua_State *L );
|
int lcoreChangeDirectory( lua_State *L );
|
||||||
@@ -131,12 +144,13 @@ int lcoreGetKeyName( lua_State *L );
|
|||||||
int lcoreGetKeyScancode( lua_State *L );
|
int lcoreGetKeyScancode( lua_State *L );
|
||||||
/* Input-related functions: gamepads. */
|
/* Input-related functions: gamepads. */
|
||||||
int lcoreIsGamepadAvailable( lua_State *L );
|
int lcoreIsGamepadAvailable( lua_State *L );
|
||||||
|
int lcoreGetGamepadName( lua_State *L );
|
||||||
int lcoreIsGamepadButtonPressed( lua_State *L );
|
int lcoreIsGamepadButtonPressed( lua_State *L );
|
||||||
int lcoreIsGamepadButtonDown( lua_State *L );
|
int lcoreIsGamepadButtonDown( lua_State *L );
|
||||||
int lcoreIsGamepadButtonReleased( lua_State *L );
|
int lcoreIsGamepadButtonReleased( lua_State *L );
|
||||||
int lcoreGetGamepadAxisCount( lua_State *L );
|
int lcoreGetGamepadAxisCount( lua_State *L );
|
||||||
int lcoreGetGamepadAxisMovement( lua_State *L );
|
int lcoreGetGamepadAxisMovement( lua_State *L );
|
||||||
int lcoreGetGamepadName( lua_State *L );
|
int lcoreSetGamepadMappings( lua_State *L );
|
||||||
/* Input-related functions: mouse. */
|
/* Input-related functions: mouse. */
|
||||||
int lcoreIsMouseButtonPressed( lua_State *L );
|
int lcoreIsMouseButtonPressed( lua_State *L );
|
||||||
int lcoreIsMouseButtonDown( lua_State *L );
|
int lcoreIsMouseButtonDown( lua_State *L );
|
||||||
|
|||||||
@@ -3,14 +3,18 @@
|
|||||||
#define STRING_LEN 1024
|
#define STRING_LEN 1024
|
||||||
|
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 6
|
#define VERSION_MINOR 7
|
||||||
#define VERSION_PATCH 0
|
#define VERSION_PATCH 0
|
||||||
#define VERSION_DEV 0
|
#define VERSION_DEV 1
|
||||||
|
|
||||||
#include "glad.h"
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "glad.h"
|
||||||
|
#include "glfw3.h"
|
||||||
|
#include "glfw3native.h"
|
||||||
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
@@ -28,9 +32,6 @@
|
|||||||
#include "rcamera.h"
|
#include "rcamera.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "glfw3.h"
|
|
||||||
#include "glfw3native.h"
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#ifdef LUAJIT
|
#ifdef LUAJIT
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
|
|||||||
172
include/raylib.h
172
include/raylib.h
@@ -1,6 +1,6 @@
|
|||||||
/**********************************************************************************************
|
/**********************************************************************************************
|
||||||
*
|
*
|
||||||
* raylib v4.5 - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com)
|
* raylib v5.0 - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com)
|
||||||
*
|
*
|
||||||
* FEATURES:
|
* FEATURES:
|
||||||
* - NO external dependencies, all required libraries included with raylib
|
* - NO external dependencies, all required libraries included with raylib
|
||||||
@@ -81,10 +81,10 @@
|
|||||||
|
|
||||||
#include <stdarg.h> // Required for: va_list - Only used by TraceLogCallback
|
#include <stdarg.h> // Required for: va_list - Only used by TraceLogCallback
|
||||||
|
|
||||||
#define RAYLIB_VERSION_MAJOR 4
|
#define RAYLIB_VERSION_MAJOR 5
|
||||||
#define RAYLIB_VERSION_MINOR 5
|
#define RAYLIB_VERSION_MINOR 0
|
||||||
#define RAYLIB_VERSION_PATCH 0
|
#define RAYLIB_VERSION_PATCH 0
|
||||||
#define RAYLIB_VERSION "4.5"
|
#define RAYLIB_VERSION "5.0"
|
||||||
|
|
||||||
// Function specifiers in case library is build/used as a shared library (Windows)
|
// Function specifiers in case library is build/used as a shared library (Windows)
|
||||||
// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
|
// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
|
||||||
@@ -133,12 +133,20 @@
|
|||||||
|
|
||||||
// NOTE: MSVC C++ compiler does not support compound literals (C99 feature)
|
// NOTE: MSVC C++ compiler does not support compound literals (C99 feature)
|
||||||
// Plain structures in C++ (without constructors) can be initialized with { }
|
// Plain structures in C++ (without constructors) can be initialized with { }
|
||||||
|
// This is called aggregate initialization (C++11 feature)
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
#define CLITERAL(type) type
|
#define CLITERAL(type) type
|
||||||
#else
|
#else
|
||||||
#define CLITERAL(type) (type)
|
#define CLITERAL(type) (type)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Some compilers (mostly macos clang) default to C++98,
|
||||||
|
// where aggregate initialization can't be used
|
||||||
|
// So, give a more clear error stating how to fix this
|
||||||
|
#if !defined(_MSC_VER) && (defined(__cplusplus) && __cplusplus < 201103L)
|
||||||
|
#error "C++11 or later is required. Add -std=c++11"
|
||||||
|
#endif
|
||||||
|
|
||||||
// NOTE: We set some defines with some data types declared by raylib
|
// NOTE: We set some defines with some data types declared by raylib
|
||||||
// Other modules (raymath, rlgl) also require some of those types, so,
|
// Other modules (raymath, rlgl) also require some of those types, so,
|
||||||
// to be able to use those other modules as standalone (not depending on raylib)
|
// to be able to use those other modules as standalone (not depending on raylib)
|
||||||
@@ -402,6 +410,7 @@ typedef struct ModelAnimation {
|
|||||||
int frameCount; // Number of animation frames
|
int frameCount; // Number of animation frames
|
||||||
BoneInfo *bones; // Bones information (skeleton)
|
BoneInfo *bones; // Bones information (skeleton)
|
||||||
Transform **framePoses; // Poses array by frame
|
Transform **framePoses; // Poses array by frame
|
||||||
|
char name[32]; // Animation name
|
||||||
} ModelAnimation;
|
} ModelAnimation;
|
||||||
|
|
||||||
// Ray, ray for raycasting
|
// Ray, ray for raycasting
|
||||||
@@ -497,6 +506,20 @@ typedef struct FilePathList {
|
|||||||
char **paths; // Filepaths entries
|
char **paths; // Filepaths entries
|
||||||
} FilePathList;
|
} FilePathList;
|
||||||
|
|
||||||
|
// Automation event
|
||||||
|
typedef struct AutomationEvent {
|
||||||
|
unsigned int frame; // Event frame
|
||||||
|
unsigned int type; // Event type (AutomationEventType)
|
||||||
|
int params[4]; // Event parameters (if required)
|
||||||
|
} AutomationEvent;
|
||||||
|
|
||||||
|
// Automation event list
|
||||||
|
typedef struct AutomationEventList {
|
||||||
|
unsigned int capacity; // Events max entries (MAX_AUTOMATION_EVENTS)
|
||||||
|
unsigned int count; // Events entries count
|
||||||
|
AutomationEvent *events; // Events entries
|
||||||
|
} AutomationEventList;
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Enumerators Definition
|
// Enumerators Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
@@ -517,6 +540,7 @@ typedef enum {
|
|||||||
FLAG_WINDOW_TRANSPARENT = 0x00000010, // Set to allow transparent framebuffer
|
FLAG_WINDOW_TRANSPARENT = 0x00000010, // Set to allow transparent framebuffer
|
||||||
FLAG_WINDOW_HIGHDPI = 0x00002000, // Set to support HighDPI
|
FLAG_WINDOW_HIGHDPI = 0x00002000, // Set to support HighDPI
|
||||||
FLAG_WINDOW_MOUSE_PASSTHROUGH = 0x00004000, // Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED
|
FLAG_WINDOW_MOUSE_PASSTHROUGH = 0x00004000, // Set to support mouse passthrough, only supported when FLAG_WINDOW_UNDECORATED
|
||||||
|
FLAG_BORDERLESS_WINDOWED_MODE = 0x00008000, // Set to run program in borderless windowed mode
|
||||||
FLAG_MSAA_4X_HINT = 0x00000020, // Set to try enabling MSAA 4X
|
FLAG_MSAA_4X_HINT = 0x00000020, // Set to try enabling MSAA 4X
|
||||||
FLAG_INTERLACED_HINT = 0x00010000 // Set to try enabling interlaced video format (for V3D)
|
FLAG_INTERLACED_HINT = 0x00010000 // Set to try enabling interlaced video format (for V3D)
|
||||||
} ConfigFlags;
|
} ConfigFlags;
|
||||||
@@ -802,6 +826,9 @@ typedef enum {
|
|||||||
PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
|
PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
|
||||||
PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
|
PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
|
||||||
PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
|
PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
|
||||||
|
PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float)
|
||||||
|
PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float)
|
||||||
|
PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float)
|
||||||
PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
|
PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
|
||||||
PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
|
PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
|
||||||
PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
|
PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
|
||||||
@@ -905,8 +932,8 @@ typedef enum {
|
|||||||
// Callbacks to hook some internal functions
|
// Callbacks to hook some internal functions
|
||||||
// WARNING: These callbacks are intended for advance users
|
// WARNING: These callbacks are intended for advance users
|
||||||
typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); // Logging: Redirect trace log messages
|
typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); // Logging: Redirect trace log messages
|
||||||
typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, unsigned int *bytesRead); // FileIO: Load binary data
|
typedef unsigned char *(*LoadFileDataCallback)(const char *fileName, int *dataSize); // FileIO: Load binary data
|
||||||
typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, unsigned int bytesToWrite); // FileIO: Save binary data
|
typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, int dataSize); // FileIO: Save binary data
|
||||||
typedef char *(*LoadFileTextCallback)(const char *fileName); // FileIO: Load text data
|
typedef char *(*LoadFileTextCallback)(const char *fileName); // FileIO: Load text data
|
||||||
typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); // FileIO: Save text data
|
typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); // FileIO: Save text data
|
||||||
|
|
||||||
@@ -925,8 +952,8 @@ extern "C" { // Prevents name mangling of functions
|
|||||||
|
|
||||||
// Window-related functions
|
// Window-related functions
|
||||||
RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context
|
RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context
|
||||||
RLAPI bool WindowShouldClose(void); // Check if KEY_ESCAPE pressed or Close icon pressed
|
|
||||||
RLAPI void CloseWindow(void); // Close window and unload OpenGL context
|
RLAPI void CloseWindow(void); // Close window and unload OpenGL context
|
||||||
|
RLAPI bool WindowShouldClose(void); // Check if application should close (KEY_ESCAPE pressed or windows close icon clicked)
|
||||||
RLAPI bool IsWindowReady(void); // Check if window has been initialized successfully
|
RLAPI bool IsWindowReady(void); // Check if window has been initialized successfully
|
||||||
RLAPI bool IsWindowFullscreen(void); // Check if window is currently fullscreen
|
RLAPI bool IsWindowFullscreen(void); // Check if window is currently fullscreen
|
||||||
RLAPI bool IsWindowHidden(void); // Check if window is currently hidden (only PLATFORM_DESKTOP)
|
RLAPI bool IsWindowHidden(void); // Check if window is currently hidden (only PLATFORM_DESKTOP)
|
||||||
@@ -938,17 +965,20 @@ RLAPI bool IsWindowState(unsigned int flag); // Check if on
|
|||||||
RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags (only PLATFORM_DESKTOP)
|
RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags (only PLATFORM_DESKTOP)
|
||||||
RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags
|
RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags
|
||||||
RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
|
RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
|
||||||
|
RLAPI void ToggleBorderlessWindowed(void); // Toggle window state: borderless windowed (only PLATFORM_DESKTOP)
|
||||||
RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
|
RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
|
||||||
RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
|
RLAPI void MinimizeWindow(void); // Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
|
||||||
RLAPI void RestoreWindow(void); // Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
|
RLAPI void RestoreWindow(void); // Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowIcon(Image image); // Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)
|
RLAPI void SetWindowIcon(Image image); // Set icon for window (single image, RGBA 32bit, only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowIcons(Image *images, int count); // Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
|
RLAPI void SetWindowIcons(Image *images, int count); // Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP)
|
RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)
|
||||||
RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP)
|
RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP)
|
||||||
RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode)
|
RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window
|
||||||
RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
RLAPI void SetWindowMaxSize(int width, int height); // Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
RLAPI void SetWindowSize(int width, int height); // Set window dimensions
|
RLAPI void SetWindowSize(int width, int height); // Set window dimensions
|
||||||
RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
|
RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
|
||||||
|
RLAPI void SetWindowFocused(void); // Set window focused (only PLATFORM_DESKTOP)
|
||||||
RLAPI void *GetWindowHandle(void); // Get native window handle
|
RLAPI void *GetWindowHandle(void); // Get native window handle
|
||||||
RLAPI int GetScreenWidth(void); // Get current screen width
|
RLAPI int GetScreenWidth(void); // Get current screen width
|
||||||
RLAPI int GetScreenHeight(void); // Get current screen height
|
RLAPI int GetScreenHeight(void); // Get current screen height
|
||||||
@@ -964,20 +994,12 @@ RLAPI int GetMonitorPhysicalHeight(int monitor); // Get specifi
|
|||||||
RLAPI int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate
|
RLAPI int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate
|
||||||
RLAPI Vector2 GetWindowPosition(void); // Get window position XY on monitor
|
RLAPI Vector2 GetWindowPosition(void); // Get window position XY on monitor
|
||||||
RLAPI Vector2 GetWindowScaleDPI(void); // Get window scale DPI factor
|
RLAPI Vector2 GetWindowScaleDPI(void); // Get window scale DPI factor
|
||||||
RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the primary monitor
|
RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the specified monitor
|
||||||
RLAPI void SetClipboardText(const char *text); // Set clipboard text content
|
RLAPI void SetClipboardText(const char *text); // Set clipboard text content
|
||||||
RLAPI const char *GetClipboardText(void); // Get clipboard text content
|
RLAPI const char *GetClipboardText(void); // Get clipboard text content
|
||||||
RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling
|
RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling
|
||||||
RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling
|
RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling
|
||||||
|
|
||||||
// Custom frame control functions
|
|
||||||
// NOTE: Those functions are intended for advance users that want full control over the frame processing
|
|
||||||
// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timing + PollInputEvents()
|
|
||||||
// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL
|
|
||||||
RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing)
|
|
||||||
RLAPI void PollInputEvents(void); // Register all input events
|
|
||||||
RLAPI void WaitTime(double seconds); // Wait for some time (halt program execution)
|
|
||||||
|
|
||||||
// Cursor-related functions
|
// Cursor-related functions
|
||||||
RLAPI void ShowCursor(void); // Shows cursor
|
RLAPI void ShowCursor(void); // Shows cursor
|
||||||
RLAPI void HideCursor(void); // Hides cursor
|
RLAPI void HideCursor(void); // Hides cursor
|
||||||
@@ -1033,24 +1055,37 @@ RLAPI Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Get the
|
|||||||
|
|
||||||
// Timing-related functions
|
// Timing-related functions
|
||||||
RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum)
|
RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum)
|
||||||
RLAPI int GetFPS(void); // Get current FPS
|
|
||||||
RLAPI float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time)
|
RLAPI float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time)
|
||||||
RLAPI double GetTime(void); // Get elapsed time in seconds since InitWindow()
|
RLAPI double GetTime(void); // Get elapsed time in seconds since InitWindow()
|
||||||
|
RLAPI int GetFPS(void); // Get current FPS
|
||||||
|
|
||||||
|
// Custom frame control functions
|
||||||
|
// NOTE: Those functions are intended for advance users that want full control over the frame processing
|
||||||
|
// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timing + PollInputEvents()
|
||||||
|
// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL
|
||||||
|
RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing)
|
||||||
|
RLAPI void PollInputEvents(void); // Register all input events
|
||||||
|
RLAPI void WaitTime(double seconds); // Wait for some time (halt program execution)
|
||||||
|
|
||||||
|
// Random values generation functions
|
||||||
|
RLAPI void SetRandomSeed(unsigned int seed); // Set the seed for the random number generator
|
||||||
|
RLAPI int GetRandomValue(int min, int max); // Get a random value between min and max (both included)
|
||||||
|
RLAPI int *LoadRandomSequence(unsigned int count, int min, int max); // Load random values sequence, no values repeated
|
||||||
|
RLAPI void UnloadRandomSequence(int *sequence); // Unload random values sequence
|
||||||
|
|
||||||
// Misc. functions
|
// Misc. functions
|
||||||
RLAPI int GetRandomValue(int min, int max); // Get a random value between min and max (both included)
|
|
||||||
RLAPI void SetRandomSeed(unsigned int seed); // Set the seed for the random number generator
|
|
||||||
RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format)
|
RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format)
|
||||||
RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS)
|
RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS)
|
||||||
|
RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available)
|
||||||
|
|
||||||
|
// NOTE: Following functions implemented in module [utils]
|
||||||
|
//------------------------------------------------------------------
|
||||||
RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)
|
RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...)
|
||||||
RLAPI void SetTraceLogLevel(int logLevel); // Set the current threshold (minimum) log level
|
RLAPI void SetTraceLogLevel(int logLevel); // Set the current threshold (minimum) log level
|
||||||
RLAPI void *MemAlloc(unsigned int size); // Internal memory allocator
|
RLAPI void *MemAlloc(unsigned int size); // Internal memory allocator
|
||||||
RLAPI void *MemRealloc(void *ptr, unsigned int size); // Internal memory reallocator
|
RLAPI void *MemRealloc(void *ptr, unsigned int size); // Internal memory reallocator
|
||||||
RLAPI void MemFree(void *ptr); // Internal memory free
|
RLAPI void MemFree(void *ptr); // Internal memory free
|
||||||
|
|
||||||
RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available)
|
|
||||||
|
|
||||||
// Set custom callbacks
|
// Set custom callbacks
|
||||||
// WARNING: Callbacks setup is intended for advance users
|
// WARNING: Callbacks setup is intended for advance users
|
||||||
RLAPI void SetTraceLogCallback(TraceLogCallback callback); // Set custom trace log
|
RLAPI void SetTraceLogCallback(TraceLogCallback callback); // Set custom trace log
|
||||||
@@ -1060,13 +1095,16 @@ RLAPI void SetLoadFileTextCallback(LoadFileTextCallback callback); // Set custom
|
|||||||
RLAPI void SetSaveFileTextCallback(SaveFileTextCallback callback); // Set custom file text data saver
|
RLAPI void SetSaveFileTextCallback(SaveFileTextCallback callback); // Set custom file text data saver
|
||||||
|
|
||||||
// Files management functions
|
// Files management functions
|
||||||
RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); // Load file data as byte array (read)
|
RLAPI unsigned char *LoadFileData(const char *fileName, int *dataSize); // Load file data as byte array (read)
|
||||||
RLAPI void UnloadFileData(unsigned char *data); // Unload file data allocated by LoadFileData()
|
RLAPI void UnloadFileData(unsigned char *data); // Unload file data allocated by LoadFileData()
|
||||||
RLAPI bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); // Save data to file from byte array (write), returns true on success
|
RLAPI bool SaveFileData(const char *fileName, void *data, int dataSize); // Save data to file from byte array (write), returns true on success
|
||||||
RLAPI bool ExportDataAsCode(const unsigned char *data, unsigned int size, const char *fileName); // Export data to code (.h), returns true on success
|
RLAPI bool ExportDataAsCode(const unsigned char *data, int dataSize, const char *fileName); // Export data to code (.h), returns true on success
|
||||||
RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string
|
RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string
|
||||||
RLAPI void UnloadFileText(char *text); // Unload file text data allocated by LoadFileText()
|
RLAPI void UnloadFileText(char *text); // Unload file text data allocated by LoadFileText()
|
||||||
RLAPI bool SaveFileText(const char *fileName, char *text); // Save text data to file (write), string must be '\0' terminated, returns true on success
|
RLAPI bool SaveFileText(const char *fileName, char *text); // Save text data to file (write), string must be '\0' terminated, returns true on success
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
// File system functions
|
||||||
RLAPI bool FileExists(const char *fileName); // Check if file exists
|
RLAPI bool FileExists(const char *fileName); // Check if file exists
|
||||||
RLAPI bool DirectoryExists(const char *dirPath); // Check if a directory path exists
|
RLAPI bool DirectoryExists(const char *dirPath); // Check if a directory path exists
|
||||||
RLAPI bool IsFileExtension(const char *fileName, const char *ext); // Check file extension (including point: .png, .wav)
|
RLAPI bool IsFileExtension(const char *fileName, const char *ext); // Check file extension (including point: .png, .wav)
|
||||||
@@ -1077,7 +1115,7 @@ RLAPI const char *GetFileNameWithoutExt(const char *filePath); // Get filenam
|
|||||||
RLAPI const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string)
|
RLAPI const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string)
|
||||||
RLAPI const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string)
|
RLAPI const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string)
|
||||||
RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string)
|
RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string)
|
||||||
RLAPI const char *GetApplicationDirectory(void); // Get the directory if the running application (uses static string)
|
RLAPI const char *GetApplicationDirectory(void); // Get the directory of the running application (uses static string)
|
||||||
RLAPI bool ChangeDirectory(const char *dir); // Change working directory, return true on success
|
RLAPI bool ChangeDirectory(const char *dir); // Change working directory, return true on success
|
||||||
RLAPI bool IsPathFile(const char *path); // Check if a given path is a file or a directory
|
RLAPI bool IsPathFile(const char *path); // Check if a given path is a file or a directory
|
||||||
RLAPI FilePathList LoadDirectoryFiles(const char *dirPath); // Load directory filepaths
|
RLAPI FilePathList LoadDirectoryFiles(const char *dirPath); // Load directory filepaths
|
||||||
@@ -1094,18 +1132,29 @@ RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataS
|
|||||||
RLAPI char *EncodeDataBase64(const unsigned char *data, int dataSize, int *outputSize); // Encode data to Base64 string, memory must be MemFree()
|
RLAPI char *EncodeDataBase64(const unsigned char *data, int dataSize, int *outputSize); // Encode data to Base64 string, memory must be MemFree()
|
||||||
RLAPI unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize); // Decode Base64 string data, memory must be MemFree()
|
RLAPI unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize); // Decode Base64 string data, memory must be MemFree()
|
||||||
|
|
||||||
|
// Automation events functionality
|
||||||
|
RLAPI AutomationEventList LoadAutomationEventList(const char *fileName); // Load automation events list from file, NULL for empty list, capacity = MAX_AUTOMATION_EVENTS
|
||||||
|
RLAPI void UnloadAutomationEventList(AutomationEventList *list); // Unload automation events list from file
|
||||||
|
RLAPI bool ExportAutomationEventList(AutomationEventList list, const char *fileName); // Export automation events list as text file
|
||||||
|
RLAPI void SetAutomationEventList(AutomationEventList *list); // Set automation event list to record to
|
||||||
|
RLAPI void SetAutomationEventBaseFrame(int frame); // Set automation event internal base frame to start recording
|
||||||
|
RLAPI void StartAutomationEventRecording(void); // Start recording automation events (AutomationEventList must be set)
|
||||||
|
RLAPI void StopAutomationEventRecording(void); // Stop recording automation events
|
||||||
|
RLAPI void PlayAutomationEvent(AutomationEvent event); // Play a recorded automation event
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Input Handling Functions (Module: core)
|
// Input Handling Functions (Module: core)
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Input-related functions: keyboard
|
// Input-related functions: keyboard
|
||||||
RLAPI bool IsKeyPressed(int key); // Check if a key has been pressed once
|
RLAPI bool IsKeyPressed(int key); // Check if a key has been pressed once
|
||||||
|
RLAPI bool IsKeyPressedRepeat(int key); // Check if a key has been pressed again (Only PLATFORM_DESKTOP)
|
||||||
RLAPI bool IsKeyDown(int key); // Check if a key is being pressed
|
RLAPI bool IsKeyDown(int key); // Check if a key is being pressed
|
||||||
RLAPI bool IsKeyReleased(int key); // Check if a key has been released once
|
RLAPI bool IsKeyReleased(int key); // Check if a key has been released once
|
||||||
RLAPI bool IsKeyUp(int key); // Check if a key is NOT being pressed
|
RLAPI bool IsKeyUp(int key); // Check if a key is NOT being pressed
|
||||||
RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
|
|
||||||
RLAPI int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty
|
RLAPI int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty
|
||||||
RLAPI int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty
|
RLAPI int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty
|
||||||
|
RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC)
|
||||||
|
|
||||||
// Input-related functions: gamepads
|
// Input-related functions: gamepads
|
||||||
RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available
|
RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available
|
||||||
@@ -1146,7 +1195,7 @@ RLAPI int GetTouchPointCount(void); // Get number of t
|
|||||||
// Gestures and Touch Handling Functions (Module: rgestures)
|
// Gestures and Touch Handling Functions (Module: rgestures)
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
RLAPI void SetGesturesEnabled(unsigned int flags); // Enable a set of gestures using flags
|
RLAPI void SetGesturesEnabled(unsigned int flags); // Enable a set of gestures using flags
|
||||||
RLAPI bool IsGestureDetected(int gesture); // Check if a gesture have been detected
|
RLAPI bool IsGestureDetected(unsigned int gesture); // Check if a gesture have been detected
|
||||||
RLAPI int GetGestureDetected(void); // Get latest detected gesture
|
RLAPI int GetGestureDetected(void); // Get latest detected gesture
|
||||||
RLAPI float GetGestureHoldDuration(void); // Get gesture hold time in milliseconds
|
RLAPI float GetGestureHoldDuration(void); // Get gesture hold time in milliseconds
|
||||||
RLAPI Vector2 GetGestureDragVector(void); // Get gesture drag vector
|
RLAPI Vector2 GetGestureDragVector(void); // Get gesture drag vector
|
||||||
@@ -1172,18 +1221,17 @@ RLAPI void SetShapesTexture(Texture2D texture, Rectangle source); // Set t
|
|||||||
RLAPI void DrawPixel(int posX, int posY, Color color); // Draw a pixel
|
RLAPI void DrawPixel(int posX, int posY, Color color); // Draw a pixel
|
||||||
RLAPI void DrawPixelV(Vector2 position, Color color); // Draw a pixel (Vector version)
|
RLAPI void DrawPixelV(Vector2 position, Color color); // Draw a pixel (Vector version)
|
||||||
RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line
|
RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line
|
||||||
RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (Vector version)
|
RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (using gl lines)
|
||||||
RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line defining thickness
|
RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line (using triangles/quads)
|
||||||
RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line using cubic-bezier curves in-out
|
RLAPI void DrawLineStrip(Vector2 *points, int pointCount, Color color); // Draw lines sequence (using gl lines)
|
||||||
RLAPI void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); // Draw line using quadratic bezier curves with a control point
|
RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw line segment cubic-bezier in-out interpolation
|
||||||
RLAPI void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color); // Draw line using cubic bezier curves with 2 control points
|
|
||||||
RLAPI void DrawLineStrip(Vector2 *points, int pointCount, Color color); // Draw lines sequence
|
|
||||||
RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle
|
RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle
|
||||||
RLAPI void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw a piece of a circle
|
RLAPI void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw a piece of a circle
|
||||||
RLAPI void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw circle sector outline
|
RLAPI void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw circle sector outline
|
||||||
RLAPI void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); // Draw a gradient-filled circle
|
RLAPI void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); // Draw a gradient-filled circle
|
||||||
RLAPI void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version)
|
RLAPI void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version)
|
||||||
RLAPI void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline
|
RLAPI void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline
|
||||||
|
RLAPI void DrawCircleLinesV(Vector2 center, float radius, Color color); // Draw circle outline (Vector version)
|
||||||
RLAPI void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse
|
RLAPI void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse
|
||||||
RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline
|
RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline
|
||||||
RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring
|
RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring
|
||||||
@@ -1207,6 +1255,25 @@ RLAPI void DrawPoly(Vector2 center, int sides, float radius, float rotation, Col
|
|||||||
RLAPI void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides
|
RLAPI void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides
|
||||||
RLAPI void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); // Draw a polygon outline of n sides with extended parameters
|
RLAPI void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); // Draw a polygon outline of n sides with extended parameters
|
||||||
|
|
||||||
|
// Splines drawing functions
|
||||||
|
RLAPI void DrawSplineLinear(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Linear, minimum 2 points
|
||||||
|
RLAPI void DrawSplineBasis(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: B-Spline, minimum 4 points
|
||||||
|
RLAPI void DrawSplineCatmullRom(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Catmull-Rom, minimum 4 points
|
||||||
|
RLAPI void DrawSplineBezierQuadratic(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
|
||||||
|
RLAPI void DrawSplineBezierCubic(Vector2 *points, int pointCount, float thick, Color color); // Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
|
||||||
|
RLAPI void DrawSplineSegmentLinear(Vector2 p1, Vector2 p2, float thick, Color color); // Draw spline segment: Linear, 2 points
|
||||||
|
RLAPI void DrawSplineSegmentBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: B-Spline, 4 points
|
||||||
|
RLAPI void DrawSplineSegmentCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color); // Draw spline segment: Catmull-Rom, 4 points
|
||||||
|
RLAPI void DrawSplineSegmentBezierQuadratic(Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color); // Draw spline segment: Quadratic Bezier, 2 points, 1 control point
|
||||||
|
RLAPI void DrawSplineSegmentBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color); // Draw spline segment: Cubic Bezier, 2 points, 2 control points
|
||||||
|
|
||||||
|
// Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]
|
||||||
|
RLAPI Vector2 GetSplinePointLinear(Vector2 startPos, Vector2 endPos, float t); // Get (evaluate) spline point: Linear
|
||||||
|
RLAPI Vector2 GetSplinePointBasis(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: B-Spline
|
||||||
|
RLAPI Vector2 GetSplinePointCatmullRom(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t); // Get (evaluate) spline point: Catmull-Rom
|
||||||
|
RLAPI Vector2 GetSplinePointBezierQuad(Vector2 p1, Vector2 c2, Vector2 p3, float t); // Get (evaluate) spline point: Quadratic Bezier
|
||||||
|
RLAPI Vector2 GetSplinePointBezierCubic(Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t); // Get (evaluate) spline point: Cubic Bezier
|
||||||
|
|
||||||
// Basic shapes collision detection functions
|
// Basic shapes collision detection functions
|
||||||
RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles
|
RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles
|
||||||
RLAPI bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles
|
RLAPI bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles
|
||||||
@@ -1227,6 +1294,7 @@ RLAPI Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2);
|
|||||||
// NOTE: These functions do not require GPU access
|
// NOTE: These functions do not require GPU access
|
||||||
RLAPI Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM)
|
RLAPI Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM)
|
||||||
RLAPI Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data
|
RLAPI Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data
|
||||||
|
RLAPI Image LoadImageSvg(const char *fileNameOrString, int width, int height); // Load image from SVG file data or string with specified size
|
||||||
RLAPI Image LoadImageAnim(const char *fileName, int *frames); // Load image sequence from file (frames appended to image.data)
|
RLAPI Image LoadImageAnim(const char *fileName, int *frames); // Load image sequence from file (frames appended to image.data)
|
||||||
RLAPI Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. '.png'
|
RLAPI Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. '.png'
|
||||||
RLAPI Image LoadImageFromTexture(Texture2D texture); // Load image from GPU texture data
|
RLAPI Image LoadImageFromTexture(Texture2D texture); // Load image from GPU texture data
|
||||||
@@ -1234,13 +1302,14 @@ RLAPI Image LoadImageFromScreen(void);
|
|||||||
RLAPI bool IsImageReady(Image image); // Check if an image is ready
|
RLAPI bool IsImageReady(Image image); // Check if an image is ready
|
||||||
RLAPI void UnloadImage(Image image); // Unload image from CPU memory (RAM)
|
RLAPI void UnloadImage(Image image); // Unload image from CPU memory (RAM)
|
||||||
RLAPI bool ExportImage(Image image, const char *fileName); // Export image data to file, returns true on success
|
RLAPI bool ExportImage(Image image, const char *fileName); // Export image data to file, returns true on success
|
||||||
|
RLAPI unsigned char *ExportImageToMemory(Image image, const char *fileType, int *fileSize); // Export image to memory buffer
|
||||||
RLAPI bool ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes, returns true on success
|
RLAPI bool ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes, returns true on success
|
||||||
|
|
||||||
// Image generation functions
|
// Image generation functions
|
||||||
RLAPI Image GenImageColor(int width, int height, Color color); // Generate image: plain color
|
RLAPI Image GenImageColor(int width, int height, Color color); // Generate image: plain color
|
||||||
RLAPI Image GenImageGradientV(int width, int height, Color top, Color bottom); // Generate image: vertical gradient
|
RLAPI Image GenImageGradientLinear(int width, int height, int direction, Color start, Color end); // Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
|
||||||
RLAPI Image GenImageGradientH(int width, int height, Color left, Color right); // Generate image: horizontal gradient
|
|
||||||
RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient
|
RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient
|
||||||
|
RLAPI Image GenImageGradientSquare(int width, int height, float density, Color inner, Color outer); // Generate image: square gradient
|
||||||
RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked
|
RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked
|
||||||
RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise
|
RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise
|
||||||
RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise
|
RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise
|
||||||
@@ -1267,6 +1336,7 @@ RLAPI void ImageMipmaps(Image *image);
|
|||||||
RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
|
RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
|
||||||
RLAPI void ImageFlipVertical(Image *image); // Flip image vertically
|
RLAPI void ImageFlipVertical(Image *image); // Flip image vertically
|
||||||
RLAPI void ImageFlipHorizontal(Image *image); // Flip image horizontally
|
RLAPI void ImageFlipHorizontal(Image *image); // Flip image horizontally
|
||||||
|
RLAPI void ImageRotate(Image *image, int degrees); // Rotate image by input angle in degrees (-359 to 359)
|
||||||
RLAPI void ImageRotateCW(Image *image); // Rotate image clockwise 90deg
|
RLAPI void ImageRotateCW(Image *image); // Rotate image clockwise 90deg
|
||||||
RLAPI void ImageRotateCCW(Image *image); // Rotate image counter-clockwise 90deg
|
RLAPI void ImageRotateCCW(Image *image); // Rotate image counter-clockwise 90deg
|
||||||
RLAPI void ImageColorTint(Image *image, Color color); // Modify image color: tint
|
RLAPI void ImageColorTint(Image *image, Color color); // Modify image color: tint
|
||||||
@@ -1309,7 +1379,7 @@ RLAPI TextureCubemap LoadTextureCubemap(Image image, int layout);
|
|||||||
RLAPI RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer)
|
RLAPI RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer)
|
||||||
RLAPI bool IsTextureReady(Texture2D texture); // Check if a texture is ready
|
RLAPI bool IsTextureReady(Texture2D texture); // Check if a texture is ready
|
||||||
RLAPI void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM)
|
RLAPI void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM)
|
||||||
RLAPI bool IsRenderTextureReady(RenderTexture2D target); // Check if a render texture is ready
|
RLAPI bool IsRenderTextureReady(RenderTexture2D target); // Check if a render texture is ready
|
||||||
RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM)
|
RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM)
|
||||||
RLAPI void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data
|
RLAPI void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data
|
||||||
RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data
|
RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data
|
||||||
@@ -1351,13 +1421,13 @@ RLAPI int GetPixelDataSize(int width, int height, int format); // G
|
|||||||
// Font loading/unloading functions
|
// Font loading/unloading functions
|
||||||
RLAPI Font GetFontDefault(void); // Get the default Font
|
RLAPI Font GetFontDefault(void); // Get the default Font
|
||||||
RLAPI Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM)
|
RLAPI Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM)
|
||||||
RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount); // Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set
|
RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // Load font from file with extended parameters, use NULL for codepoints and 0 for codepointCount to load the default character set
|
||||||
RLAPI Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style)
|
RLAPI Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style)
|
||||||
RLAPI Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int glyphCount); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
RLAPI Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf'
|
||||||
RLAPI bool IsFontReady(Font font); // Check if a font is ready
|
RLAPI bool IsFontReady(Font font); // Check if a font is ready
|
||||||
RLAPI GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int glyphCount, int type); // Load font data for further use
|
RLAPI GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *codepoints, int codepointCount, int type); // Load font data for further use
|
||||||
RLAPI Image GenImageFontAtlas(const GlyphInfo *chars, Rectangle **recs, int glyphCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info
|
RLAPI Image GenImageFontAtlas(const GlyphInfo *glyphs, Rectangle **glyphRecs, int glyphCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info
|
||||||
RLAPI void UnloadFontData(GlyphInfo *chars, int glyphCount); // Unload font chars info data (RAM)
|
RLAPI void UnloadFontData(GlyphInfo *glyphs, int glyphCount); // Unload font chars info data (RAM)
|
||||||
RLAPI void UnloadFont(Font font); // Unload font from GPU memory (VRAM)
|
RLAPI void UnloadFont(Font font); // Unload font from GPU memory (VRAM)
|
||||||
RLAPI bool ExportFontAsCode(Font font, const char *fileName); // Export font as code file, returns true on success
|
RLAPI bool ExportFontAsCode(Font font, const char *fileName); // Export font as code file, returns true on success
|
||||||
|
|
||||||
@@ -1367,9 +1437,10 @@ RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color co
|
|||||||
RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters
|
RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters
|
||||||
RLAPI void DrawTextPro(Font font, const char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); // Draw text using Font and pro parameters (rotation)
|
RLAPI void DrawTextPro(Font font, const char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); // Draw text using Font and pro parameters (rotation)
|
||||||
RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint)
|
RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint)
|
||||||
RLAPI void DrawTextCodepoints(Font font, const int *codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint)
|
RLAPI void DrawTextCodepoints(Font font, const int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint)
|
||||||
|
|
||||||
// Text font info functions
|
// Text font info functions
|
||||||
|
RLAPI void SetTextLineSpacing(int spacing); // Set vertical line spacing when drawing with line-breaks
|
||||||
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
|
RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font
|
||||||
RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font
|
RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font
|
||||||
RLAPI int GetGlyphIndex(Font font, int codepoint); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found
|
RLAPI int GetGlyphIndex(Font font, int codepoint); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found
|
||||||
@@ -1485,10 +1556,10 @@ RLAPI void SetMaterialTexture(Material *material, int mapType, Texture2D texture
|
|||||||
RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh
|
RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh
|
||||||
|
|
||||||
// Model animations loading/unloading functions
|
// Model animations loading/unloading functions
|
||||||
RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, unsigned int *animCount); // Load model animations from file
|
RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file
|
||||||
RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose
|
RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose
|
||||||
RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data
|
RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data
|
||||||
RLAPI void UnloadModelAnimations(ModelAnimation *animations, unsigned int count); // Unload animation array data
|
RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data
|
||||||
RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match
|
RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match
|
||||||
|
|
||||||
// Collision detection functions
|
// Collision detection functions
|
||||||
@@ -1511,6 +1582,7 @@ RLAPI void InitAudioDevice(void); // Initial
|
|||||||
RLAPI void CloseAudioDevice(void); // Close the audio device and context
|
RLAPI void CloseAudioDevice(void); // Close the audio device and context
|
||||||
RLAPI bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully
|
RLAPI bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully
|
||||||
RLAPI void SetMasterVolume(float volume); // Set master volume (listener)
|
RLAPI void SetMasterVolume(float volume); // Set master volume (listener)
|
||||||
|
RLAPI float GetMasterVolume(void); // Get master volume (listener)
|
||||||
|
|
||||||
// Wave/Sound loading/unloading functions
|
// Wave/Sound loading/unloading functions
|
||||||
RLAPI Wave LoadWave(const char *fileName); // Load wave data from file
|
RLAPI Wave LoadWave(const char *fileName); // Load wave data from file
|
||||||
@@ -1518,10 +1590,12 @@ RLAPI Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileDat
|
|||||||
RLAPI bool IsWaveReady(Wave wave); // Checks if wave data is ready
|
RLAPI bool IsWaveReady(Wave wave); // Checks if wave data is ready
|
||||||
RLAPI Sound LoadSound(const char *fileName); // Load sound from file
|
RLAPI Sound LoadSound(const char *fileName); // Load sound from file
|
||||||
RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound from wave data
|
RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound from wave data
|
||||||
|
RLAPI Sound LoadSoundAlias(Sound source); // Create a new sound that shares the same sample data as the source sound, does not own the sound data
|
||||||
RLAPI bool IsSoundReady(Sound sound); // Checks if a sound is ready
|
RLAPI bool IsSoundReady(Sound sound); // Checks if a sound is ready
|
||||||
RLAPI void UpdateSound(Sound sound, const void *data, int sampleCount); // Update sound buffer with new data
|
RLAPI void UpdateSound(Sound sound, const void *data, int sampleCount); // Update sound buffer with new data
|
||||||
RLAPI void UnloadWave(Wave wave); // Unload wave data
|
RLAPI void UnloadWave(Wave wave); // Unload wave data
|
||||||
RLAPI void UnloadSound(Sound sound); // Unload sound
|
RLAPI void UnloadSound(Sound sound); // Unload sound
|
||||||
|
RLAPI void UnloadSoundAlias(Sound alias); // Unload a sound alias (does not deallocate sample data)
|
||||||
RLAPI bool ExportWave(Wave wave, const char *fileName); // Export wave data to file, returns true on success
|
RLAPI bool ExportWave(Wave wave, const char *fileName); // Export wave data to file, returns true on success
|
||||||
RLAPI bool ExportWaveAsCode(Wave wave, const char *fileName); // Export wave sample data to code (.h), returns true on success
|
RLAPI bool ExportWaveAsCode(Wave wave, const char *fileName); // Export wave sample data to code (.h), returns true on success
|
||||||
|
|
||||||
@@ -1573,12 +1647,12 @@ RLAPI void SetAudioStreamVolume(AudioStream stream, float volume); // Set vol
|
|||||||
RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level)
|
RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level)
|
||||||
RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (0.5 is centered)
|
RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (0.5 is centered)
|
||||||
RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams
|
RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams
|
||||||
RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data
|
RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data
|
||||||
|
|
||||||
RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream
|
RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream, receives the samples as <float>s
|
||||||
RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream
|
RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream
|
||||||
|
|
||||||
RLAPI void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline
|
RLAPI void AttachAudioMixedProcessor(AudioCallback processor); // Attach audio stream processor to the entire audio pipeline, receives the samples as <float>s
|
||||||
RLAPI void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline
|
RLAPI void DetachAudioMixedProcessor(AudioCallback processor); // Detach audio stream processor from the entire audio pipeline
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|||||||
@@ -2,25 +2,30 @@
|
|||||||
*
|
*
|
||||||
* raymath v1.5 - Math functions to work with Vector2, Vector3, Matrix and Quaternions
|
* raymath v1.5 - Math functions to work with Vector2, Vector3, Matrix and Quaternions
|
||||||
*
|
*
|
||||||
* CONFIGURATION:
|
|
||||||
*
|
|
||||||
* #define RAYMATH_IMPLEMENTATION
|
|
||||||
* Generates the implementation of the library into the included file.
|
|
||||||
* If not defined, the library is in header only mode and can be included in other headers
|
|
||||||
* or source files without problems. But only ONE file should hold the implementation.
|
|
||||||
*
|
|
||||||
* #define RAYMATH_STATIC_INLINE
|
|
||||||
* Define static inline functions code, so #include header suffices for use.
|
|
||||||
* This may use up lots of memory.
|
|
||||||
*
|
|
||||||
* CONVENTIONS:
|
* CONVENTIONS:
|
||||||
*
|
* - Matrix structure is defined as row-major (memory layout) but parameters naming AND all
|
||||||
|
* math operations performed by the library consider the structure as it was column-major
|
||||||
|
* It is like transposed versions of the matrices are used for all the maths
|
||||||
|
* It benefits some functions making them cache-friendly and also avoids matrix
|
||||||
|
* transpositions sometimes required by OpenGL
|
||||||
|
* Example: In memory order, row0 is [m0 m4 m8 m12] but in semantic math row0 is [m0 m1 m2 m3]
|
||||||
* - Functions are always self-contained, no function use another raymath function inside,
|
* - Functions are always self-contained, no function use another raymath function inside,
|
||||||
* required code is directly re-implemented inside
|
* required code is directly re-implemented inside
|
||||||
* - Functions input parameters are always received by value (2 unavoidable exceptions)
|
* - Functions input parameters are always received by value (2 unavoidable exceptions)
|
||||||
* - Functions use always a "result" variable for return
|
* - Functions use always a "result" variable for return
|
||||||
* - Functions are always defined inline
|
* - Functions are always defined inline
|
||||||
* - Angles are always in radians (DEG2RAD/RAD2DEG macros provided for convenience)
|
* - Angles are always in radians (DEG2RAD/RAD2DEG macros provided for convenience)
|
||||||
|
* - No compound literals used to make sure libray is compatible with C++
|
||||||
|
*
|
||||||
|
* CONFIGURATION:
|
||||||
|
* #define RAYMATH_IMPLEMENTATION
|
||||||
|
* Generates the implementation of the library into the included file.
|
||||||
|
* If not defined, the library is in header only mode and can be included in other headers
|
||||||
|
* or source files without problems. But only ONE file should hold the implementation.
|
||||||
|
*
|
||||||
|
* #define RAYMATH_STATIC_INLINE
|
||||||
|
* Define static inline functions code, so #include header suffices for use.
|
||||||
|
* This may use up lots of memory.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* LICENSE: zlib/libpng
|
* LICENSE: zlib/libpng
|
||||||
@@ -209,6 +214,10 @@ RMAPI float Wrap(float value, float min, float max)
|
|||||||
// Check whether two given floats are almost equal
|
// Check whether two given floats are almost equal
|
||||||
RMAPI int FloatEquals(float x, float y)
|
RMAPI int FloatEquals(float x, float y)
|
||||||
{
|
{
|
||||||
|
#if !defined(EPSILON)
|
||||||
|
#define EPSILON 0.000001f
|
||||||
|
#endif
|
||||||
|
|
||||||
int result = (fabsf(x - y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(x), fabsf(y))));
|
int result = (fabsf(x - y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(x), fabsf(y))));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -310,7 +319,12 @@ RMAPI float Vector2DistanceSqr(Vector2 v1, Vector2 v2)
|
|||||||
// NOTE: Angle is calculated from origin point (0, 0)
|
// NOTE: Angle is calculated from origin point (0, 0)
|
||||||
RMAPI float Vector2Angle(Vector2 v1, Vector2 v2)
|
RMAPI float Vector2Angle(Vector2 v1, Vector2 v2)
|
||||||
{
|
{
|
||||||
float result = atan2f(v2.y - v1.y, v2.x - v1.x);
|
float result = 0.0f;
|
||||||
|
|
||||||
|
float dot = v1.x*v2.x + v1.y*v2.y;
|
||||||
|
float det = v1.x*v2.y - v1.y*v2.x;
|
||||||
|
|
||||||
|
result = atan2f(det, dot);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -322,17 +336,8 @@ RMAPI float Vector2LineAngle(Vector2 start, Vector2 end)
|
|||||||
{
|
{
|
||||||
float result = 0.0f;
|
float result = 0.0f;
|
||||||
|
|
||||||
float dot = start.x*end.x + start.y*end.y; // Dot product
|
// TODO(10/9/2023): Currently angles move clockwise, determine if this is wanted behavior
|
||||||
|
result = -atan2f(end.y - start.y, end.x - start.x);
|
||||||
float dotClamp = (dot < -1.0f)? -1.0f : dot; // Clamp
|
|
||||||
if (dotClamp > 1.0f) dotClamp = 1.0f;
|
|
||||||
|
|
||||||
result = acosf(dotClamp);
|
|
||||||
|
|
||||||
// Alternative implementation, more costly
|
|
||||||
//float v1Length = sqrtf((start.x*start.x) + (start.y*start.y));
|
|
||||||
//float v2Length = sqrtf((end.x*end.x) + (end.y*end.y));
|
|
||||||
//float result = -acosf((start.x*end.x + start.y*end.y)/(v1Length*v2Length));
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -507,6 +512,10 @@ RMAPI Vector2 Vector2ClampValue(Vector2 v, float min, float max)
|
|||||||
// Check whether two given vectors are almost equal
|
// Check whether two given vectors are almost equal
|
||||||
RMAPI int Vector2Equals(Vector2 p, Vector2 q)
|
RMAPI int Vector2Equals(Vector2 p, Vector2 q)
|
||||||
{
|
{
|
||||||
|
#if !defined(EPSILON)
|
||||||
|
#define EPSILON 0.000001f
|
||||||
|
#endif
|
||||||
|
|
||||||
int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
||||||
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y)))));
|
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y)))));
|
||||||
|
|
||||||
@@ -703,12 +712,48 @@ RMAPI Vector3 Vector3Normalize(Vector3 v)
|
|||||||
Vector3 result = v;
|
Vector3 result = v;
|
||||||
|
|
||||||
float length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
|
float length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
|
||||||
if (length == 0.0f) length = 1.0f;
|
if (length != 0.0f)
|
||||||
float ilength = 1.0f/length;
|
{
|
||||||
|
float ilength = 1.0f/length;
|
||||||
|
|
||||||
result.x *= ilength;
|
result.x *= ilength;
|
||||||
result.y *= ilength;
|
result.y *= ilength;
|
||||||
result.z *= ilength;
|
result.z *= ilength;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Calculate the projection of the vector v1 on to v2
|
||||||
|
RMAPI Vector3 Vector3Project(Vector3 v1, Vector3 v2)
|
||||||
|
{
|
||||||
|
Vector3 result = { 0 };
|
||||||
|
|
||||||
|
float v1dv2 = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
|
||||||
|
float v2dv2 = (v2.x*v2.x + v2.y*v2.y + v2.z*v2.z);
|
||||||
|
|
||||||
|
float mag = v1dv2/v2dv2;
|
||||||
|
|
||||||
|
result.x = v2.x*mag;
|
||||||
|
result.y = v2.y*mag;
|
||||||
|
result.z = v2.z*mag;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Calculate the rejection of the vector v1 on to v2
|
||||||
|
RMAPI Vector3 Vector3Reject(Vector3 v1, Vector3 v2)
|
||||||
|
{
|
||||||
|
Vector3 result = { 0 };
|
||||||
|
|
||||||
|
float v1dv2 = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
|
||||||
|
float v2dv2 = (v2.x*v2.x + v2.y*v2.y + v2.z*v2.z);
|
||||||
|
|
||||||
|
float mag = v1dv2/v2dv2;
|
||||||
|
|
||||||
|
result.x = v1.x - (v2.x*mag);
|
||||||
|
result.y = v1.y - (v2.y*mag);
|
||||||
|
result.z = v1.z - (v2.z*mag);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -785,7 +830,7 @@ RMAPI Vector3 Vector3RotateByAxisAngle(Vector3 v, Vector3 axis, float angle)
|
|||||||
Vector3 result = v;
|
Vector3 result = v;
|
||||||
|
|
||||||
// Vector3Normalize(axis);
|
// Vector3Normalize(axis);
|
||||||
float length = sqrtf(axis.x * axis.x + axis.y * axis.y + axis.z * axis.z);
|
float length = sqrtf(axis.x*axis.x + axis.y*axis.y + axis.z*axis.z);
|
||||||
if (length == 0.0f) length = 1.0f;
|
if (length == 0.0f) length = 1.0f;
|
||||||
float ilength = 1.0f / length;
|
float ilength = 1.0f / length;
|
||||||
axis.x *= ilength;
|
axis.x *= ilength;
|
||||||
@@ -794,19 +839,19 @@ RMAPI Vector3 Vector3RotateByAxisAngle(Vector3 v, Vector3 axis, float angle)
|
|||||||
|
|
||||||
angle /= 2.0f;
|
angle /= 2.0f;
|
||||||
float a = sinf(angle);
|
float a = sinf(angle);
|
||||||
float b = axis.x * a;
|
float b = axis.x*a;
|
||||||
float c = axis.y * a;
|
float c = axis.y*a;
|
||||||
float d = axis.z * a;
|
float d = axis.z*a;
|
||||||
a = cosf(angle);
|
a = cosf(angle);
|
||||||
Vector3 w = { b, c, d };
|
Vector3 w = { b, c, d };
|
||||||
|
|
||||||
// Vector3CrossProduct(w, v)
|
// Vector3CrossProduct(w, v)
|
||||||
Vector3 wv = { w.y * v.z - w.z * v.y, w.z * v.x - w.x * v.z, w.x * v.y - w.y * v.x };
|
Vector3 wv = { w.y*v.z - w.z*v.y, w.z*v.x - w.x*v.z, w.x*v.y - w.y*v.x };
|
||||||
|
|
||||||
// Vector3CrossProduct(w, wv)
|
// Vector3CrossProduct(w, wv)
|
||||||
Vector3 wwv = { w.y * wv.z - w.z * wv.y, w.z * wv.x - w.x * wv.z, w.x * wv.y - w.y * wv.x };
|
Vector3 wwv = { w.y*wv.z - w.z*wv.y, w.z*wv.x - w.x*wv.z, w.x*wv.y - w.y*wv.x };
|
||||||
|
|
||||||
// Vector3Scale(wv, 2 * a)
|
// Vector3Scale(wv, 2*a)
|
||||||
a *= 2;
|
a *= 2;
|
||||||
wv.x *= a;
|
wv.x *= a;
|
||||||
wv.y *= a;
|
wv.y *= a;
|
||||||
@@ -1055,19 +1100,22 @@ RMAPI Vector3 Vector3ClampValue(Vector3 v, float min, float max)
|
|||||||
// Check whether two given vectors are almost equal
|
// Check whether two given vectors are almost equal
|
||||||
RMAPI int Vector3Equals(Vector3 p, Vector3 q)
|
RMAPI int Vector3Equals(Vector3 p, Vector3 q)
|
||||||
{
|
{
|
||||||
|
#if !defined(EPSILON)
|
||||||
|
#define EPSILON 0.000001f
|
||||||
|
#endif
|
||||||
|
|
||||||
int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
||||||
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
|
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
|
||||||
((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z)))));
|
((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z)))));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compute the direction of a refracted ray where v specifies the
|
// Compute the direction of a refracted ray
|
||||||
// normalized direction of the incoming ray, n specifies the
|
// v: normalized direction of the incoming ray
|
||||||
// normalized normal vector of the interface of two optical media,
|
// n: normalized normal vector of the interface of two optical media
|
||||||
// and r specifies the ratio of the refractive index of the medium
|
// r: ratio of the refractive index of the medium from where the ray comes
|
||||||
// from where the ray comes to the refractive index of the medium
|
// to the refractive index of the medium on the other side of the surface
|
||||||
// on the other side of the surface
|
|
||||||
RMAPI Vector3 Vector3Refract(Vector3 v, Vector3 n, float r)
|
RMAPI Vector3 Vector3Refract(Vector3 v, Vector3 n, float r)
|
||||||
{
|
{
|
||||||
Vector3 result = { 0 };
|
Vector3 result = { 0 };
|
||||||
@@ -1509,11 +1557,11 @@ RMAPI Matrix MatrixFrustum(double left, double right, double bottom, double top,
|
|||||||
|
|
||||||
// Get perspective projection matrix
|
// Get perspective projection matrix
|
||||||
// NOTE: Fovy angle must be provided in radians
|
// NOTE: Fovy angle must be provided in radians
|
||||||
RMAPI Matrix MatrixPerspective(double fovy, double aspect, double near, double far)
|
RMAPI Matrix MatrixPerspective(double fovY, double aspect, double nearPlane, double farPlane)
|
||||||
{
|
{
|
||||||
Matrix result = { 0 };
|
Matrix result = { 0 };
|
||||||
|
|
||||||
double top = near*tan(fovy*0.5);
|
double top = nearPlane*tan(fovY*0.5);
|
||||||
double bottom = -top;
|
double bottom = -top;
|
||||||
double right = top*aspect;
|
double right = top*aspect;
|
||||||
double left = -right;
|
double left = -right;
|
||||||
@@ -1521,27 +1569,27 @@ RMAPI Matrix MatrixPerspective(double fovy, double aspect, double near, double f
|
|||||||
// MatrixFrustum(-right, right, -top, top, near, far);
|
// MatrixFrustum(-right, right, -top, top, near, far);
|
||||||
float rl = (float)(right - left);
|
float rl = (float)(right - left);
|
||||||
float tb = (float)(top - bottom);
|
float tb = (float)(top - bottom);
|
||||||
float fn = (float)(far - near);
|
float fn = (float)(farPlane - nearPlane);
|
||||||
|
|
||||||
result.m0 = ((float)near*2.0f)/rl;
|
result.m0 = ((float)nearPlane*2.0f)/rl;
|
||||||
result.m5 = ((float)near*2.0f)/tb;
|
result.m5 = ((float)nearPlane*2.0f)/tb;
|
||||||
result.m8 = ((float)right + (float)left)/rl;
|
result.m8 = ((float)right + (float)left)/rl;
|
||||||
result.m9 = ((float)top + (float)bottom)/tb;
|
result.m9 = ((float)top + (float)bottom)/tb;
|
||||||
result.m10 = -((float)far + (float)near)/fn;
|
result.m10 = -((float)farPlane + (float)nearPlane)/fn;
|
||||||
result.m11 = -1.0f;
|
result.m11 = -1.0f;
|
||||||
result.m14 = -((float)far*(float)near*2.0f)/fn;
|
result.m14 = -((float)farPlane*(float)nearPlane*2.0f)/fn;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get orthographic projection matrix
|
// Get orthographic projection matrix
|
||||||
RMAPI Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far)
|
RMAPI Matrix MatrixOrtho(double left, double right, double bottom, double top, double nearPlane, double farPlane)
|
||||||
{
|
{
|
||||||
Matrix result = { 0 };
|
Matrix result = { 0 };
|
||||||
|
|
||||||
float rl = (float)(right - left);
|
float rl = (float)(right - left);
|
||||||
float tb = (float)(top - bottom);
|
float tb = (float)(top - bottom);
|
||||||
float fn = (float)(far - near);
|
float fn = (float)(farPlane - nearPlane);
|
||||||
|
|
||||||
result.m0 = 2.0f/rl;
|
result.m0 = 2.0f/rl;
|
||||||
result.m1 = 0.0f;
|
result.m1 = 0.0f;
|
||||||
@@ -1557,7 +1605,7 @@ RMAPI Matrix MatrixOrtho(double left, double right, double bottom, double top, d
|
|||||||
result.m11 = 0.0f;
|
result.m11 = 0.0f;
|
||||||
result.m12 = -((float)left + (float)right)/rl;
|
result.m12 = -((float)left + (float)right)/rl;
|
||||||
result.m13 = -((float)top + (float)bottom)/tb;
|
result.m13 = -((float)top + (float)bottom)/tb;
|
||||||
result.m14 = -((float)far + (float)near)/fn;
|
result.m14 = -((float)farPlane + (float)nearPlane)/fn;
|
||||||
result.m15 = 1.0f;
|
result.m15 = 1.0f;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -1812,6 +1860,10 @@ RMAPI Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount)
|
|||||||
{
|
{
|
||||||
Quaternion result = { 0 };
|
Quaternion result = { 0 };
|
||||||
|
|
||||||
|
#if !defined(EPSILON)
|
||||||
|
#define EPSILON 0.000001f
|
||||||
|
#endif
|
||||||
|
|
||||||
float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w;
|
float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w;
|
||||||
|
|
||||||
if (cosHalfTheta < 0)
|
if (cosHalfTheta < 0)
|
||||||
@@ -1827,7 +1879,7 @@ RMAPI Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount)
|
|||||||
float halfTheta = acosf(cosHalfTheta);
|
float halfTheta = acosf(cosHalfTheta);
|
||||||
float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta);
|
float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta);
|
||||||
|
|
||||||
if (fabsf(sinHalfTheta) < 0.001f)
|
if (fabsf(sinHalfTheta) < EPSILON)
|
||||||
{
|
{
|
||||||
result.x = (q1.x*0.5f + q2.x*0.5f);
|
result.x = (q1.x*0.5f + q2.x*0.5f);
|
||||||
result.y = (q1.y*0.5f + q2.y*0.5f);
|
result.y = (q1.y*0.5f + q2.y*0.5f);
|
||||||
@@ -1882,9 +1934,9 @@ RMAPI Quaternion QuaternionFromMatrix(Matrix mat)
|
|||||||
{
|
{
|
||||||
Quaternion result = { 0 };
|
Quaternion result = { 0 };
|
||||||
|
|
||||||
float fourWSquaredMinus1 = mat.m0 + mat.m5 + mat.m10;
|
float fourWSquaredMinus1 = mat.m0 + mat.m5 + mat.m10;
|
||||||
float fourXSquaredMinus1 = mat.m0 - mat.m5 - mat.m10;
|
float fourXSquaredMinus1 = mat.m0 - mat.m5 - mat.m10;
|
||||||
float fourYSquaredMinus1 = mat.m5 - mat.m0 - mat.m10;
|
float fourYSquaredMinus1 = mat.m5 - mat.m0 - mat.m10;
|
||||||
float fourZSquaredMinus1 = mat.m10 - mat.m0 - mat.m5;
|
float fourZSquaredMinus1 = mat.m10 - mat.m0 - mat.m5;
|
||||||
|
|
||||||
int biggestIndex = 0;
|
int biggestIndex = 0;
|
||||||
@@ -1907,34 +1959,34 @@ RMAPI Quaternion QuaternionFromMatrix(Matrix mat)
|
|||||||
biggestIndex = 3;
|
biggestIndex = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
float biggestVal = sqrtf(fourBiggestSquaredMinus1 + 1.0f) * 0.5f;
|
float biggestVal = sqrtf(fourBiggestSquaredMinus1 + 1.0f)*0.5f;
|
||||||
float mult = 0.25f / biggestVal;
|
float mult = 0.25f / biggestVal;
|
||||||
|
|
||||||
switch (biggestIndex)
|
switch (biggestIndex)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
result.w = biggestVal;
|
result.w = biggestVal;
|
||||||
result.x = (mat.m6 - mat.m9) * mult;
|
result.x = (mat.m6 - mat.m9)*mult;
|
||||||
result.y = (mat.m8 - mat.m2) * mult;
|
result.y = (mat.m8 - mat.m2)*mult;
|
||||||
result.z = (mat.m1 - mat.m4) * mult;
|
result.z = (mat.m1 - mat.m4)*mult;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
result.x = biggestVal;
|
result.x = biggestVal;
|
||||||
result.w = (mat.m6 - mat.m9) * mult;
|
result.w = (mat.m6 - mat.m9)*mult;
|
||||||
result.y = (mat.m1 + mat.m4) * mult;
|
result.y = (mat.m1 + mat.m4)*mult;
|
||||||
result.z = (mat.m8 + mat.m2) * mult;
|
result.z = (mat.m8 + mat.m2)*mult;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
result.y = biggestVal;
|
result.y = biggestVal;
|
||||||
result.w = (mat.m8 - mat.m2) * mult;
|
result.w = (mat.m8 - mat.m2)*mult;
|
||||||
result.x = (mat.m1 + mat.m4) * mult;
|
result.x = (mat.m1 + mat.m4)*mult;
|
||||||
result.z = (mat.m6 + mat.m9) * mult;
|
result.z = (mat.m6 + mat.m9)*mult;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
result.z = biggestVal;
|
result.z = biggestVal;
|
||||||
result.w = (mat.m1 - mat.m4) * mult;
|
result.w = (mat.m1 - mat.m4)*mult;
|
||||||
result.x = (mat.m8 + mat.m2) * mult;
|
result.x = (mat.m8 + mat.m2)*mult;
|
||||||
result.y = (mat.m6 + mat.m9) * mult;
|
result.y = (mat.m6 + mat.m9)*mult;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2040,7 +2092,7 @@ RMAPI void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle
|
|||||||
float resAngle = 2.0f*acosf(q.w);
|
float resAngle = 2.0f*acosf(q.w);
|
||||||
float den = sqrtf(1.0f - q.w*q.w);
|
float den = sqrtf(1.0f - q.w*q.w);
|
||||||
|
|
||||||
if (den > 0.0001f)
|
if (den > EPSILON)
|
||||||
{
|
{
|
||||||
resAxis.x = q.x/den;
|
resAxis.x = q.x/den;
|
||||||
resAxis.y = q.y/den;
|
resAxis.y = q.y/den;
|
||||||
@@ -2119,11 +2171,15 @@ RMAPI Quaternion QuaternionTransform(Quaternion q, Matrix mat)
|
|||||||
// Check whether two given quaternions are almost equal
|
// Check whether two given quaternions are almost equal
|
||||||
RMAPI int QuaternionEquals(Quaternion p, Quaternion q)
|
RMAPI int QuaternionEquals(Quaternion p, Quaternion q)
|
||||||
{
|
{
|
||||||
|
#if !defined(EPSILON)
|
||||||
|
#define EPSILON 0.000001f
|
||||||
|
#endif
|
||||||
|
|
||||||
int result = (((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
int result = (((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
||||||
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
|
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
|
||||||
((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) &&
|
((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) &&
|
||||||
((fabsf(p.w - q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w)))))) ||
|
((fabsf(p.w - q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w)))))) ||
|
||||||
(((fabsf(p.x + q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
(((fabsf(p.x + q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
|
||||||
((fabsf(p.y + q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
|
((fabsf(p.y + q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
|
||||||
((fabsf(p.z + q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) &&
|
((fabsf(p.z + q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) &&
|
||||||
((fabsf(p.w + q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w))))));
|
((fabsf(p.w + q.w)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.w), fabsf(q.w))))));
|
||||||
|
|||||||
377
include/rlgl.h
377
include/rlgl.h
@@ -2,82 +2,83 @@
|
|||||||
*
|
*
|
||||||
* rlgl v4.5 - A multi-OpenGL abstraction layer with an immediate-mode style API
|
* rlgl v4.5 - A multi-OpenGL abstraction layer with an immediate-mode style API
|
||||||
*
|
*
|
||||||
* An abstraction layer for multiple OpenGL versions (1.1, 2.1, 3.3 Core, 4.3 Core, ES 2.0)
|
* DESCRIPTION:
|
||||||
* that provides a pseudo-OpenGL 1.1 immediate-mode style API (rlVertex, rlTranslate, rlRotate...)
|
* An abstraction layer for multiple OpenGL versions (1.1, 2.1, 3.3 Core, 4.3 Core, ES 2.0)
|
||||||
|
* that provides a pseudo-OpenGL 1.1 immediate-mode style API (rlVertex, rlTranslate, rlRotate...)
|
||||||
*
|
*
|
||||||
* When choosing an OpenGL backend different than OpenGL 1.1, some internal buffer are
|
* ADDITIONAL NOTES:
|
||||||
* initialized on rlglInit() to accumulate vertex data.
|
* When choosing an OpenGL backend different than OpenGL 1.1, some internal buffer are
|
||||||
|
* initialized on rlglInit() to accumulate vertex data.
|
||||||
*
|
*
|
||||||
* When an internal state change is required all the stored vertex data is renderer in batch,
|
* When an internal state change is required all the stored vertex data is renderer in batch,
|
||||||
* additionally, rlDrawRenderBatchActive() could be called to force flushing of the batch.
|
* additionally, rlDrawRenderBatchActive() could be called to force flushing of the batch.
|
||||||
*
|
*
|
||||||
* Some additional resources are also loaded for convenience, here the complete list:
|
* Some resources are also loaded for convenience, here the complete list:
|
||||||
* - Default batch (RLGL.defaultBatch): RenderBatch system to accumulate vertex data
|
* - Default batch (RLGL.defaultBatch): RenderBatch system to accumulate vertex data
|
||||||
* - Default texture (RLGL.defaultTextureId): 1x1 white pixel R8G8B8A8
|
* - Default texture (RLGL.defaultTextureId): 1x1 white pixel R8G8B8A8
|
||||||
* - Default shader (RLGL.State.defaultShaderId, RLGL.State.defaultShaderLocs)
|
* - Default shader (RLGL.State.defaultShaderId, RLGL.State.defaultShaderLocs)
|
||||||
*
|
|
||||||
* Internal buffer (and additional resources) must be manually unloaded calling rlglClose().
|
|
||||||
*
|
*
|
||||||
|
* Internal buffer (and resources) must be manually unloaded calling rlglClose().
|
||||||
*
|
*
|
||||||
* CONFIGURATION:
|
* CONFIGURATION:
|
||||||
|
* #define GRAPHICS_API_OPENGL_11
|
||||||
|
* #define GRAPHICS_API_OPENGL_21
|
||||||
|
* #define GRAPHICS_API_OPENGL_33
|
||||||
|
* #define GRAPHICS_API_OPENGL_43
|
||||||
|
* #define GRAPHICS_API_OPENGL_ES2
|
||||||
|
* #define GRAPHICS_API_OPENGL_ES3
|
||||||
|
* Use selected OpenGL graphics backend, should be supported by platform
|
||||||
|
* Those preprocessor defines are only used on rlgl module, if OpenGL version is
|
||||||
|
* required by any other module, use rlGetVersion() to check it
|
||||||
*
|
*
|
||||||
* #define GRAPHICS_API_OPENGL_11
|
* #define RLGL_IMPLEMENTATION
|
||||||
* #define GRAPHICS_API_OPENGL_21
|
* Generates the implementation of the library into the included file.
|
||||||
* #define GRAPHICS_API_OPENGL_33
|
* If not defined, the library is in header only mode and can be included in other headers
|
||||||
* #define GRAPHICS_API_OPENGL_43
|
* or source files without problems. But only ONE file should hold the implementation.
|
||||||
* #define GRAPHICS_API_OPENGL_ES2
|
|
||||||
* Use selected OpenGL graphics backend, should be supported by platform
|
|
||||||
* Those preprocessor defines are only used on rlgl module, if OpenGL version is
|
|
||||||
* required by any other module, use rlGetVersion() to check it
|
|
||||||
*
|
*
|
||||||
* #define RLGL_IMPLEMENTATION
|
* #define RLGL_RENDER_TEXTURES_HINT
|
||||||
* Generates the implementation of the library into the included file.
|
* Enable framebuffer objects (fbo) support (enabled by default)
|
||||||
* If not defined, the library is in header only mode and can be included in other headers
|
* Some GPUs could not support them despite the OpenGL version
|
||||||
* or source files without problems. But only ONE file should hold the implementation.
|
|
||||||
*
|
*
|
||||||
* #define RLGL_RENDER_TEXTURES_HINT
|
* #define RLGL_SHOW_GL_DETAILS_INFO
|
||||||
* Enable framebuffer objects (fbo) support (enabled by default)
|
* Show OpenGL extensions and capabilities detailed logs on init
|
||||||
* Some GPUs could not support them despite the OpenGL version
|
|
||||||
*
|
*
|
||||||
* #define RLGL_SHOW_GL_DETAILS_INFO
|
* #define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT
|
||||||
* Show OpenGL extensions and capabilities detailed logs on init
|
* Enable debug context (only available on OpenGL 4.3)
|
||||||
*
|
*
|
||||||
* #define RLGL_ENABLE_OPENGL_DEBUG_CONTEXT
|
* rlgl capabilities could be customized just defining some internal
|
||||||
* Enable debug context (only available on OpenGL 4.3)
|
* values before library inclusion (default values listed):
|
||||||
*
|
*
|
||||||
* rlgl capabilities could be customized just defining some internal
|
* #define RL_DEFAULT_BATCH_BUFFER_ELEMENTS 8192 // Default internal render batch elements limits
|
||||||
* values before library inclusion (default values listed):
|
* #define RL_DEFAULT_BATCH_BUFFERS 1 // Default number of batch buffers (multi-buffering)
|
||||||
|
* #define RL_DEFAULT_BATCH_DRAWCALLS 256 // Default number of batch draw calls (by state changes: mode, texture)
|
||||||
|
* #define RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS 4 // Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())
|
||||||
*
|
*
|
||||||
* #define RL_DEFAULT_BATCH_BUFFER_ELEMENTS 8192 // Default internal render batch elements limits
|
* #define RL_MAX_MATRIX_STACK_SIZE 32 // Maximum size of internal Matrix stack
|
||||||
* #define RL_DEFAULT_BATCH_BUFFERS 1 // Default number of batch buffers (multi-buffering)
|
* #define RL_MAX_SHADER_LOCATIONS 32 // Maximum number of shader locations supported
|
||||||
* #define RL_DEFAULT_BATCH_DRAWCALLS 256 // Default number of batch draw calls (by state changes: mode, texture)
|
* #define RL_CULL_DISTANCE_NEAR 0.01 // Default projection matrix near cull distance
|
||||||
* #define RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS 4 // Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())
|
* #define RL_CULL_DISTANCE_FAR 1000.0 // Default projection matrix far cull distance
|
||||||
*
|
*
|
||||||
* #define RL_MAX_MATRIX_STACK_SIZE 32 // Maximum size of internal Matrix stack
|
* When loading a shader, the following vertex attributes and uniform
|
||||||
* #define RL_MAX_SHADER_LOCATIONS 32 // Maximum number of shader locations supported
|
* location names are tried to be set automatically:
|
||||||
* #define RL_CULL_DISTANCE_NEAR 0.01 // Default projection matrix near cull distance
|
|
||||||
* #define RL_CULL_DISTANCE_FAR 1000.0 // Default projection matrix far cull distance
|
|
||||||
*
|
*
|
||||||
* When loading a shader, the following vertex attribute and uniform
|
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: 0
|
||||||
* location names are tried to be set automatically:
|
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Bound by default to shader location: 1
|
||||||
*
|
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Bound by default to shader location: 2
|
||||||
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Bound by default to shader location: 0
|
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: 3
|
||||||
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Bound by default to shader location: 1
|
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: 4
|
||||||
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Bound by default to shader location: 2
|
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Bound by default to shader location: 5
|
||||||
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Bound by default to shader location: 3
|
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix
|
||||||
* #define RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Bound by default to shader location: 4
|
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix
|
||||||
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_MVP "mvp" // model-view-projection matrix
|
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION "matProjection" // projection matrix
|
||||||
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW "matView" // view matrix
|
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix
|
||||||
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION "matProjection" // projection matrix
|
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView))
|
||||||
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL "matModel" // model matrix
|
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color)
|
||||||
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL "matNormal" // normal matrix (transpose(inverse(matModelView))
|
* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0)
|
||||||
* #define RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR "colDiffuse" // color diffuse (base tint color, multiplied by texture color)
|
* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1)
|
||||||
* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 "texture0" // texture0 (texture slot active 0)
|
* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2)
|
||||||
* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 "texture1" // texture1 (texture slot active 1)
|
|
||||||
* #define RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 "texture2" // texture2 (texture slot active 2)
|
|
||||||
*
|
*
|
||||||
* DEPENDENCIES:
|
* DEPENDENCIES:
|
||||||
*
|
|
||||||
* - OpenGL libraries (depending on platform and OpenGL version selected)
|
* - OpenGL libraries (depending on platform and OpenGL version selected)
|
||||||
* - GLAD OpenGL extensions loading library (only for OpenGL 3.3 Core, 4.3 Core)
|
* - GLAD OpenGL extensions loading library (only for OpenGL 3.3 Core, 4.3 Core)
|
||||||
*
|
*
|
||||||
@@ -148,7 +149,8 @@
|
|||||||
!defined(GRAPHICS_API_OPENGL_21) && \
|
!defined(GRAPHICS_API_OPENGL_21) && \
|
||||||
!defined(GRAPHICS_API_OPENGL_33) && \
|
!defined(GRAPHICS_API_OPENGL_33) && \
|
||||||
!defined(GRAPHICS_API_OPENGL_43) && \
|
!defined(GRAPHICS_API_OPENGL_43) && \
|
||||||
!defined(GRAPHICS_API_OPENGL_ES2)
|
!defined(GRAPHICS_API_OPENGL_ES2) && \
|
||||||
|
!defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
#define GRAPHICS_API_OPENGL_33
|
#define GRAPHICS_API_OPENGL_33
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -179,6 +181,11 @@
|
|||||||
#define GRAPHICS_API_OPENGL_33
|
#define GRAPHICS_API_OPENGL_33
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// OpenGL ES 3.0 uses OpenGL ES 2.0 functionality (and more)
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
#define GRAPHICS_API_OPENGL_ES2
|
||||||
|
#endif
|
||||||
|
|
||||||
// Support framebuffer objects by default
|
// Support framebuffer objects by default
|
||||||
// NOTE: Some driver implementation do not support it, despite they should
|
// NOTE: Some driver implementation do not support it, despite they should
|
||||||
#define RLGL_RENDER_TEXTURES_HINT
|
#define RLGL_RENDER_TEXTURES_HINT
|
||||||
@@ -383,7 +390,8 @@ typedef enum {
|
|||||||
RL_OPENGL_21, // OpenGL 2.1 (GLSL 120)
|
RL_OPENGL_21, // OpenGL 2.1 (GLSL 120)
|
||||||
RL_OPENGL_33, // OpenGL 3.3 (GLSL 330)
|
RL_OPENGL_33, // OpenGL 3.3 (GLSL 330)
|
||||||
RL_OPENGL_43, // OpenGL 4.3 (using GLSL 330)
|
RL_OPENGL_43, // OpenGL 4.3 (using GLSL 330)
|
||||||
RL_OPENGL_ES_20 // OpenGL ES 2.0 (GLSL 100)
|
RL_OPENGL_ES_20, // OpenGL ES 2.0 (GLSL 100)
|
||||||
|
RL_OPENGL_ES_30 // OpenGL ES 3.0 (GLSL 300 es)
|
||||||
} rlGlVersion;
|
} rlGlVersion;
|
||||||
|
|
||||||
// Trace log level
|
// Trace log level
|
||||||
@@ -412,6 +420,9 @@ typedef enum {
|
|||||||
RL_PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
|
RL_PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float)
|
||||||
RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
|
RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float)
|
||||||
RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
|
RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float)
|
||||||
|
RL_PIXELFORMAT_UNCOMPRESSED_R16, // 16 bpp (1 channel - half float)
|
||||||
|
RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16, // 16*3 bpp (3 channels - half float)
|
||||||
|
RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16, // 16*4 bpp (4 channels - half float)
|
||||||
RL_PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
|
RL_PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha)
|
||||||
RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
|
RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha)
|
||||||
RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
|
RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp
|
||||||
@@ -506,28 +517,28 @@ typedef enum {
|
|||||||
// Framebuffer attachment type
|
// Framebuffer attachment type
|
||||||
// NOTE: By default up to 8 color channels defined, but it can be more
|
// NOTE: By default up to 8 color channels defined, but it can be more
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL0 = 0, // Framebuffer attachment type: color 0
|
RL_ATTACHMENT_COLOR_CHANNEL0 = 0, // Framebuffer attachment type: color 0
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL1, // Framebuffer attachment type: color 1
|
RL_ATTACHMENT_COLOR_CHANNEL1 = 1, // Framebuffer attachment type: color 1
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL2, // Framebuffer attachment type: color 2
|
RL_ATTACHMENT_COLOR_CHANNEL2 = 2, // Framebuffer attachment type: color 2
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL3, // Framebuffer attachment type: color 3
|
RL_ATTACHMENT_COLOR_CHANNEL3 = 3, // Framebuffer attachment type: color 3
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL4, // Framebuffer attachment type: color 4
|
RL_ATTACHMENT_COLOR_CHANNEL4 = 4, // Framebuffer attachment type: color 4
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL5, // Framebuffer attachment type: color 5
|
RL_ATTACHMENT_COLOR_CHANNEL5 = 5, // Framebuffer attachment type: color 5
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL6, // Framebuffer attachment type: color 6
|
RL_ATTACHMENT_COLOR_CHANNEL6 = 6, // Framebuffer attachment type: color 6
|
||||||
RL_ATTACHMENT_COLOR_CHANNEL7, // Framebuffer attachment type: color 7
|
RL_ATTACHMENT_COLOR_CHANNEL7 = 7, // Framebuffer attachment type: color 7
|
||||||
RL_ATTACHMENT_DEPTH = 100, // Framebuffer attachment type: depth
|
RL_ATTACHMENT_DEPTH = 100, // Framebuffer attachment type: depth
|
||||||
RL_ATTACHMENT_STENCIL = 200, // Framebuffer attachment type: stencil
|
RL_ATTACHMENT_STENCIL = 200, // Framebuffer attachment type: stencil
|
||||||
} rlFramebufferAttachType;
|
} rlFramebufferAttachType;
|
||||||
|
|
||||||
// Framebuffer texture attachment type
|
// Framebuffer texture attachment type
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0, // Framebuffer texture attachment type: cubemap, +X side
|
RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0, // Framebuffer texture attachment type: cubemap, +X side
|
||||||
RL_ATTACHMENT_CUBEMAP_NEGATIVE_X, // Framebuffer texture attachment type: cubemap, -X side
|
RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1, // Framebuffer texture attachment type: cubemap, -X side
|
||||||
RL_ATTACHMENT_CUBEMAP_POSITIVE_Y, // Framebuffer texture attachment type: cubemap, +Y side
|
RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2, // Framebuffer texture attachment type: cubemap, +Y side
|
||||||
RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y, // Framebuffer texture attachment type: cubemap, -Y side
|
RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3, // Framebuffer texture attachment type: cubemap, -Y side
|
||||||
RL_ATTACHMENT_CUBEMAP_POSITIVE_Z, // Framebuffer texture attachment type: cubemap, +Z side
|
RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4, // Framebuffer texture attachment type: cubemap, +Z side
|
||||||
RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z, // Framebuffer texture attachment type: cubemap, -Z side
|
RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5, // Framebuffer texture attachment type: cubemap, -Z side
|
||||||
RL_ATTACHMENT_TEXTURE2D = 100, // Framebuffer texture attachment type: texture2d
|
RL_ATTACHMENT_TEXTURE2D = 100, // Framebuffer texture attachment type: texture2d
|
||||||
RL_ATTACHMENT_RENDERBUFFER = 200, // Framebuffer texture attachment type: renderbuffer
|
RL_ATTACHMENT_RENDERBUFFER = 200, // Framebuffer texture attachment type: renderbuffer
|
||||||
} rlFramebufferAttachTextureType;
|
} rlFramebufferAttachTextureType;
|
||||||
|
|
||||||
// Face culling mode
|
// Face culling mode
|
||||||
@@ -607,6 +618,7 @@ RLAPI void rlDisableShader(void); // Disable shader progra
|
|||||||
RLAPI void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo)
|
RLAPI void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo)
|
||||||
RLAPI void rlDisableFramebuffer(void); // Disable render texture (fbo), return to default framebuffer
|
RLAPI void rlDisableFramebuffer(void); // Disable render texture (fbo), return to default framebuffer
|
||||||
RLAPI void rlActiveDrawBuffers(int count); // Activate multiple draw color buffers
|
RLAPI void rlActiveDrawBuffers(int count); // Activate multiple draw color buffers
|
||||||
|
RLAPI void rlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask); // Blit active framebuffer to main framebuffer
|
||||||
|
|
||||||
// General render state
|
// General render state
|
||||||
RLAPI void rlEnableColorBlend(void); // Enable color blending
|
RLAPI void rlEnableColorBlend(void); // Enable color blending
|
||||||
@@ -622,7 +634,8 @@ RLAPI void rlEnableScissorTest(void); // Enable scissor test
|
|||||||
RLAPI void rlDisableScissorTest(void); // Disable scissor test
|
RLAPI void rlDisableScissorTest(void); // Disable scissor test
|
||||||
RLAPI void rlScissor(int x, int y, int width, int height); // Scissor test
|
RLAPI void rlScissor(int x, int y, int width, int height); // Scissor test
|
||||||
RLAPI void rlEnableWireMode(void); // Enable wire mode
|
RLAPI void rlEnableWireMode(void); // Enable wire mode
|
||||||
RLAPI void rlDisableWireMode(void); // Disable wire mode
|
RLAPI void rlEnablePointMode(void); // Enable point mode
|
||||||
|
RLAPI void rlDisableWireMode(void); // Disable wire mode ( and point ) maybe rename
|
||||||
RLAPI void rlSetLineWidth(float width); // Set the line drawing width
|
RLAPI void rlSetLineWidth(float width); // Set the line drawing width
|
||||||
RLAPI float rlGetLineWidth(void); // Get the line drawing width
|
RLAPI float rlGetLineWidth(void); // Get the line drawing width
|
||||||
RLAPI void rlEnableSmoothLines(void); // Enable line aliasing
|
RLAPI void rlEnableSmoothLines(void); // Enable line aliasing
|
||||||
@@ -787,13 +800,17 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
|||||||
#define GLAD_FREE RL_FREE
|
#define GLAD_FREE RL_FREE
|
||||||
|
|
||||||
#define GLAD_GL_IMPLEMENTATION
|
#define GLAD_GL_IMPLEMENTATION
|
||||||
#include "external/glad.h" // GLAD extensions loading library, includes OpenGL headers
|
#include "external/glad.h" // GLAD extensions loading library, includes OpenGL headers
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
#include <GLES3/gl3.h> // OpenGL ES 3.0 library
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
#include <GLES2/gl2ext.h> // OpenGL ES 2.0 extensions library
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
// NOTE: OpenGL ES 2.0 can be enabled on PLATFORM_DESKTOP,
|
// NOTE: OpenGL ES 2.0 can be enabled on PLATFORM_DESKTOP,
|
||||||
// in that case, functions are loaded from a custom glad for OpenGL ES 2.0
|
// in that case, functions are loaded from a custom glad for OpenGL ES 2.0
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL)
|
||||||
#define GLAD_GLES2_IMPLEMENTATION
|
#define GLAD_GLES2_IMPLEMENTATION
|
||||||
#include "external/glad_gles2.h"
|
#include "external/glad_gles2.h"
|
||||||
#else
|
#else
|
||||||
@@ -805,7 +822,7 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
|||||||
|
|
||||||
// It seems OpenGL ES 2.0 instancing entry points are not defined on Raspberry Pi
|
// It seems OpenGL ES 2.0 instancing entry points are not defined on Raspberry Pi
|
||||||
// provided headers (despite being defined in official Khronos GLES2 headers)
|
// provided headers (despite being defined in official Khronos GLES2 headers)
|
||||||
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
#if defined(PLATFORM_DRM)
|
||||||
typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
|
typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
|
||||||
typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
|
typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
|
||||||
typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor);
|
typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor);
|
||||||
@@ -887,8 +904,10 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
|
|||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
#define glClearDepth glClearDepthf
|
#define glClearDepth glClearDepthf
|
||||||
#define GL_READ_FRAMEBUFFER GL_FRAMEBUFFER
|
#if !defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
#define GL_DRAW_FRAMEBUFFER GL_FRAMEBUFFER
|
#define GL_READ_FRAMEBUFFER GL_FRAMEBUFFER
|
||||||
|
#define GL_DRAW_FRAMEBUFFER GL_FRAMEBUFFER
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Default shader vertex attribute names to set location points
|
// Default shader vertex attribute names to set location points
|
||||||
@@ -999,6 +1018,7 @@ typedef struct rlglData {
|
|||||||
bool texDepth; // Depth textures supported (GL_ARB_depth_texture, GL_OES_depth_texture)
|
bool texDepth; // Depth textures supported (GL_ARB_depth_texture, GL_OES_depth_texture)
|
||||||
bool texDepthWebGL; // Depth textures supported WebGL specific (GL_WEBGL_depth_texture)
|
bool texDepthWebGL; // Depth textures supported WebGL specific (GL_WEBGL_depth_texture)
|
||||||
bool texFloat32; // float textures support (32 bit per channel) (GL_OES_texture_float)
|
bool texFloat32; // float textures support (32 bit per channel) (GL_OES_texture_float)
|
||||||
|
bool texFloat16; // half float textures support (16 bit per channel) (GL_OES_texture_half_float)
|
||||||
bool texCompDXT; // DDS texture compression support (GL_EXT_texture_compression_s3tc, GL_WEBGL_compressed_texture_s3tc, GL_WEBKIT_WEBGL_compressed_texture_s3tc)
|
bool texCompDXT; // DDS texture compression support (GL_EXT_texture_compression_s3tc, GL_WEBGL_compressed_texture_s3tc, GL_WEBKIT_WEBGL_compressed_texture_s3tc)
|
||||||
bool texCompETC1; // ETC1 texture compression support (GL_OES_compressed_ETC1_RGB8_texture, GL_WEBGL_compressed_texture_etc1)
|
bool texCompETC1; // ETC1 texture compression support (GL_OES_compressed_ETC1_RGB8_texture, GL_WEBGL_compressed_texture_etc1)
|
||||||
bool texCompETC2; // ETC2/EAC texture compression support (GL_ARB_ES3_compatibility)
|
bool texCompETC2; // ETC2/EAC texture compression support (GL_ARB_ES3_compatibility)
|
||||||
@@ -1026,7 +1046,7 @@ typedef void *(*rlglLoadProc)(const char *name); // OpenGL extension functions
|
|||||||
static rlglData RLGL = { 0 };
|
static rlglData RLGL = { 0 };
|
||||||
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES2) && !defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
// NOTE: VAO functionality is exposed through extensions (OES)
|
// NOTE: VAO functionality is exposed through extensions (OES)
|
||||||
static PFNGLGENVERTEXARRAYSOESPROC glGenVertexArrays = NULL;
|
static PFNGLGENVERTEXARRAYSOESPROC glGenVertexArrays = NULL;
|
||||||
static PFNGLBINDVERTEXARRAYOESPROC glBindVertexArray = NULL;
|
static PFNGLBINDVERTEXARRAYOESPROC glBindVertexArray = NULL;
|
||||||
@@ -1045,7 +1065,7 @@ static PFNGLVERTEXATTRIBDIVISOREXTPROC glVertexAttribDivisor = NULL;
|
|||||||
static void rlLoadShaderDefault(void); // Load default shader
|
static void rlLoadShaderDefault(void); // Load default shader
|
||||||
static void rlUnloadShaderDefault(void); // Unload default shader
|
static void rlUnloadShaderDefault(void); // Unload default shader
|
||||||
#if defined(RLGL_SHOW_GL_DETAILS_INFO)
|
#if defined(RLGL_SHOW_GL_DETAILS_INFO)
|
||||||
static char *rlGetCompressedFormatName(int format); // Get compressed format official GL identifier name
|
static const char *rlGetCompressedFormatName(int format); // Get compressed format official GL identifier name
|
||||||
#endif // RLGL_SHOW_GL_DETAILS_INFO
|
#endif // RLGL_SHOW_GL_DETAILS_INFO
|
||||||
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
|
||||||
|
|
||||||
@@ -1416,8 +1436,7 @@ void rlVertex3f(float x, float y, float z)
|
|||||||
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter] = RLGL.State.texcoordx;
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter] = RLGL.State.texcoordx;
|
||||||
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter + 1] = RLGL.State.texcoordy;
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.State.vertexCounter + 1] = RLGL.State.texcoordy;
|
||||||
|
|
||||||
// TODO: Add current normal
|
// WARNING: By default rlVertexBuffer struct does not store normals
|
||||||
// By default rlVertexBuffer type does not store normals
|
|
||||||
|
|
||||||
// Add current color
|
// Add current color
|
||||||
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter] = RLGL.State.colorr;
|
RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.State.vertexCounter] = RLGL.State.colorr;
|
||||||
@@ -1702,11 +1721,19 @@ void rlDisableFramebuffer(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Blit active framebuffer to main framebuffer
|
||||||
|
void rlBlitFramebuffer(int srcX, int srcY, int srcWidth, int srcHeight, int dstX, int dstY, int dstWidth, int dstHeight, int bufferMask)
|
||||||
|
{
|
||||||
|
#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES3)) && defined(RLGL_RENDER_TEXTURES_HINT)
|
||||||
|
glBlitFramebuffer(srcX, srcY, srcWidth, srcHeight, dstX, dstY, dstWidth, dstHeight, bufferMask, GL_NEAREST);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// Activate multiple draw color buffers
|
// Activate multiple draw color buffers
|
||||||
// NOTE: One color buffer is always active by default
|
// NOTE: One color buffer is always active by default
|
||||||
void rlActiveDrawBuffers(int count)
|
void rlActiveDrawBuffers(int count)
|
||||||
{
|
{
|
||||||
#if (defined(GRAPHICS_API_OPENGL_33) && defined(RLGL_RENDER_TEXTURES_HINT))
|
#if ((defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES3)) && defined(RLGL_RENDER_TEXTURES_HINT))
|
||||||
// NOTE: Maximum number of draw buffers supported is implementation dependant,
|
// NOTE: Maximum number of draw buffers supported is implementation dependant,
|
||||||
// it can be queried with glGet*() but it must be at least 8
|
// it can be queried with glGet*() but it must be at least 8
|
||||||
//GLint maxDrawBuffers = 0;
|
//GLint maxDrawBuffers = 0;
|
||||||
@@ -1718,6 +1745,16 @@ void rlActiveDrawBuffers(int count)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
unsigned int buffers[8] = {
|
unsigned int buffers[8] = {
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
GL_COLOR_ATTACHMENT0_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT1_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT2_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT3_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT4_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT5_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT6_EXT,
|
||||||
|
GL_COLOR_ATTACHMENT7_EXT,
|
||||||
|
#else
|
||||||
GL_COLOR_ATTACHMENT0,
|
GL_COLOR_ATTACHMENT0,
|
||||||
GL_COLOR_ATTACHMENT1,
|
GL_COLOR_ATTACHMENT1,
|
||||||
GL_COLOR_ATTACHMENT2,
|
GL_COLOR_ATTACHMENT2,
|
||||||
@@ -1726,9 +1763,14 @@ void rlActiveDrawBuffers(int count)
|
|||||||
GL_COLOR_ATTACHMENT5,
|
GL_COLOR_ATTACHMENT5,
|
||||||
GL_COLOR_ATTACHMENT6,
|
GL_COLOR_ATTACHMENT6,
|
||||||
GL_COLOR_ATTACHMENT7,
|
GL_COLOR_ATTACHMENT7,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
glDrawBuffersEXT(count, buffers);
|
||||||
|
#else
|
||||||
glDrawBuffers(count, buffers);
|
glDrawBuffers(count, buffers);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else TRACELOG(LOG_WARNING, "GL: One color buffer active by default");
|
else TRACELOG(LOG_WARNING, "GL: One color buffer active by default");
|
||||||
@@ -1792,6 +1834,14 @@ void rlEnableWireMode(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rlEnablePointMode(void)
|
||||||
|
{
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
|
||||||
|
// NOTE: glPolygonMode() not available on OpenGL ES
|
||||||
|
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
|
||||||
|
glEnable(GL_PROGRAM_POINT_SIZE);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
// Disable wire mode
|
// Disable wire mode
|
||||||
void rlDisableWireMode(void)
|
void rlDisableWireMode(void)
|
||||||
{
|
{
|
||||||
@@ -2047,7 +2097,7 @@ void rlglInit(int width, int height)
|
|||||||
if ((glDebugMessageCallback != NULL) && (glDebugMessageControl != NULL))
|
if ((glDebugMessageCallback != NULL) && (glDebugMessageControl != NULL))
|
||||||
{
|
{
|
||||||
glDebugMessageCallback(rlDebugMessageCallback, 0);
|
glDebugMessageCallback(rlDebugMessageCallback, 0);
|
||||||
// glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR, GL_DEBUG_SEVERITY_HIGH, 0, 0, GL_TRUE); // TODO: Filter message
|
// glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR, GL_DEBUG_SEVERITY_HIGH, 0, 0, GL_TRUE);
|
||||||
|
|
||||||
// Debug context options:
|
// Debug context options:
|
||||||
// - GL_DEBUG_OUTPUT - Faster version but not useful for breakpoints
|
// - GL_DEBUG_OUTPUT - Faster version but not useful for breakpoints
|
||||||
@@ -2168,6 +2218,7 @@ void rlLoadExtensions(void *loader)
|
|||||||
RLGL.ExtSupported.instancing = (GLAD_GL_EXT_draw_instanced && GLAD_GL_ARB_instanced_arrays);
|
RLGL.ExtSupported.instancing = (GLAD_GL_EXT_draw_instanced && GLAD_GL_ARB_instanced_arrays);
|
||||||
RLGL.ExtSupported.texNPOT = GLAD_GL_ARB_texture_non_power_of_two;
|
RLGL.ExtSupported.texNPOT = GLAD_GL_ARB_texture_non_power_of_two;
|
||||||
RLGL.ExtSupported.texFloat32 = GLAD_GL_ARB_texture_float;
|
RLGL.ExtSupported.texFloat32 = GLAD_GL_ARB_texture_float;
|
||||||
|
RLGL.ExtSupported.texFloat16 = GLAD_GL_ARB_texture_float;
|
||||||
RLGL.ExtSupported.texDepth = GLAD_GL_ARB_depth_texture;
|
RLGL.ExtSupported.texDepth = GLAD_GL_ARB_depth_texture;
|
||||||
RLGL.ExtSupported.maxDepthBits = 32;
|
RLGL.ExtSupported.maxDepthBits = 32;
|
||||||
RLGL.ExtSupported.texAnisoFilter = GLAD_GL_EXT_texture_filter_anisotropic;
|
RLGL.ExtSupported.texAnisoFilter = GLAD_GL_EXT_texture_filter_anisotropic;
|
||||||
@@ -2179,6 +2230,7 @@ void rlLoadExtensions(void *loader)
|
|||||||
RLGL.ExtSupported.instancing = true;
|
RLGL.ExtSupported.instancing = true;
|
||||||
RLGL.ExtSupported.texNPOT = true;
|
RLGL.ExtSupported.texNPOT = true;
|
||||||
RLGL.ExtSupported.texFloat32 = true;
|
RLGL.ExtSupported.texFloat32 = true;
|
||||||
|
RLGL.ExtSupported.texFloat16 = true;
|
||||||
RLGL.ExtSupported.texDepth = true;
|
RLGL.ExtSupported.texDepth = true;
|
||||||
RLGL.ExtSupported.maxDepthBits = 32;
|
RLGL.ExtSupported.maxDepthBits = 32;
|
||||||
RLGL.ExtSupported.texAnisoFilter = true;
|
RLGL.ExtSupported.texAnisoFilter = true;
|
||||||
@@ -2196,11 +2248,35 @@ void rlLoadExtensions(void *loader)
|
|||||||
|
|
||||||
#endif // GRAPHICS_API_OPENGL_33
|
#endif // GRAPHICS_API_OPENGL_33
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
|
// Register supported extensions flags
|
||||||
|
// OpenGL ES 3.0 extensions supported by default (or it should be)
|
||||||
|
RLGL.ExtSupported.vao = true;
|
||||||
|
RLGL.ExtSupported.instancing = true;
|
||||||
|
RLGL.ExtSupported.texNPOT = true;
|
||||||
|
RLGL.ExtSupported.texFloat32 = true;
|
||||||
|
RLGL.ExtSupported.texFloat16 = true;
|
||||||
|
RLGL.ExtSupported.texDepth = true;
|
||||||
|
RLGL.ExtSupported.texDepthWebGL = true;
|
||||||
|
RLGL.ExtSupported.maxDepthBits = 24;
|
||||||
|
RLGL.ExtSupported.texAnisoFilter = true;
|
||||||
|
RLGL.ExtSupported.texMirrorClamp = true;
|
||||||
|
// TODO: Check for additional OpenGL ES 3.0 supported extensions:
|
||||||
|
//RLGL.ExtSupported.texCompDXT = true;
|
||||||
|
//RLGL.ExtSupported.texCompETC1 = true;
|
||||||
|
//RLGL.ExtSupported.texCompETC2 = true;
|
||||||
|
//RLGL.ExtSupported.texCompPVRT = true;
|
||||||
|
//RLGL.ExtSupported.texCompASTC = true;
|
||||||
|
//RLGL.ExtSupported.maxAnisotropyLevel = true;
|
||||||
|
//RLGL.ExtSupported.computeShader = true;
|
||||||
|
//RLGL.ExtSupported.ssbo = true;
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
|
||||||
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_DESKTOP_SDL)
|
||||||
|
// TODO: Support GLAD loader for OpenGL ES 3.0
|
||||||
if (gladLoadGLES2((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL ES2.0 functions");
|
if (gladLoadGLES2((GLADloadfunc)loader) == 0) TRACELOG(RL_LOG_WARNING, "GLAD: Cannot load OpenGL ES2.0 functions");
|
||||||
else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL ES2.0 loaded successfully");
|
else TRACELOG(RL_LOG_INFO, "GLAD: OpenGL ES 2.0 loaded successfully");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Get supported extensions list
|
// Get supported extensions list
|
||||||
@@ -2276,6 +2352,7 @@ void rlLoadExtensions(void *loader)
|
|||||||
|
|
||||||
// Check texture float support
|
// Check texture float support
|
||||||
if (strcmp(extList[i], (const char *)"GL_OES_texture_float") == 0) RLGL.ExtSupported.texFloat32 = true;
|
if (strcmp(extList[i], (const char *)"GL_OES_texture_float") == 0) RLGL.ExtSupported.texFloat32 = true;
|
||||||
|
if (strcmp(extList[i], (const char *)"GL_OES_texture_half_float") == 0) RLGL.ExtSupported.texFloat16 = true;
|
||||||
|
|
||||||
// Check depth texture support
|
// Check depth texture support
|
||||||
if (strcmp(extList[i], (const char *)"GL_OES_depth_texture") == 0) RLGL.ExtSupported.texDepth = true;
|
if (strcmp(extList[i], (const char *)"GL_OES_depth_texture") == 0) RLGL.ExtSupported.texDepth = true;
|
||||||
@@ -2391,15 +2468,17 @@ int rlGetVersion(void)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(GRAPHICS_API_OPENGL_21)
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
glVersion = RL_OPENGL_21;
|
glVersion = RL_OPENGL_21;
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_43)
|
||||||
|
glVersion = RL_OPENGL_43;
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33)
|
#elif defined(GRAPHICS_API_OPENGL_33)
|
||||||
glVersion = RL_OPENGL_33;
|
glVersion = RL_OPENGL_33;
|
||||||
#endif
|
#endif
|
||||||
#if defined(GRAPHICS_API_OPENGL_43)
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
glVersion = RL_OPENGL_43;
|
glVersion = RL_OPENGL_ES_30;
|
||||||
#endif
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
|
||||||
glVersion = RL_OPENGL_ES_20;
|
glVersion = RL_OPENGL_ES_20;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return glVersion;
|
return glVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2648,7 +2727,7 @@ void rlDrawRenderBatch(rlRenderBatch *batch)
|
|||||||
// Update batch vertex buffers
|
// Update batch vertex buffers
|
||||||
//------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------
|
||||||
// NOTE: If there is not vertex data, buffers doesn't need to be updated (vertexCount > 0)
|
// NOTE: If there is not vertex data, buffers doesn't need to be updated (vertexCount > 0)
|
||||||
// TODO: If no data changed on the CPU arrays --> No need to re-update GPU arrays (change flag required)
|
// TODO: If no data changed on the CPU arrays --> No need to re-update GPU arrays (use a change detector flag?)
|
||||||
if (RLGL.State.vertexCounter > 0)
|
if (RLGL.State.vertexCounter > 0)
|
||||||
{
|
{
|
||||||
// Activate elements VAO
|
// Activate elements VAO
|
||||||
@@ -2943,7 +3022,11 @@ unsigned int rlLoadTexture(const void *data, int width, int height, int format,
|
|||||||
|
|
||||||
int mipWidth = width;
|
int mipWidth = width;
|
||||||
int mipHeight = height;
|
int mipHeight = height;
|
||||||
int mipOffset = 0; // Mipmap data offset
|
int mipOffset = 0; // Mipmap data offset, only used for tracelog
|
||||||
|
|
||||||
|
// NOTE: Added pointer math separately from function to avoid UBSAN complaining
|
||||||
|
unsigned char *dataPtr = NULL;
|
||||||
|
if (data != NULL) dataPtr = (unsigned char *)data;
|
||||||
|
|
||||||
// Load the different mipmap levels
|
// Load the different mipmap levels
|
||||||
for (int i = 0; i < mipmapCount; i++)
|
for (int i = 0; i < mipmapCount; i++)
|
||||||
@@ -2955,11 +3038,11 @@ unsigned int rlLoadTexture(const void *data, int width, int height, int format,
|
|||||||
|
|
||||||
TRACELOGD("TEXTURE: Load mipmap level %i (%i x %i), size: %i, offset: %i", i, mipWidth, mipHeight, mipSize, mipOffset);
|
TRACELOGD("TEXTURE: Load mipmap level %i (%i x %i), size: %i, offset: %i", i, mipWidth, mipHeight, mipSize, mipOffset);
|
||||||
|
|
||||||
if (glInternalFormat != -1)
|
if (glInternalFormat != 0)
|
||||||
{
|
{
|
||||||
if (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB) glTexImage2D(GL_TEXTURE_2D, i, glInternalFormat, mipWidth, mipHeight, 0, glFormat, glType, (unsigned char *)data + mipOffset);
|
if (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB) glTexImage2D(GL_TEXTURE_2D, i, glInternalFormat, mipWidth, mipHeight, 0, glFormat, glType, dataPtr);
|
||||||
#if !defined(GRAPHICS_API_OPENGL_11)
|
#if !defined(GRAPHICS_API_OPENGL_11)
|
||||||
else glCompressedTexImage2D(GL_TEXTURE_2D, i, glInternalFormat, mipWidth, mipHeight, 0, mipSize, (unsigned char *)data + mipOffset);
|
else glCompressedTexImage2D(GL_TEXTURE_2D, i, glInternalFormat, mipWidth, mipHeight, 0, mipSize, dataPtr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33)
|
||||||
@@ -2982,7 +3065,8 @@ unsigned int rlLoadTexture(const void *data, int width, int height, int format,
|
|||||||
|
|
||||||
mipWidth /= 2;
|
mipWidth /= 2;
|
||||||
mipHeight /= 2;
|
mipHeight /= 2;
|
||||||
mipOffset += mipSize;
|
mipOffset += mipSize; // Increment offset position to next mipmap
|
||||||
|
if (data != NULL) dataPtr += mipSize; // Increment data pointer to next mipmap
|
||||||
|
|
||||||
// Security check for NPOT textures
|
// Security check for NPOT textures
|
||||||
if (mipWidth < 1) mipWidth = 1;
|
if (mipWidth < 1) mipWidth = 1;
|
||||||
@@ -3049,7 +3133,7 @@ unsigned int rlLoadTextureDepth(int width, int height, bool useRenderBuffer)
|
|||||||
// Possible formats: GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32 and GL_DEPTH_COMPONENT32F
|
// Possible formats: GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32 and GL_DEPTH_COMPONENT32F
|
||||||
unsigned int glInternalFormat = GL_DEPTH_COMPONENT;
|
unsigned int glInternalFormat = GL_DEPTH_COMPONENT;
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if (defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_ES3))
|
||||||
// WARNING: WebGL platform requires unsized internal format definition (GL_DEPTH_COMPONENT)
|
// WARNING: WebGL platform requires unsized internal format definition (GL_DEPTH_COMPONENT)
|
||||||
// while other platforms using OpenGL ES 2.0 require/support sized internal formats depending on the GPU capabilities
|
// while other platforms using OpenGL ES 2.0 require/support sized internal formats depending on the GPU capabilities
|
||||||
if (!RLGL.ExtSupported.texDepthWebGL || useRenderBuffer)
|
if (!RLGL.ExtSupported.texDepthWebGL || useRenderBuffer)
|
||||||
@@ -3108,7 +3192,7 @@ unsigned int rlLoadTextureCubemap(const void *data, int size, int format)
|
|||||||
unsigned int glInternalFormat, glFormat, glType;
|
unsigned int glInternalFormat, glFormat, glType;
|
||||||
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
||||||
|
|
||||||
if (glInternalFormat != -1)
|
if (glInternalFormat != 0)
|
||||||
{
|
{
|
||||||
// Load cubemap faces
|
// Load cubemap faces
|
||||||
for (unsigned int i = 0; i < 6; i++)
|
for (unsigned int i = 0; i < 6; i++)
|
||||||
@@ -3117,13 +3201,9 @@ unsigned int rlLoadTextureCubemap(const void *data, int size, int format)
|
|||||||
{
|
{
|
||||||
if (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB)
|
if (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB)
|
||||||
{
|
{
|
||||||
if (format == RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32)
|
if ((format == RL_PIXELFORMAT_UNCOMPRESSED_R32) || (format == RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32)
|
||||||
{
|
|| (format == RL_PIXELFORMAT_UNCOMPRESSED_R16) || (format == RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16))
|
||||||
// Instead of using a sized internal texture format (GL_RGB16F, GL_RGB32F), we let the driver to choose the better format for us (GL_RGB)
|
TRACELOG(RL_LOG_WARNING, "TEXTURES: Cubemap requested format not supported");
|
||||||
if (RLGL.ExtSupported.texFloat32) glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, size, size, 0, GL_RGB, GL_FLOAT, NULL);
|
|
||||||
else TRACELOG(RL_LOG_WARNING, "TEXTURES: Cubemap requested format not supported");
|
|
||||||
}
|
|
||||||
else if ((format == RL_PIXELFORMAT_UNCOMPRESSED_R32) || (format == RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32)) TRACELOG(RL_LOG_WARNING, "TEXTURES: Cubemap requested format not supported");
|
|
||||||
else glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, size, size, 0, glFormat, glType, NULL);
|
else glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, size, size, 0, glFormat, glType, NULL);
|
||||||
}
|
}
|
||||||
else TRACELOG(RL_LOG_WARNING, "TEXTURES: Empty cubemap creation does not support compressed format");
|
else TRACELOG(RL_LOG_WARNING, "TEXTURES: Empty cubemap creation does not support compressed format");
|
||||||
@@ -3180,7 +3260,7 @@ void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int h
|
|||||||
unsigned int glInternalFormat, glFormat, glType;
|
unsigned int glInternalFormat, glFormat, glType;
|
||||||
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
||||||
|
|
||||||
if ((glInternalFormat != -1) && (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB))
|
if ((glInternalFormat != 0) && (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB))
|
||||||
{
|
{
|
||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, offsetX, offsetY, width, height, glFormat, glType, data);
|
glTexSubImage2D(GL_TEXTURE_2D, 0, offsetX, offsetY, width, height, glFormat, glType, data);
|
||||||
}
|
}
|
||||||
@@ -3206,9 +3286,27 @@ void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned
|
|||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_4_4_4_4; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_4_4_4_4; break;
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_BYTE; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_BYTE; break;
|
||||||
#if !defined(GRAPHICS_API_OPENGL_11)
|
#if !defined(GRAPHICS_API_OPENGL_11)
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
|
#if defined(GRAPHICS_API_OPENGL_ES3)
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_R32F_EXT; *glFormat = GL_RED_EXT; *glType = GL_FLOAT; break;
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB32F_EXT; *glFormat = GL_RGB; *glType = GL_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA32F_EXT; *glFormat = GL_RGBA; *glType = GL_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_R16F_EXT; *glFormat = GL_RED_EXT; *glType = GL_HALF_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGB16F_EXT; *glFormat = GL_RGB; *glType = GL_HALF_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGBA16F_EXT; *glFormat = GL_RGBA; *glType = GL_HALF_FLOAT; break;
|
||||||
|
#else
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_HALF_FLOAT_ARB; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_HALF_FLOAT_ARB; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_HALF_FLOAT_ARB; break;
|
||||||
|
#else // defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_HALF_FLOAT_OES; break; // NOTE: Requires extension OES_texture_half_float
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33)
|
#elif defined(GRAPHICS_API_OPENGL_33)
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *glInternalFormat = GL_R8; *glFormat = GL_RED; *glType = GL_UNSIGNED_BYTE; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *glInternalFormat = GL_R8; *glFormat = GL_RED; *glType = GL_UNSIGNED_BYTE; break;
|
||||||
@@ -3221,6 +3319,9 @@ void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned
|
|||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_R32F; *glFormat = GL_RED; *glType = GL_FLOAT; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_R32F; *glFormat = GL_RED; *glType = GL_FLOAT; break;
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB32F; *glFormat = GL_RGB; *glType = GL_FLOAT; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB32F; *glFormat = GL_RGB; *glType = GL_FLOAT; break;
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA32F; *glFormat = GL_RGBA; *glType = GL_FLOAT; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA32F; *glFormat = GL_RGBA; *glType = GL_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_R16F; *glFormat = GL_RED; *glType = GL_HALF_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGB16F; *glFormat = GL_RGB; *glType = GL_HALF_FLOAT; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: if (RLGL.ExtSupported.texFloat16) *glInternalFormat = GL_RGBA16F; *glFormat = GL_RGBA; *glType = GL_HALF_FLOAT; break;
|
||||||
#endif
|
#endif
|
||||||
#if !defined(GRAPHICS_API_OPENGL_11)
|
#if !defined(GRAPHICS_API_OPENGL_11)
|
||||||
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: if (RLGL.ExtSupported.texCompDXT) *glInternalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; break;
|
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: if (RLGL.ExtSupported.texCompDXT) *glInternalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; break;
|
||||||
@@ -3303,7 +3404,7 @@ void *rlReadTexturePixels(unsigned int id, int width, int height, int format)
|
|||||||
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
||||||
unsigned int size = rlGetPixelDataSize(width, height, format);
|
unsigned int size = rlGetPixelDataSize(width, height, format);
|
||||||
|
|
||||||
if ((glInternalFormat != -1) && (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB))
|
if ((glInternalFormat != 0) && (format < RL_PIXELFORMAT_COMPRESSED_DXT1_RGB))
|
||||||
{
|
{
|
||||||
pixels = RL_MALLOC(size);
|
pixels = RL_MALLOC(size);
|
||||||
glGetTexImage(GL_TEXTURE_2D, 0, glFormat, glType, pixels);
|
glGetTexImage(GL_TEXTURE_2D, 0, glFormat, glType, pixels);
|
||||||
@@ -3466,11 +3567,14 @@ bool rlFramebufferComplete(unsigned int id)
|
|||||||
void rlUnloadFramebuffer(unsigned int id)
|
void rlUnloadFramebuffer(unsigned int id)
|
||||||
{
|
{
|
||||||
#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(RLGL_RENDER_TEXTURES_HINT)
|
#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(RLGL_RENDER_TEXTURES_HINT)
|
||||||
|
|
||||||
// Query depth attachment to automatically delete texture/renderbuffer
|
// Query depth attachment to automatically delete texture/renderbuffer
|
||||||
int depthType = 0, depthId = 0;
|
int depthType = 0, depthId = 0;
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, id); // Bind framebuffer to query depth texture type
|
glBindFramebuffer(GL_FRAMEBUFFER, id); // Bind framebuffer to query depth texture type
|
||||||
glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &depthType);
|
glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &depthType);
|
||||||
|
|
||||||
|
// TODO: Review warning retrieving object name in WebGL
|
||||||
|
// WARNING: WebGL: INVALID_ENUM: getFramebufferAttachmentParameter: invalid parameter name
|
||||||
|
// https://registry.khronos.org/webgl/specs/latest/1.0/
|
||||||
glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &depthId);
|
glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &depthId);
|
||||||
|
|
||||||
unsigned int depthIdU = (unsigned int)depthId;
|
unsigned int depthIdU = (unsigned int)depthId;
|
||||||
@@ -3616,7 +3720,11 @@ void rlDrawVertexArray(int offset, int count)
|
|||||||
// Draw vertex array elements
|
// Draw vertex array elements
|
||||||
void rlDrawVertexArrayElements(int offset, int count, const void *buffer)
|
void rlDrawVertexArrayElements(int offset, int count, const void *buffer)
|
||||||
{
|
{
|
||||||
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, (const unsigned short *)buffer + offset);
|
// NOTE: Added pointer math separately from function to avoid UBSAN complaining
|
||||||
|
unsigned short *bufferPtr = (unsigned short *)buffer;
|
||||||
|
if (offset > 0) bufferPtr += offset;
|
||||||
|
|
||||||
|
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, (const unsigned short *)bufferPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw vertex array instanced
|
// Draw vertex array instanced
|
||||||
@@ -3631,7 +3739,11 @@ void rlDrawVertexArrayInstanced(int offset, int count, int instances)
|
|||||||
void rlDrawVertexArrayElementsInstanced(int offset, int count, const void *buffer, int instances)
|
void rlDrawVertexArrayElementsInstanced(int offset, int count, const void *buffer, int instances)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
glDrawElementsInstanced(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, (const unsigned short *)buffer + offset, instances);
|
// NOTE: Added pointer math separately from function to avoid UBSAN complaining
|
||||||
|
unsigned short *bufferPtr = (unsigned short *)buffer;
|
||||||
|
if (offset > 0) bufferPtr += offset;
|
||||||
|
|
||||||
|
glDrawElementsInstanced(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, (const unsigned short *)bufferPtr, instances);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3923,8 +4035,8 @@ int rlGetLocationUniform(unsigned int shaderId, const char *uniformName)
|
|||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
location = glGetUniformLocation(shaderId, uniformName);
|
location = glGetUniformLocation(shaderId, uniformName);
|
||||||
|
|
||||||
if (location == -1) TRACELOG(RL_LOG_WARNING, "SHADER: [ID %i] Failed to find shader uniform: %s", shaderId, uniformName);
|
//if (location == -1) TRACELOG(RL_LOG_WARNING, "SHADER: [ID %i] Failed to find shader uniform: %s", shaderId, uniformName);
|
||||||
else TRACELOG(RL_LOG_INFO, "SHADER: [ID %i] Shader uniform (%s) set at location: %i", shaderId, uniformName, location);
|
//else TRACELOG(RL_LOG_INFO, "SHADER: [ID %i] Shader uniform (%s) set at location: %i", shaderId, uniformName, location);
|
||||||
#endif
|
#endif
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
@@ -3936,8 +4048,8 @@ int rlGetLocationAttrib(unsigned int shaderId, const char *attribName)
|
|||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
location = glGetAttribLocation(shaderId, attribName);
|
location = glGetAttribLocation(shaderId, attribName);
|
||||||
|
|
||||||
if (location == -1) TRACELOG(RL_LOG_WARNING, "SHADER: [ID %i] Failed to find shader attribute: %s", shaderId, attribName);
|
//if (location == -1) TRACELOG(RL_LOG_WARNING, "SHADER: [ID %i] Failed to find shader attribute: %s", shaderId, attribName);
|
||||||
else TRACELOG(RL_LOG_INFO, "SHADER: [ID %i] Shader attribute (%s) set at location: %i", shaderId, attribName, location);
|
//else TRACELOG(RL_LOG_INFO, "SHADER: [ID %i] Shader attribute (%s) set at location: %i", shaderId, attribName, location);
|
||||||
#endif
|
#endif
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
@@ -4091,7 +4203,7 @@ unsigned int rlLoadShaderBuffer(unsigned int size, const void *data, int usageHi
|
|||||||
glGenBuffers(1, &ssbo);
|
glGenBuffers(1, &ssbo);
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, ssbo);
|
||||||
glBufferData(GL_SHADER_STORAGE_BUFFER, size, data, usageHint? usageHint : RL_STREAM_COPY);
|
glBufferData(GL_SHADER_STORAGE_BUFFER, size, data, usageHint? usageHint : RL_STREAM_COPY);
|
||||||
glClearBufferData(GL_SHADER_STORAGE_BUFFER, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, 0);
|
if (data == NULL) glClearBufferData(GL_SHADER_STORAGE_BUFFER, GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE, NULL); // Clear buffer data to 0
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -4162,7 +4274,7 @@ void rlBindImageTexture(unsigned int id, unsigned int index, int format, bool re
|
|||||||
unsigned int glInternalFormat = 0, glFormat = 0, glType = 0;
|
unsigned int glInternalFormat = 0, glFormat = 0, glType = 0;
|
||||||
|
|
||||||
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
|
||||||
glBindImageTexture(index, id, 0, 0, 0, readonly ? GL_READ_ONLY : GL_READ_WRITE, glInternalFormat);
|
glBindImageTexture(index, id, 0, 0, 0, readonly? GL_READ_ONLY : GL_READ_WRITE, glInternalFormat);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4428,6 +4540,9 @@ const char *rlGetPixelFormatName(unsigned int format)
|
|||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32: return "R32"; break; // 32 bpp (1 channel - float)
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32: return "R32"; break; // 32 bpp (1 channel - float)
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: return "R32G32B32"; break; // 32*3 bpp (3 channels - float)
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: return "R32G32B32"; break; // 32*3 bpp (3 channels - float)
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: return "R32G32B32A32"; break; // 32*4 bpp (4 channels - float)
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: return "R32G32B32A32"; break; // 32*4 bpp (4 channels - float)
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16: return "R16"; break; // 16 bpp (1 channel - half float)
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: return "R16G16B16"; break; // 16*3 bpp (3 channels - half float)
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: return "R16G16B16A16"; break; // 16*4 bpp (4 channels - half float)
|
||||||
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: return "DXT1_RGB"; break; // 4 bpp (no alpha)
|
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB: return "DXT1_RGB"; break; // 4 bpp (no alpha)
|
||||||
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA: return "DXT1_RGBA"; break; // 4 bpp (1 bit alpha)
|
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA: return "DXT1_RGBA"; break; // 4 bpp (1 bit alpha)
|
||||||
case RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA: return "DXT3_RGBA"; break; // 8 bpp
|
case RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA: return "DXT3_RGBA"; break; // 8 bpp
|
||||||
@@ -4476,6 +4591,7 @@ static void rlLoadShaderDefault(void)
|
|||||||
#endif
|
#endif
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
"#version 100 \n"
|
"#version 100 \n"
|
||||||
|
"precision mediump float; \n" // Precision required for OpenGL ES2 (WebGL) (on some browsers)
|
||||||
"attribute vec3 vertexPosition; \n"
|
"attribute vec3 vertexPosition; \n"
|
||||||
"attribute vec2 vertexTexCoord; \n"
|
"attribute vec2 vertexTexCoord; \n"
|
||||||
"attribute vec4 vertexColor; \n"
|
"attribute vec4 vertexColor; \n"
|
||||||
@@ -4574,7 +4690,7 @@ static void rlUnloadShaderDefault(void)
|
|||||||
|
|
||||||
#if defined(RLGL_SHOW_GL_DETAILS_INFO)
|
#if defined(RLGL_SHOW_GL_DETAILS_INFO)
|
||||||
// Get compressed format official GL identifier name
|
// Get compressed format official GL identifier name
|
||||||
static char *rlGetCompressedFormatName(int format)
|
static const char *rlGetCompressedFormatName(int format)
|
||||||
{
|
{
|
||||||
switch (format)
|
switch (format)
|
||||||
{
|
{
|
||||||
@@ -4669,6 +4785,9 @@ static int rlGetPixelDataSize(int width, int height, int format)
|
|||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32: bpp = 32; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32: bpp = 32; break;
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: bpp = 32*3; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32: bpp = 32*3; break;
|
||||||
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break;
|
case RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16: bpp = 16; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16: bpp = 16*3; break;
|
||||||
|
case RL_PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: bpp = 16*4; break;
|
||||||
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB:
|
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGB:
|
||||||
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA:
|
case RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA:
|
||||||
case RL_PIXELFORMAT_COMPRESSED_ETC1_RGB:
|
case RL_PIXELFORMAT_COMPRESSED_ETC1_RGB:
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ int lshapesSetShapesTexture( lua_State *L );
|
|||||||
int lshapesDrawPixel( lua_State *L );
|
int lshapesDrawPixel( lua_State *L );
|
||||||
int lshapesDrawLine( lua_State *L );
|
int lshapesDrawLine( lua_State *L );
|
||||||
int lshapesDrawLineBezier( lua_State *L );
|
int lshapesDrawLineBezier( lua_State *L );
|
||||||
int lshapesDrawLineBezierQuad( lua_State *L );
|
|
||||||
int lshapesDrawLineBezierCubic( lua_State *L );
|
|
||||||
int lshapesDrawLineStrip( lua_State *L );
|
int lshapesDrawLineStrip( lua_State *L );
|
||||||
int lshapesDrawCircle( lua_State *L );
|
int lshapesDrawCircle( lua_State *L );
|
||||||
int lshapesDrawCircleSector( lua_State *L );
|
int lshapesDrawCircleSector( lua_State *L );
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ int ltextDrawTextCodepoints( lua_State *L );
|
|||||||
int ltextDrawTextBoxed( lua_State *L );
|
int ltextDrawTextBoxed( lua_State *L );
|
||||||
int ltextDrawTextBoxedTinted( lua_State *L );
|
int ltextDrawTextBoxedTinted( lua_State *L );
|
||||||
/* Text font info functions. */
|
/* Text font info functions. */
|
||||||
|
int ltextSetTextLineSpacing( lua_State *L );
|
||||||
int ltextMeasureText( lua_State *L );
|
int ltextMeasureText( lua_State *L );
|
||||||
int ltextGetGlyphIndex( lua_State *L );
|
int ltextGetGlyphIndex( lua_State *L );
|
||||||
int ltextGetGlyphInfo( lua_State *L );
|
int ltextGetGlyphInfo( lua_State *L );
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
/* Image loading functions. */
|
/* Image loading functions. */
|
||||||
int ltexturesLoadImage( lua_State *L );
|
int ltexturesLoadImage( lua_State *L );
|
||||||
int ltexturesLoadImageRaw( lua_State *L );
|
int ltexturesLoadImageRaw( lua_State *L );
|
||||||
|
int ltexturesLoadImageSvg( lua_State *L );
|
||||||
int ltexturesLoadImageAnim( lua_State *L );
|
int ltexturesLoadImageAnim( lua_State *L );
|
||||||
int ltexturesLoadImageFromMemory( lua_State *L );
|
int ltexturesLoadImageFromMemory( lua_State *L );
|
||||||
int ltexturesLoadImageFromTexture( lua_State *L );
|
int ltexturesLoadImageFromTexture( lua_State *L );
|
||||||
@@ -10,12 +11,13 @@ int ltexturesLoadImageFromScreen( lua_State *L );
|
|||||||
int ltextureIsImageReady( lua_State *L );
|
int ltextureIsImageReady( lua_State *L );
|
||||||
int ltextureUnloadImage( lua_State *L );
|
int ltextureUnloadImage( lua_State *L );
|
||||||
int ltexturesExportImage( lua_State *L );
|
int ltexturesExportImage( lua_State *L );
|
||||||
|
int ltexturesExportImageToMemory( lua_State *L );
|
||||||
int ltexturesExportImageAsCode( lua_State *L );
|
int ltexturesExportImageAsCode( lua_State *L );
|
||||||
/* Image generation functions. */
|
/* Image generation functions. */
|
||||||
int ltexturesGenImageColor( lua_State *L );
|
int ltexturesGenImageColor( lua_State *L );
|
||||||
int ltexturesGenImageGradientV( lua_State *L );
|
int ltexturesGenImageGradientLinear( lua_State *L );
|
||||||
int ltexturesGenImageGradientH( lua_State *L );
|
|
||||||
int ltexturesGenImageGradientRadial( lua_State *L );
|
int ltexturesGenImageGradientRadial( lua_State *L );
|
||||||
|
int ltexturesGenImageGradientSquare( lua_State *L );
|
||||||
int ltexturesGenImageChecked( lua_State *L );
|
int ltexturesGenImageChecked( lua_State *L );
|
||||||
int ltexturesGenImageWhiteNoise( lua_State *L );
|
int ltexturesGenImageWhiteNoise( lua_State *L );
|
||||||
int ltexturesGenImagePerlinNoise( lua_State *L );
|
int ltexturesGenImagePerlinNoise( lua_State *L );
|
||||||
@@ -40,6 +42,7 @@ int ltexturesImageMipmaps( lua_State *L );
|
|||||||
int ltexturesImageDither( lua_State *L );
|
int ltexturesImageDither( lua_State *L );
|
||||||
int ltexturesImageFlipVertical( lua_State *L );
|
int ltexturesImageFlipVertical( lua_State *L );
|
||||||
int ltexturesImageFlipHorizontal( lua_State *L );
|
int ltexturesImageFlipHorizontal( lua_State *L );
|
||||||
|
int ltexturesImageRotate( lua_State *L );
|
||||||
int ltexturesImageRotateCW( lua_State *L );
|
int ltexturesImageRotateCW( lua_State *L );
|
||||||
int ltexturesImageRotateCCW( lua_State *L );
|
int ltexturesImageRotateCCW( lua_State *L );
|
||||||
int ltexturesImageColorTint( lua_State *L );
|
int ltexturesImageColorTint( lua_State *L );
|
||||||
|
|||||||
76
src/audio.c
76
src/audio.c
@@ -7,6 +7,41 @@
|
|||||||
## Audio - Audio device management functions
|
## Audio - Audio device management functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.InitAudioDevice()
|
||||||
|
|
||||||
|
Initialize audio device and context
|
||||||
|
*/
|
||||||
|
int laudioInitAudioDevice( lua_State *L ) {
|
||||||
|
InitAudioDevice();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.CloseAudioDevice()
|
||||||
|
|
||||||
|
Close the audio device and context
|
||||||
|
*/
|
||||||
|
int laudioCloseAudioDevice( lua_State *L ) {
|
||||||
|
CloseAudioDevice();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> isReady = RL.IsAudioDeviceReady()
|
||||||
|
|
||||||
|
Check if audio device has been initialized successfully
|
||||||
|
|
||||||
|
- Success return bool
|
||||||
|
*/
|
||||||
|
int laudioIsAudioDeviceReady( lua_State *L ) {
|
||||||
|
lua_pushboolean( L, IsAudioDeviceReady() );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.SetMasterVolume( float volume )
|
> RL.SetMasterVolume( float volume )
|
||||||
|
|
||||||
@@ -20,6 +55,19 @@ int laudioSetMasterVolume( lua_State *L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> isReady = RL.GetMasterVolume()
|
||||||
|
|
||||||
|
Get master volume (listener)
|
||||||
|
|
||||||
|
- Success return float
|
||||||
|
*/
|
||||||
|
int laudioGetMasterVolume( lua_State *L ) {
|
||||||
|
lua_pushnumber( L, GetMasterVolume() );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
## Audio - Wave/Sound loading/unloading functions
|
## Audio - Wave/Sound loading/unloading functions
|
||||||
*/
|
*/
|
||||||
@@ -94,6 +142,21 @@ int laudioLoadSoundFromWave( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> sound = RL.LoadSoundAlias( Sound source )
|
||||||
|
|
||||||
|
Create a new sound that shares the same sample data as the source sound, does not own the sound data
|
||||||
|
|
||||||
|
- Success return Sound
|
||||||
|
*/
|
||||||
|
int laudioLoadSoundAlias( lua_State *L ) {
|
||||||
|
Sound *source = uluaGetSound( L, 1 );
|
||||||
|
|
||||||
|
uluaPushSound( L, LoadSoundAlias( *source ) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> isReady = RL.IsSoundReady( Sound sound )
|
> isReady = RL.IsSoundReady( Sound sound )
|
||||||
|
|
||||||
@@ -135,6 +198,19 @@ int laudioUnloadSound( lua_State *L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.UnloadSoundAlias( Sound alias )
|
||||||
|
|
||||||
|
Unload a sound alias (does not deallocate sample data)
|
||||||
|
*/
|
||||||
|
int laudioUnloadSoundAlias( lua_State *L ) {
|
||||||
|
Sound *alias = uluaGetSound( L, 1 );
|
||||||
|
|
||||||
|
UnloadSoundAlias( *alias );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> success = RL.ExportWave( Wave wave, string fileName )
|
> success = RL.ExportWave( Wave wave, string fileName )
|
||||||
|
|
||||||
|
|||||||
516
src/core.c
516
src/core.c
@@ -28,6 +28,17 @@ void unloadBuffer( Buffer *buffer ) {
|
|||||||
## Core - Window-related functions
|
## Core - Window-related functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.CloseWindow()
|
||||||
|
|
||||||
|
Close window and unload OpenGL context and free all resources
|
||||||
|
*/
|
||||||
|
int lcoreCloseWindow( lua_State *L ) {
|
||||||
|
state->run = false;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> state = RL.IsWindowReady()
|
> state = RL.IsWindowReady()
|
||||||
|
|
||||||
@@ -107,154 +118,18 @@ int lcoreIsWindowFocused( lua_State *L ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.SetWindowMonitor( int monitor )
|
> resized = RL.IsWindowResized()
|
||||||
|
|
||||||
Set monitor for the current window (fullscreen mode)
|
Check if window has been resized from last frame
|
||||||
|
|
||||||
|
- Success return bool
|
||||||
*/
|
*/
|
||||||
int lcoreSetWindowMonitor( lua_State *L ) {
|
int lcoreIsWindowResized( lua_State *L ) {
|
||||||
int monitor = luaL_checkinteger( L, 1 );
|
lua_pushboolean( L, IsWindowResized() );
|
||||||
|
|
||||||
SetWindowMonitor( monitor );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.SetWindowPosition( Vector2 pos )
|
|
||||||
|
|
||||||
Set window position on screen
|
|
||||||
*/
|
|
||||||
int lcoreSetWindowPosition( lua_State *L ) {
|
|
||||||
Vector2 pos = uluaGetVector2( L, 1 );
|
|
||||||
|
|
||||||
SetWindowPosition( pos.x, pos.y );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.SetWindowSize( Vector2 size )
|
|
||||||
|
|
||||||
Set window dimensions
|
|
||||||
*/
|
|
||||||
int lcoreSetWindowSize( lua_State *L ) {
|
|
||||||
Vector2 size = uluaGetVector2( L, 1 );
|
|
||||||
|
|
||||||
SetWindowSize( (int)size.x, (int)size.y );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.SetWindowOpacity( float opacity )
|
|
||||||
|
|
||||||
Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
|
|
||||||
*/
|
|
||||||
int lcoreSetWindowOpacity( lua_State *L ) {
|
|
||||||
float opacity = luaL_checknumber( L, 1 );
|
|
||||||
|
|
||||||
SetWindowOpacity( opacity );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> windowHandle = RL.GetWindowHandle()
|
|
||||||
|
|
||||||
Get native window handle. Return as lightuserdata
|
|
||||||
|
|
||||||
- Success return lightuserdata
|
|
||||||
*/
|
|
||||||
int lcoreGetWindowHandle( lua_State *L ) {
|
|
||||||
lua_pushlightuserdata( L, GetWindowHandle() );
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.SetWindowMinSize( Vector2 size )
|
|
||||||
|
|
||||||
Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
|
||||||
*/
|
|
||||||
int lcoreSetWindowMinSize( lua_State *L ) {
|
|
||||||
Vector2 size = uluaGetVector2( L, 1 );
|
|
||||||
|
|
||||||
SetWindowMinSize( (int)size.x, (int)size.y );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> position = RL.GetMonitorPosition( int monitor )
|
|
||||||
|
|
||||||
Get specified monitor position
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
*/
|
|
||||||
int lcoreGetMonitorPosition( lua_State *L ) {
|
|
||||||
int monitor = luaL_checkinteger( L, 1 );
|
|
||||||
|
|
||||||
uluaPushVector2( L, GetMonitorPosition( monitor ) );
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> size = RL.GetMonitorSize( int monitor )
|
|
||||||
|
|
||||||
Get specified monitor size
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
*/
|
|
||||||
int lcoreGetMonitorSize( lua_State *L ) {
|
|
||||||
int monitor = luaL_checkinteger( L, 1 );
|
|
||||||
|
|
||||||
Vector2 size = (Vector2){ GetMonitorWidth( monitor ), GetMonitorHeight( monitor ) };
|
|
||||||
uluaPushVector2( L, size );
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> position = RL.GetWindowPosition()
|
|
||||||
|
|
||||||
Get window position on monitor
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
*/
|
|
||||||
int lcoreGetWindowPosition( lua_State *L ) {
|
|
||||||
uluaPushVector2( L, GetWindowPosition() );
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> size = RL.GetScreenSize()
|
|
||||||
|
|
||||||
Get screen size
|
|
||||||
|
|
||||||
- Success return Vector2
|
|
||||||
*/
|
|
||||||
int lcoreGetScreenSize( lua_State *L ) {
|
|
||||||
Vector2 size = (Vector2){ GetScreenWidth(), GetScreenHeight() };
|
|
||||||
uluaPushVector2( L, size );
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.SetWindowState( int flag )
|
|
||||||
|
|
||||||
Set window configuration state using flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
|
||||||
*/
|
|
||||||
int lcoreSetWindowState( lua_State *L ) {
|
|
||||||
unsigned int flag = (unsigned int)luaL_checkinteger( L, 1 );
|
|
||||||
|
|
||||||
SetWindowState( flag );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> state = RL.IsWindowState( int flag )
|
> state = RL.IsWindowState( int flag )
|
||||||
|
|
||||||
@@ -270,6 +145,19 @@ int lcoreIsWindowState( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowState( int flag )
|
||||||
|
|
||||||
|
Set window configuration state using flags (FLAG_FULLSCREEN_MODE, FLAG_WINDOW_RESIZABLE...)
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowState( lua_State *L ) {
|
||||||
|
unsigned int flag = (unsigned int)luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
SetWindowState( flag );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> resized = RL.ClearWindowState( int flag )
|
> resized = RL.ClearWindowState( int flag )
|
||||||
|
|
||||||
@@ -286,16 +174,58 @@ int lcoreClearWindowState( lua_State *L ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> resized = RL.IsWindowResized()
|
> RL.ToggleFullscreen()
|
||||||
|
|
||||||
Check if window has been resized from last frame
|
Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP)
|
||||||
|
|
||||||
- Success return bool
|
|
||||||
*/
|
*/
|
||||||
int lcoreIsWindowResized( lua_State *L ) {
|
int lcoreToggleFullscreen( lua_State *L ) {
|
||||||
lua_pushboolean( L, IsWindowResized() );
|
ToggleFullscreen();
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.ToggleBorderlessWindowed()
|
||||||
|
|
||||||
|
Toggle window state: borderless windowed (only PLATFORM_DESKTOP)
|
||||||
|
*/
|
||||||
|
int lcoreToggleBorderlessWindowed( lua_State *L ) {
|
||||||
|
ToggleBorderlessWindowed();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.MaximizeWindow()
|
||||||
|
|
||||||
|
Set window state: maximized, if resizable (only PLATFORM_DESKTOP)
|
||||||
|
*/
|
||||||
|
int lcoreMaximizeWindow( lua_State *L ) {
|
||||||
|
MaximizeWindow();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.MinimizeWindow()
|
||||||
|
|
||||||
|
Set window state: minimized, if resizable (only PLATFORM_DESKTOP)
|
||||||
|
*/
|
||||||
|
int lcoreMinimizeWindow( lua_State *L ) {
|
||||||
|
MinimizeWindow();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.RestoreWindow()
|
||||||
|
|
||||||
|
Set window state: not minimized/maximized (only PLATFORM_DESKTOP)
|
||||||
|
*/
|
||||||
|
int lcoreRestoreWindow( lua_State *L ) {
|
||||||
|
RestoreWindow();
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -338,7 +268,7 @@ int lcoreSetWindowIcons( lua_State *L ) {
|
|||||||
/*
|
/*
|
||||||
> RL.SetWindowTitle( string title )
|
> RL.SetWindowTitle( string title )
|
||||||
|
|
||||||
Set title for window (Only PLATFORM_DESKTOP)
|
Set title for window (only PLATFORM_DESKTOP and PLATFORM_WEB)
|
||||||
*/
|
*/
|
||||||
int lcoreSetWindowTitle( lua_State *L ) {
|
int lcoreSetWindowTitle( lua_State *L ) {
|
||||||
SetWindowTitle( luaL_checkstring( L, 1 ) );
|
SetWindowTitle( luaL_checkstring( L, 1 ) );
|
||||||
@@ -346,6 +276,136 @@ int lcoreSetWindowTitle( lua_State *L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowPosition( Vector2 pos )
|
||||||
|
|
||||||
|
Set window position on screen
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowPosition( lua_State *L ) {
|
||||||
|
Vector2 pos = uluaGetVector2( L, 1 );
|
||||||
|
|
||||||
|
SetWindowPosition( pos.x, pos.y );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowMonitor( int monitor )
|
||||||
|
|
||||||
|
Set monitor for the current window
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowMonitor( lua_State *L ) {
|
||||||
|
int monitor = luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
SetWindowMonitor( monitor );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowMinSize( Vector2 size )
|
||||||
|
|
||||||
|
Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowMinSize( lua_State *L ) {
|
||||||
|
Vector2 size = uluaGetVector2( L, 1 );
|
||||||
|
|
||||||
|
SetWindowMinSize( (int)size.x, (int)size.y );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowMaxSize( Vector2 size )
|
||||||
|
|
||||||
|
Set window maximum dimensions (for FLAG_WINDOW_RESIZABLE)
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowMaxSize( lua_State *L ) {
|
||||||
|
Vector2 size = uluaGetVector2( L, 1 );
|
||||||
|
|
||||||
|
SetWindowMaxSize( (int)size.x, (int)size.y );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowSize( Vector2 size )
|
||||||
|
|
||||||
|
Set window dimensions
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowSize( lua_State *L ) {
|
||||||
|
Vector2 size = uluaGetVector2( L, 1 );
|
||||||
|
|
||||||
|
SetWindowSize( (int)size.x, (int)size.y );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowOpacity( float opacity )
|
||||||
|
|
||||||
|
Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP)
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowOpacity( lua_State *L ) {
|
||||||
|
float opacity = luaL_checknumber( L, 1 );
|
||||||
|
|
||||||
|
SetWindowOpacity( opacity );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetWindowFocused()
|
||||||
|
|
||||||
|
Set window focused (only PLATFORM_DESKTOP)
|
||||||
|
*/
|
||||||
|
int lcoreSetWindowFocused( lua_State *L ) {
|
||||||
|
SetWindowFocused();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> windowHandle = RL.GetWindowHandle()
|
||||||
|
|
||||||
|
Get native window handle. Return as lightuserdata
|
||||||
|
|
||||||
|
- Success return lightuserdata
|
||||||
|
*/
|
||||||
|
int lcoreGetWindowHandle( lua_State *L ) {
|
||||||
|
lua_pushlightuserdata( L, GetWindowHandle() );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> size = RL.GetScreenSize()
|
||||||
|
|
||||||
|
Get screen size
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
*/
|
||||||
|
int lcoreGetScreenSize( lua_State *L ) {
|
||||||
|
Vector2 size = (Vector2){ GetScreenWidth(), GetScreenHeight() };
|
||||||
|
uluaPushVector2( L, size );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> size = RL.GetRenderSize()
|
||||||
|
|
||||||
|
Get render size
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
*/
|
||||||
|
int lcoreGetRenderSize( lua_State *L ) {
|
||||||
|
Vector2 size = (Vector2){ GetRenderWidth(), GetRenderHeight() };
|
||||||
|
uluaPushVector2( L, size );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> count = RL.GetMonitorCount()
|
> count = RL.GetMonitorCount()
|
||||||
|
|
||||||
@@ -372,6 +432,37 @@ int lcoreGetCurrentMonitor( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> position = RL.GetMonitorPosition( int monitor )
|
||||||
|
|
||||||
|
Get specified monitor position
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
*/
|
||||||
|
int lcoreGetMonitorPosition( lua_State *L ) {
|
||||||
|
int monitor = luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
uluaPushVector2( L, GetMonitorPosition( monitor ) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> size = RL.GetMonitorSize( int monitor )
|
||||||
|
|
||||||
|
Get specified monitor size
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
*/
|
||||||
|
int lcoreGetMonitorSize( lua_State *L ) {
|
||||||
|
int monitor = luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
Vector2 size = (Vector2){ GetMonitorWidth( monitor ), GetMonitorHeight( monitor ) };
|
||||||
|
uluaPushVector2( L, size );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> size = RL.GetMonitorPhysicalSize( int monitor )
|
> size = RL.GetMonitorPhysicalSize( int monitor )
|
||||||
|
|
||||||
@@ -403,6 +494,19 @@ int lcoreGetMonitorRefreshRate( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> position = RL.GetWindowPosition()
|
||||||
|
|
||||||
|
Get window position on monitor
|
||||||
|
|
||||||
|
- Success return Vector2
|
||||||
|
*/
|
||||||
|
int lcoreGetWindowPosition( lua_State *L ) {
|
||||||
|
uluaPushVector2( L, GetWindowPosition() );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> dpi = RL.GetWindowScaleDPI()
|
> dpi = RL.GetWindowScaleDPI()
|
||||||
|
|
||||||
@@ -419,7 +523,7 @@ int lcoreGetWindowScaleDPI( lua_State *L ) {
|
|||||||
/*
|
/*
|
||||||
> name = RL.GetMonitorName( int monitor )
|
> name = RL.GetMonitorName( int monitor )
|
||||||
|
|
||||||
Get the human-readable, UTF-8 encoded name of the monitor
|
Get the human-readable, UTF-8 encoded name of the specified monitor
|
||||||
|
|
||||||
- Success return string
|
- Success return string
|
||||||
*/
|
*/
|
||||||
@@ -431,17 +535,6 @@ int lcoreGetMonitorName( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.CloseWindow()
|
|
||||||
|
|
||||||
Close window and unload OpenGL context and free all resources
|
|
||||||
*/
|
|
||||||
int lcoreCloseWindow( lua_State *L ) {
|
|
||||||
state->run = false;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.SetClipboardText( string text )
|
> RL.SetClipboardText( string text )
|
||||||
|
|
||||||
@@ -1151,6 +1244,63 @@ int lcoreGetTime( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
## Core - Random values generation functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.SetRandomSeed( int seed )
|
||||||
|
|
||||||
|
Set the seed for the random number generator
|
||||||
|
*/
|
||||||
|
int lcoreSetRandomSeed( lua_State *L ) {
|
||||||
|
unsigned int seed = (unsigned int)luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
SetRandomSeed( seed );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> time = RL.GetRandomValue( int min, int max )
|
||||||
|
|
||||||
|
Get a random value between min and max (both included)
|
||||||
|
|
||||||
|
- Success return int
|
||||||
|
*/
|
||||||
|
int lcoreGetRandomValue( lua_State *L ) {
|
||||||
|
int min = luaL_checkinteger( L, 1 );
|
||||||
|
int max = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
lua_pushinteger( L, GetRandomValue( min, max ) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> sequence = RL.GetRandomValue( int count, int min, int max )
|
||||||
|
|
||||||
|
Load random values sequence, no values repeated
|
||||||
|
|
||||||
|
- Success return int{}
|
||||||
|
*/
|
||||||
|
int lcoreLoadRandomSequence( lua_State *L ) {
|
||||||
|
unsigned int count = luaL_checkinteger( L, 1 );
|
||||||
|
int min = luaL_checkinteger( L, 1 );
|
||||||
|
int max = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
int *sequence = LoadRandomSequence( count, min, max );
|
||||||
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
|
for ( int i = 0; i < count; i++ ) {
|
||||||
|
lua_pushinteger( L, sequence[i] );
|
||||||
|
lua_rawseti( L, -2, i + 1 );
|
||||||
|
}
|
||||||
|
UnloadRandomSequence( sequence );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
## Core - Misc
|
## Core - Misc
|
||||||
*/
|
*/
|
||||||
@@ -1232,7 +1382,7 @@ int lcoreGetLogLevelInvalid( lua_State *L ) {
|
|||||||
/*
|
/*
|
||||||
> RL.OpenURL( string url )
|
> RL.OpenURL( string url )
|
||||||
|
|
||||||
Open URL with default system browser (If available)
|
Open URL with default system browser (if available)
|
||||||
*/
|
*/
|
||||||
int lcoreOpenURL( lua_State *L ) {
|
int lcoreOpenURL( lua_State *L ) {
|
||||||
OpenURL( luaL_checkstring( L, 1 ) );
|
OpenURL( luaL_checkstring( L, 1 ) );
|
||||||
@@ -1411,6 +1561,19 @@ int lcoreGetWorkingDirectory( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> directory = RL.GetApplicationDirectory()
|
||||||
|
|
||||||
|
Get the directory of the running application (uses static string)
|
||||||
|
|
||||||
|
- Success return string
|
||||||
|
*/
|
||||||
|
int lcoreGetApplicationDirectory( lua_State *L ) {
|
||||||
|
lua_pushstring( L, GetApplicationDirectory() );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> fileNames = RL.LoadDirectoryFiles( string dirPath )
|
> fileNames = RL.LoadDirectoryFiles( string dirPath )
|
||||||
|
|
||||||
@@ -1793,6 +1956,21 @@ int lcoreIsGamepadAvailable( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> name = RL.GetGamepadName( int gamepad )
|
||||||
|
|
||||||
|
Return gamepad internal name id
|
||||||
|
|
||||||
|
- Success return string
|
||||||
|
*/
|
||||||
|
int lcoreGetGamepadName( lua_State *L ) {
|
||||||
|
int gamepad = luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
lua_pushstring( L, GetGamepadName( gamepad ) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> pressed = RL.IsGamepadButtonPressed( int gamepad, int button )
|
> pressed = RL.IsGamepadButtonPressed( int gamepad, int button )
|
||||||
|
|
||||||
@@ -1873,16 +2051,16 @@ int lcoreGetGamepadAxisMovement( lua_State *L ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> name = RL.GetGamepadName( int gamepad )
|
> result = RL.SetGamepadMappings( string mappings )
|
||||||
|
|
||||||
Return gamepad internal name id
|
Set internal gamepad mappings (SDL_GameControllerDB)
|
||||||
|
|
||||||
- Success return string
|
- Success return int
|
||||||
*/
|
*/
|
||||||
int lcoreGetGamepadName( lua_State *L ) {
|
int lcoreSetGamepadMappings( lua_State *L ) {
|
||||||
int gamepad = luaL_checkinteger( L, 1 );
|
const char *mappings = luaL_checkstring( L, 1 );
|
||||||
|
|
||||||
lua_pushstring( L, GetGamepadName( gamepad ) );
|
lua_pushnumber( L, SetGamepadMappings( mappings ) );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1522,36 +1522,44 @@ void luaRegister() {
|
|||||||
|
|
||||||
/* Core. */
|
/* Core. */
|
||||||
/* Window-related functions. */
|
/* Window-related functions. */
|
||||||
|
assingGlobalFunction( "CloseWindow", lcoreCloseWindow );
|
||||||
assingGlobalFunction( "IsWindowReady", lcoreIsWindowReady );
|
assingGlobalFunction( "IsWindowReady", lcoreIsWindowReady );
|
||||||
assingGlobalFunction( "IsWindowFullscreen", lcoreIsWindowFullscreen );
|
assingGlobalFunction( "IsWindowFullscreen", lcoreIsWindowFullscreen );
|
||||||
assingGlobalFunction( "IsWindowHidden", lcoreIsWindowHidden );
|
assingGlobalFunction( "IsWindowHidden", lcoreIsWindowHidden );
|
||||||
assingGlobalFunction( "IsWindowMinimized", lcoreIsWindowMinimized );
|
assingGlobalFunction( "IsWindowMinimized", lcoreIsWindowMinimized );
|
||||||
assingGlobalFunction( "IsWindowMaximized", lcoreIsWindowMaximized );
|
assingGlobalFunction( "IsWindowMaximized", lcoreIsWindowMaximized );
|
||||||
assingGlobalFunction( "IsWindowFocused", lcoreIsWindowFocused );
|
assingGlobalFunction( "IsWindowFocused", lcoreIsWindowFocused );
|
||||||
assingGlobalFunction( "SetWindowMonitor", lcoreSetWindowMonitor );
|
|
||||||
assingGlobalFunction( "SetWindowPosition", lcoreSetWindowPosition );
|
|
||||||
assingGlobalFunction( "SetWindowSize", lcoreSetWindowSize );
|
|
||||||
assingGlobalFunction( "SetWindowOpacity", lcoreSetWindowOpacity );
|
|
||||||
assingGlobalFunction( "GetWindowHandle", lcoreGetWindowHandle );
|
|
||||||
assingGlobalFunction( "SetWindowMinSize", lcoreSetWindowMinSize );
|
|
||||||
assingGlobalFunction( "GetMonitorPosition", lcoreGetMonitorPosition );
|
|
||||||
assingGlobalFunction( "GetMonitorSize", lcoreGetMonitorSize );
|
|
||||||
assingGlobalFunction( "GetWindowPosition", lcoreGetWindowPosition );
|
|
||||||
assingGlobalFunction( "GetScreenSize", lcoreGetScreenSize );
|
|
||||||
assingGlobalFunction( "SetWindowState", lcoreSetWindowState );
|
|
||||||
assingGlobalFunction( "IsWindowState", lcoreIsWindowState );
|
|
||||||
assingGlobalFunction( "ClearWindowState", lcoreClearWindowState );
|
|
||||||
assingGlobalFunction( "IsWindowResized", lcoreIsWindowResized );
|
assingGlobalFunction( "IsWindowResized", lcoreIsWindowResized );
|
||||||
|
assingGlobalFunction( "IsWindowState", lcoreIsWindowState );
|
||||||
|
assingGlobalFunction( "SetWindowState", lcoreSetWindowState );
|
||||||
|
assingGlobalFunction( "ClearWindowState", lcoreClearWindowState );
|
||||||
|
assingGlobalFunction( "ToggleFullscreen", lcoreToggleFullscreen );
|
||||||
|
assingGlobalFunction( "ToggleBorderlessWindowed", lcoreToggleBorderlessWindowed );
|
||||||
|
assingGlobalFunction( "MaximizeWindow", lcoreMaximizeWindow );
|
||||||
|
assingGlobalFunction( "MinimizeWindow", lcoreMinimizeWindow );
|
||||||
|
assingGlobalFunction( "RestoreWindow", lcoreRestoreWindow );
|
||||||
assingGlobalFunction( "SetWindowIcon", lcoreSetWindowIcon );
|
assingGlobalFunction( "SetWindowIcon", lcoreSetWindowIcon );
|
||||||
assingGlobalFunction( "SetWindowIcons", lcoreSetWindowIcons );
|
assingGlobalFunction( "SetWindowIcons", lcoreSetWindowIcons );
|
||||||
assingGlobalFunction( "SetWindowTitle", lcoreSetWindowTitle );
|
assingGlobalFunction( "SetWindowTitle", lcoreSetWindowTitle );
|
||||||
|
assingGlobalFunction( "SetWindowPosition", lcoreSetWindowPosition );
|
||||||
|
assingGlobalFunction( "SetWindowMonitor", lcoreSetWindowMonitor );
|
||||||
|
assingGlobalFunction( "SetWindowMinSize", lcoreSetWindowMinSize );
|
||||||
|
assingGlobalFunction( "SetWindowMaxSize", lcoreSetWindowMaxSize );
|
||||||
|
assingGlobalFunction( "SetWindowSize", lcoreSetWindowSize );
|
||||||
|
assingGlobalFunction( "SetWindowOpacity", lcoreSetWindowOpacity );
|
||||||
|
assingGlobalFunction( "SetWindowFocused", lcoreSetWindowFocused );
|
||||||
|
assingGlobalFunction( "GetWindowHandle", lcoreGetWindowHandle );
|
||||||
|
assingGlobalFunction( "GetScreenSize", lcoreGetScreenSize );
|
||||||
|
assingGlobalFunction( "GetRenderSize", lcoreGetRenderSize );
|
||||||
assingGlobalFunction( "GetMonitorCount", lcoreGetMonitorCount );
|
assingGlobalFunction( "GetMonitorCount", lcoreGetMonitorCount );
|
||||||
assingGlobalFunction( "GetCurrentMonitor", lcoreGetCurrentMonitor );
|
assingGlobalFunction( "GetCurrentMonitor", lcoreGetCurrentMonitor );
|
||||||
|
assingGlobalFunction( "GetMonitorPosition", lcoreGetMonitorPosition );
|
||||||
|
assingGlobalFunction( "GetMonitorSize", lcoreGetMonitorSize );
|
||||||
assingGlobalFunction( "GetMonitorPhysicalSize", lcoreGetMonitorPhysicalSize );
|
assingGlobalFunction( "GetMonitorPhysicalSize", lcoreGetMonitorPhysicalSize );
|
||||||
assingGlobalFunction( "GetMonitorRefreshRate", lcoreGetMonitorRefreshRate );
|
assingGlobalFunction( "GetMonitorRefreshRate", lcoreGetMonitorRefreshRate );
|
||||||
|
assingGlobalFunction( "GetWindowPosition", lcoreGetWindowPosition );
|
||||||
assingGlobalFunction( "GetWindowScaleDPI", lcoreGetWindowScaleDPI );
|
assingGlobalFunction( "GetWindowScaleDPI", lcoreGetWindowScaleDPI );
|
||||||
assingGlobalFunction( "GetMonitorName", lcoreGetMonitorName );
|
assingGlobalFunction( "GetMonitorName", lcoreGetMonitorName );
|
||||||
assingGlobalFunction( "CloseWindow", lcoreCloseWindow );
|
|
||||||
assingGlobalFunction( "SetClipboardText", lcoreSetClipboardText );
|
assingGlobalFunction( "SetClipboardText", lcoreSetClipboardText );
|
||||||
assingGlobalFunction( "GetClipboardText", lcoreGetClipboardText );
|
assingGlobalFunction( "GetClipboardText", lcoreGetClipboardText );
|
||||||
/* Cursor-related functions. */
|
/* Cursor-related functions. */
|
||||||
@@ -1603,6 +1611,10 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "GetFPS", lcoreGetFPS );
|
assingGlobalFunction( "GetFPS", lcoreGetFPS );
|
||||||
assingGlobalFunction( "GetFrameTime", lcoreGetFrameTime );
|
assingGlobalFunction( "GetFrameTime", lcoreGetFrameTime );
|
||||||
assingGlobalFunction( "GetTime", lcoreGetTime );
|
assingGlobalFunction( "GetTime", lcoreGetTime );
|
||||||
|
/* Random values generation functions. */
|
||||||
|
assingGlobalFunction( "SetRandomSeed", lcoreSetRandomSeed );
|
||||||
|
assingGlobalFunction( "GetRandomValue", lcoreGetRandomValue );
|
||||||
|
assingGlobalFunction( "LoadRandomSequence", lcoreLoadRandomSequence );
|
||||||
/* Misc. functions. */
|
/* Misc. functions. */
|
||||||
assingGlobalFunction( "TakeScreenshot", lcoreTakeScreenshot );
|
assingGlobalFunction( "TakeScreenshot", lcoreTakeScreenshot );
|
||||||
assingGlobalFunction( "SetConfigFlags", lcoreSetConfigFlags );
|
assingGlobalFunction( "SetConfigFlags", lcoreSetConfigFlags );
|
||||||
@@ -1625,6 +1637,7 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "GetDirectoryPath", lcoreGetDirectoryPath );
|
assingGlobalFunction( "GetDirectoryPath", lcoreGetDirectoryPath );
|
||||||
assingGlobalFunction( "GetPrevDirectoryPath", lcoreGetPrevDirectoryPath );
|
assingGlobalFunction( "GetPrevDirectoryPath", lcoreGetPrevDirectoryPath );
|
||||||
assingGlobalFunction( "GetWorkingDirectory", lcoreGetWorkingDirectory );
|
assingGlobalFunction( "GetWorkingDirectory", lcoreGetWorkingDirectory );
|
||||||
|
assingGlobalFunction( "GetApplicationDirectory", lcoreGetApplicationDirectory );
|
||||||
assingGlobalFunction( "LoadDirectoryFiles", lcoreLoadDirectoryFiles );
|
assingGlobalFunction( "LoadDirectoryFiles", lcoreLoadDirectoryFiles );
|
||||||
assingGlobalFunction( "LoadDirectoryFilesEx", lcoreLoadDirectoryFilesEx );
|
assingGlobalFunction( "LoadDirectoryFilesEx", lcoreLoadDirectoryFilesEx );
|
||||||
assingGlobalFunction( "ChangeDirectory", lcoreChangeDirectory );
|
assingGlobalFunction( "ChangeDirectory", lcoreChangeDirectory );
|
||||||
@@ -1649,12 +1662,13 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "GetKeyScancode", lcoreGetKeyScancode );
|
assingGlobalFunction( "GetKeyScancode", lcoreGetKeyScancode );
|
||||||
/* Input-related functions: gamepads. */
|
/* Input-related functions: gamepads. */
|
||||||
assingGlobalFunction( "IsGamepadAvailable", lcoreIsGamepadAvailable );
|
assingGlobalFunction( "IsGamepadAvailable", lcoreIsGamepadAvailable );
|
||||||
|
assingGlobalFunction( "GetGamepadName", lcoreGetGamepadName );
|
||||||
assingGlobalFunction( "IsGamepadButtonPressed", lcoreIsGamepadButtonPressed );
|
assingGlobalFunction( "IsGamepadButtonPressed", lcoreIsGamepadButtonPressed );
|
||||||
assingGlobalFunction( "IsGamepadButtonDown", lcoreIsGamepadButtonDown );
|
assingGlobalFunction( "IsGamepadButtonDown", lcoreIsGamepadButtonDown );
|
||||||
assingGlobalFunction( "IsGamepadButtonReleased", lcoreIsGamepadButtonReleased );
|
assingGlobalFunction( "IsGamepadButtonReleased", lcoreIsGamepadButtonReleased );
|
||||||
assingGlobalFunction( "GetGamepadAxisCount", lcoreGetGamepadAxisCount );
|
assingGlobalFunction( "GetGamepadAxisCount", lcoreGetGamepadAxisCount );
|
||||||
assingGlobalFunction( "GetGamepadAxisMovement", lcoreGetGamepadAxisMovement );
|
assingGlobalFunction( "GetGamepadAxisMovement", lcoreGetGamepadAxisMovement );
|
||||||
assingGlobalFunction( "GetGamepadName", lcoreGetGamepadName );
|
assingGlobalFunction( "SetGamepadMappings", lcoreSetGamepadMappings );
|
||||||
/* Input-related functions: mouse. */
|
/* Input-related functions: mouse. */
|
||||||
assingGlobalFunction( "IsMouseButtonPressed", lcoreIsMouseButtonPressed );
|
assingGlobalFunction( "IsMouseButtonPressed", lcoreIsMouseButtonPressed );
|
||||||
assingGlobalFunction( "IsMouseButtonDown", lcoreIsMouseButtonDown );
|
assingGlobalFunction( "IsMouseButtonDown", lcoreIsMouseButtonDown );
|
||||||
@@ -1731,8 +1745,6 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "DrawPixel", lshapesDrawPixel );
|
assingGlobalFunction( "DrawPixel", lshapesDrawPixel );
|
||||||
assingGlobalFunction( "DrawLine", lshapesDrawLine );
|
assingGlobalFunction( "DrawLine", lshapesDrawLine );
|
||||||
assingGlobalFunction( "DrawLineBezier", lshapesDrawLineBezier );
|
assingGlobalFunction( "DrawLineBezier", lshapesDrawLineBezier );
|
||||||
assingGlobalFunction( "DrawLineBezierQuad", lshapesDrawLineBezierQuad );
|
|
||||||
assingGlobalFunction( "DrawLineBezierCubic", lshapesDrawLineBezierCubic );
|
|
||||||
assingGlobalFunction( "DrawLineStrip", lshapesDrawLineStrip );
|
assingGlobalFunction( "DrawLineStrip", lshapesDrawLineStrip );
|
||||||
assingGlobalFunction( "DrawCircle", lshapesDrawCircle );
|
assingGlobalFunction( "DrawCircle", lshapesDrawCircle );
|
||||||
assingGlobalFunction( "DrawCircleSector", lshapesDrawCircleSector );
|
assingGlobalFunction( "DrawCircleSector", lshapesDrawCircleSector );
|
||||||
@@ -1775,6 +1787,7 @@ void luaRegister() {
|
|||||||
/* Image loading functions. */
|
/* Image loading functions. */
|
||||||
assingGlobalFunction( "LoadImage", ltexturesLoadImage );
|
assingGlobalFunction( "LoadImage", ltexturesLoadImage );
|
||||||
assingGlobalFunction( "LoadImageRaw", ltexturesLoadImageRaw );
|
assingGlobalFunction( "LoadImageRaw", ltexturesLoadImageRaw );
|
||||||
|
assingGlobalFunction( "LoadImageSvg", ltexturesLoadImageSvg );
|
||||||
assingGlobalFunction( "LoadImageAnim", ltexturesLoadImageAnim );
|
assingGlobalFunction( "LoadImageAnim", ltexturesLoadImageAnim );
|
||||||
assingGlobalFunction( "LoadImageFromMemory", ltexturesLoadImageFromMemory );
|
assingGlobalFunction( "LoadImageFromMemory", ltexturesLoadImageFromMemory );
|
||||||
assingGlobalFunction( "LoadImageFromTexture", ltexturesLoadImageFromTexture );
|
assingGlobalFunction( "LoadImageFromTexture", ltexturesLoadImageFromTexture );
|
||||||
@@ -1782,12 +1795,13 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "IsImageReady", ltextureIsImageReady );
|
assingGlobalFunction( "IsImageReady", ltextureIsImageReady );
|
||||||
assingGlobalFunction( "UnloadImage", ltextureUnloadImage );
|
assingGlobalFunction( "UnloadImage", ltextureUnloadImage );
|
||||||
assingGlobalFunction( "ExportImage", ltexturesExportImage );
|
assingGlobalFunction( "ExportImage", ltexturesExportImage );
|
||||||
|
assingGlobalFunction( "ExportImageToMemory", ltexturesExportImageToMemory );
|
||||||
assingGlobalFunction( "ExportImageAsCode", ltexturesExportImageAsCode );
|
assingGlobalFunction( "ExportImageAsCode", ltexturesExportImageAsCode );
|
||||||
/* Image generation functions. */
|
/* Image generation functions. */
|
||||||
assingGlobalFunction( "GenImageColor", ltexturesGenImageColor );
|
assingGlobalFunction( "GenImageColor", ltexturesGenImageColor );
|
||||||
assingGlobalFunction( "GenImageGradientV", ltexturesGenImageGradientV );
|
assingGlobalFunction( "GenImageGradientLinear", ltexturesGenImageGradientLinear );
|
||||||
assingGlobalFunction( "GenImageGradientH", ltexturesGenImageGradientH );
|
|
||||||
assingGlobalFunction( "GenImageGradientRadial", ltexturesGenImageGradientRadial );
|
assingGlobalFunction( "GenImageGradientRadial", ltexturesGenImageGradientRadial );
|
||||||
|
assingGlobalFunction( "GenImageGradientSquare", ltexturesGenImageGradientSquare );
|
||||||
assingGlobalFunction( "GenImageChecked", ltexturesGenImageChecked );
|
assingGlobalFunction( "GenImageChecked", ltexturesGenImageChecked );
|
||||||
assingGlobalFunction( "GenImageWhiteNoise", ltexturesGenImageWhiteNoise );
|
assingGlobalFunction( "GenImageWhiteNoise", ltexturesGenImageWhiteNoise );
|
||||||
assingGlobalFunction( "GenImagePerlinNoise", ltexturesGenImagePerlinNoise );
|
assingGlobalFunction( "GenImagePerlinNoise", ltexturesGenImagePerlinNoise );
|
||||||
@@ -1812,6 +1826,7 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "ImageDither", ltexturesImageDither );
|
assingGlobalFunction( "ImageDither", ltexturesImageDither );
|
||||||
assingGlobalFunction( "ImageFlipVertical", ltexturesImageFlipVertical );
|
assingGlobalFunction( "ImageFlipVertical", ltexturesImageFlipVertical );
|
||||||
assingGlobalFunction( "ImageFlipHorizontal", ltexturesImageFlipHorizontal );
|
assingGlobalFunction( "ImageFlipHorizontal", ltexturesImageFlipHorizontal );
|
||||||
|
assingGlobalFunction( "ImageRotate", ltexturesImageRotate );
|
||||||
assingGlobalFunction( "ImageRotateCW", ltexturesImageRotateCW );
|
assingGlobalFunction( "ImageRotateCW", ltexturesImageRotateCW );
|
||||||
assingGlobalFunction( "ImageRotateCCW", ltexturesImageRotateCCW );
|
assingGlobalFunction( "ImageRotateCCW", ltexturesImageRotateCCW );
|
||||||
assingGlobalFunction( "ImageColorTint", ltexturesImageColorTint );
|
assingGlobalFunction( "ImageColorTint", ltexturesImageColorTint );
|
||||||
@@ -1995,6 +2010,7 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "DrawTextBoxed", ltextDrawTextBoxed );
|
assingGlobalFunction( "DrawTextBoxed", ltextDrawTextBoxed );
|
||||||
assingGlobalFunction( "DrawTextBoxedTinted", ltextDrawTextBoxedTinted );
|
assingGlobalFunction( "DrawTextBoxedTinted", ltextDrawTextBoxedTinted );
|
||||||
/* Text font info functions. */
|
/* Text font info functions. */
|
||||||
|
assingGlobalFunction( "SetTextLineSpacing", ltextSetTextLineSpacing );
|
||||||
assingGlobalFunction( "MeasureText", ltextMeasureText );
|
assingGlobalFunction( "MeasureText", ltextMeasureText );
|
||||||
assingGlobalFunction( "GetGlyphIndex", ltextGetGlyphIndex );
|
assingGlobalFunction( "GetGlyphIndex", ltextGetGlyphIndex );
|
||||||
assingGlobalFunction( "GetGlyphInfo", ltextGetGlyphInfo );
|
assingGlobalFunction( "GetGlyphInfo", ltextGetGlyphInfo );
|
||||||
@@ -2006,15 +2022,21 @@ void luaRegister() {
|
|||||||
|
|
||||||
/* Audio. */
|
/* Audio. */
|
||||||
/* Audio device management functions. */
|
/* Audio device management functions. */
|
||||||
|
assingGlobalFunction( "InitAudioDevice", laudioInitAudioDevice );
|
||||||
|
assingGlobalFunction( "CloseAudioDevice", laudioCloseAudioDevice );
|
||||||
|
assingGlobalFunction( "IsAudioDeviceReady", laudioIsAudioDeviceReady );
|
||||||
assingGlobalFunction( "SetMasterVolume", laudioSetMasterVolume );
|
assingGlobalFunction( "SetMasterVolume", laudioSetMasterVolume );
|
||||||
|
assingGlobalFunction( "GetMasterVolume", laudioGetMasterVolume );
|
||||||
/* Wave/Sound loading/unloading functions. */
|
/* Wave/Sound loading/unloading functions. */
|
||||||
assingGlobalFunction( "LoadSound", laudioLoadSound );
|
assingGlobalFunction( "LoadSound", laudioLoadSound );
|
||||||
assingGlobalFunction( "LoadWave", laudioLoadWave );
|
assingGlobalFunction( "LoadWave", laudioLoadWave );
|
||||||
assingGlobalFunction( "IsWaveReady", laudioIsWaveReady );
|
assingGlobalFunction( "IsWaveReady", laudioIsWaveReady );
|
||||||
assingGlobalFunction( "LoadSoundFromWave", laudioLoadSoundFromWave );
|
assingGlobalFunction( "LoadSoundFromWave", laudioLoadSoundFromWave );
|
||||||
|
assingGlobalFunction( "LoadSoundAlias", laudioLoadSoundAlias );
|
||||||
assingGlobalFunction( "IsSoundReady", laudioIsSoundReady );
|
assingGlobalFunction( "IsSoundReady", laudioIsSoundReady );
|
||||||
assingGlobalFunction( "UnloadWave", laudioUnloadWave );
|
assingGlobalFunction( "UnloadWave", laudioUnloadWave );
|
||||||
assingGlobalFunction( "UnloadSound", laudioUnloadSound );
|
assingGlobalFunction( "UnloadSound", laudioUnloadSound );
|
||||||
|
assingGlobalFunction( "UnloadSoundAlias", laudioUnloadSoundAlias );
|
||||||
assingGlobalFunction( "ExportWave", laudioExportWave );
|
assingGlobalFunction( "ExportWave", laudioExportWave );
|
||||||
assingGlobalFunction( "ExportWaveAsCode", laudioExportWaveAsCode );
|
assingGlobalFunction( "ExportWaveAsCode", laudioExportWaveAsCode );
|
||||||
/* Wave/Sound management functions. */
|
/* Wave/Sound management functions. */
|
||||||
|
|||||||
67
src/shapes.c
67
src/shapes.c
@@ -54,57 +54,6 @@ int lshapesDrawLine( lua_State *L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.DrawLineBezier( Vector2 startPos, Vector2 endPos, float thickness, Color color )
|
|
||||||
|
|
||||||
Draw a line using cubic-bezier curves in-out
|
|
||||||
*/
|
|
||||||
int lshapesDrawLineBezier( lua_State *L ) {
|
|
||||||
Vector2 startPos = uluaGetVector2( L, 1 );
|
|
||||||
Vector2 endPos = uluaGetVector2( L, 2 );
|
|
||||||
float thickness = luaL_checknumber( L, 3 );
|
|
||||||
Color color = uluaGetColor( L, 4 );
|
|
||||||
|
|
||||||
DrawLineBezier( startPos, endPos, thickness, color );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.DrawLineBezierQuad( Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thickness, Color color )
|
|
||||||
|
|
||||||
Draw line using quadratic bezier curves with a control point
|
|
||||||
*/
|
|
||||||
int lshapesDrawLineBezierQuad( lua_State *L ) {
|
|
||||||
Vector2 startPos = uluaGetVector2( L, 1 );
|
|
||||||
Vector2 endPos = uluaGetVector2( L, 2 );
|
|
||||||
Vector2 controlPos = uluaGetVector2( L, 3 );
|
|
||||||
float thickness = luaL_checknumber( L, 4 );
|
|
||||||
Color color = uluaGetColor( L, 5 );
|
|
||||||
|
|
||||||
DrawLineBezierQuad( startPos, endPos, controlPos, thickness, color );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> RL.DrawLineBezierCubic( Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thickness, Color color )
|
|
||||||
|
|
||||||
Draw line using quadratic bezier curves with a control point
|
|
||||||
*/
|
|
||||||
int lshapesDrawLineBezierCubic( lua_State *L ) {
|
|
||||||
Vector2 startPos = uluaGetVector2( L, 1 );
|
|
||||||
Vector2 endPos = uluaGetVector2( L, 2 );
|
|
||||||
Vector2 startControlPos = uluaGetVector2( L, 3 );
|
|
||||||
Vector2 endControlPos = uluaGetVector2( L, 4 );
|
|
||||||
float thickness = luaL_checknumber( L, 5 );
|
|
||||||
Color color = uluaGetColor( L, 6 );
|
|
||||||
|
|
||||||
DrawLineBezierCubic( startPos, endPos, startControlPos, endControlPos, thickness, color );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.DrawLineStrip( Vector2{} points, Color color )
|
> RL.DrawLineStrip( Vector2{} points, Color color )
|
||||||
|
|
||||||
@@ -130,6 +79,22 @@ int lshapesDrawLineStrip( lua_State *L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.DrawLineBezier( Vector2 startPos, Vector2 endPos, float thickness, Color color )
|
||||||
|
|
||||||
|
Draw a line using cubic-bezier curves in-out
|
||||||
|
*/
|
||||||
|
int lshapesDrawLineBezier( lua_State *L ) {
|
||||||
|
Vector2 startPos = uluaGetVector2( L, 1 );
|
||||||
|
Vector2 endPos = uluaGetVector2( L, 2 );
|
||||||
|
float thickness = luaL_checknumber( L, 3 );
|
||||||
|
Color color = uluaGetColor( L, 4 );
|
||||||
|
|
||||||
|
DrawLineBezier( startPos, endPos, thickness, color );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.DrawCircle( Vector2 center, float radius, Color color )
|
> RL.DrawCircle( Vector2 center, float radius, Color color )
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ bool stateInit( int argn, const char **argc, const char *exePath ) {
|
|||||||
state->run = false;
|
state->run = false;
|
||||||
}
|
}
|
||||||
if ( state->run ) {
|
if ( state->run ) {
|
||||||
InitAudioDevice();
|
|
||||||
state->run = luaInit( argn, argc );
|
state->run = luaInit( argn, argc );
|
||||||
}
|
}
|
||||||
state->defaultFont = GetFontDefault();
|
state->defaultFont = GetFontDefault();
|
||||||
|
|||||||
29
src/text.c
29
src/text.c
@@ -193,9 +193,9 @@ int ltextLoadFont( lua_State *L ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> font = RL.LoadFontEx( string fileName, int fontSize, int{} fontChars )
|
> font = RL.LoadFontEx( string fileName, int fontSize, int{} codepoints )
|
||||||
|
|
||||||
Load font from file with extended parameters, use NULL for fontChars to load the default character set
|
Load font from file with extended parameters, use NULL for codepoints to load the default character set
|
||||||
|
|
||||||
- Failure return nil
|
- Failure return nil
|
||||||
- Success return Font
|
- Success return Font
|
||||||
@@ -205,20 +205,20 @@ int ltextLoadFontEx( lua_State *L ) {
|
|||||||
|
|
||||||
if ( FileExists( luaL_checkstring( L, 1 ) ) ) {
|
if ( FileExists( luaL_checkstring( L, 1 ) ) ) {
|
||||||
if ( lua_istable( L, 3 ) ) {
|
if ( lua_istable( L, 3 ) ) {
|
||||||
int glyphCount = uluaGetTableLen( L, 3 );
|
int codepointCount = uluaGetTableLen( L, 3 );
|
||||||
int fontChars[ glyphCount ];
|
int codepoints[ codepointCount ];
|
||||||
|
|
||||||
int t = 3;
|
int t = 3;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
lua_pushnil( L );
|
lua_pushnil( L );
|
||||||
|
|
||||||
while ( lua_next( L, t ) != 0 ) {
|
while ( lua_next( L, t ) != 0 ) {
|
||||||
fontChars[i] = lua_tointeger( L, -1 );
|
codepoints[i] = lua_tointeger( L, -1 );
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
uluaPushFont( L, LoadFontEx( lua_tostring( L, 1 ), fontSize, fontChars, glyphCount ) );
|
uluaPushFont( L, LoadFontEx( lua_tostring( L, 1 ), fontSize, codepoints, codepointCount ) );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -374,8 +374,8 @@ int ltextDrawTextCodepoints( lua_State *L ) {
|
|||||||
float spacing = luaL_checknumber( L, 5 );
|
float spacing = luaL_checknumber( L, 5 );
|
||||||
Color tint = uluaGetColor( L, 6 );
|
Color tint = uluaGetColor( L, 6 );
|
||||||
|
|
||||||
int count = uluaGetTableLen( L, 2 );
|
int codepointCount = uluaGetTableLen( L, 2 );
|
||||||
int codepoints[ count ];
|
int codepoints[ codepointCount ];
|
||||||
|
|
||||||
int t = 2;
|
int t = 2;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -387,7 +387,7 @@ int ltextDrawTextCodepoints( lua_State *L ) {
|
|||||||
i++;
|
i++;
|
||||||
lua_pop( L, 1 );
|
lua_pop( L, 1 );
|
||||||
}
|
}
|
||||||
DrawTextCodepoints( *font, codepoints, count, position, fontSize, spacing, tint );
|
DrawTextCodepoints( *font, codepoints, codepointCount, position, fontSize, spacing, tint );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -460,6 +460,17 @@ int ltextDrawTextBoxedTinted( lua_State *L ) {
|
|||||||
## Text - Text font info functions
|
## Text - Text font info functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
> size = RL.SetTextLineSpacing( int spacing )
|
||||||
|
|
||||||
|
Set vertical line spacing when drawing with line-breaks
|
||||||
|
*/
|
||||||
|
int ltextSetTextLineSpacing( lua_State *L ) {
|
||||||
|
int spacing = luaL_checkinteger( L, 1 );
|
||||||
|
|
||||||
|
SetTextLineSpacing( spacing );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> size = RL.MeasureText( Font font, string text, float fontSize, float spacing )
|
> size = RL.MeasureText( Font font, string text, float fontSize, float spacing )
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,22 @@ int ltexturesLoadImageRaw( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> image = RL.LoadImageSvg( string fileNameOrString, Vector2 size )
|
||||||
|
|
||||||
|
Load image from SVG file data or string with specified size
|
||||||
|
|
||||||
|
- Success return Image
|
||||||
|
*/
|
||||||
|
int ltexturesLoadImageSvg( lua_State *L ) {
|
||||||
|
const char *fileNameOrString = luaL_checkstring( L, 1 );
|
||||||
|
Vector2 size = uluaGetVector2( L, 2 );
|
||||||
|
|
||||||
|
uluaPushImage( L, LoadImageSvg( fileNameOrString, (int)size.x, (int)size.y ) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> image, frameCount = RL.LoadImageAnim( string fileName )
|
> image, frameCount = RL.LoadImageAnim( string fileName )
|
||||||
|
|
||||||
@@ -162,6 +178,27 @@ int ltexturesExportImage( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> buffer = RL.ExportImageToMemory( Image image, string fileType )
|
||||||
|
|
||||||
|
Export image to memory buffer
|
||||||
|
|
||||||
|
- Success return Buffer
|
||||||
|
*/
|
||||||
|
int ltexturesExportImageToMemory( lua_State *L ) {
|
||||||
|
Image *image = uluaGetImage( L, 1 );
|
||||||
|
const char *fileType = luaL_checkstring( L, 2 );
|
||||||
|
|
||||||
|
Buffer buffer = {
|
||||||
|
.type = BUFFER_UNSIGNED_CHAR
|
||||||
|
};
|
||||||
|
buffer.data = ExportImageToMemory( *image, fileType, (int*)&buffer.size );
|
||||||
|
|
||||||
|
uluaPushBuffer( L, buffer );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> success = RL.ExportImageAsCode( Image image, string fileName )
|
> success = RL.ExportImageAsCode( Image image, string fileName )
|
||||||
|
|
||||||
@@ -197,35 +234,19 @@ int ltexturesGenImageColor( lua_State *L ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> image = RL.GenImageGradientV( Vector2 size, Color top, Color bottom )
|
> image = RL.GenImageGradientLinear( Vector2 size, int direction, Color a, Color b )
|
||||||
|
|
||||||
Generate image: vertical gradient
|
Generate image: linear gradient, direction in degrees [0..360], 0=Vertical gradient
|
||||||
|
|
||||||
- Success return Image
|
- Success return Image
|
||||||
*/
|
*/
|
||||||
int ltexturesGenImageGradientV( lua_State *L ) {
|
int ltexturesGenImageGradientLinear( lua_State *L ) {
|
||||||
Vector2 size = uluaGetVector2( L, 1 );
|
Vector2 size = uluaGetVector2( L, 1 );
|
||||||
Color top = uluaGetColor( L, 2 );
|
int direction = luaL_checkinteger( L, 2 );
|
||||||
Color bottom = uluaGetColor( L, 3 );
|
Color start = uluaGetColor( L, 3 );
|
||||||
|
Color end = uluaGetColor( L, 4 );
|
||||||
|
|
||||||
uluaPushImage( L, GenImageGradientV( (int)size.x, (int)size.y, top, bottom ) );
|
uluaPushImage( L, GenImageGradientLinear( (int)size.x, (int)size.y, direction, start, end ) );
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
> image = RL.GenImageGradientH( Vector2 size, Color left, Color right )
|
|
||||||
|
|
||||||
Generate image: horizontal gradient
|
|
||||||
|
|
||||||
- Success return Image
|
|
||||||
*/
|
|
||||||
int ltexturesGenImageGradientH( lua_State *L ) {
|
|
||||||
Vector2 size = uluaGetVector2( L, 1 );
|
|
||||||
Color left = uluaGetColor( L, 2 );
|
|
||||||
Color right = uluaGetColor( L, 3 );
|
|
||||||
|
|
||||||
uluaPushImage( L, GenImageGradientH( (int)size.x, (int)size.y, left, right ) );
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -248,6 +269,24 @@ int ltexturesGenImageGradientRadial( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> image = RL.GenImageGradientSquare( Vector2 size, float density, Color inner, Color outer )
|
||||||
|
|
||||||
|
Generate image: square gradient
|
||||||
|
|
||||||
|
- Success return Image
|
||||||
|
*/
|
||||||
|
int ltexturesGenImageGradientSquare( lua_State *L ) {
|
||||||
|
Vector2 size = uluaGetVector2( L, 1 );
|
||||||
|
float density = luaL_checknumber( L, 2 );
|
||||||
|
Color inner = uluaGetColor( L, 3 );
|
||||||
|
Color outer = uluaGetColor( L, 4 );
|
||||||
|
|
||||||
|
uluaPushImage( L, GenImageGradientSquare( (int)size.x, (int)size.y, density, inner, outer ) );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> image = RL.GenImageChecked( Vector2 size, Vector2 checks, Color col1, Color col2 )
|
> image = RL.GenImageChecked( Vector2 size, Vector2 checks, Color col1, Color col2 )
|
||||||
|
|
||||||
@@ -592,6 +631,20 @@ int ltexturesImageFlipHorizontal( lua_State *L ) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> RL.ImageRotate( Image image, int degrees )
|
||||||
|
|
||||||
|
Rotate image by input angle in degrees (-359 to 359)
|
||||||
|
*/
|
||||||
|
int ltexturesImageRotate( lua_State *L ) {
|
||||||
|
Image *image = uluaGetImage( L, 1 );
|
||||||
|
int degrees = luaL_checkinteger( L, 2 );
|
||||||
|
|
||||||
|
ImageRotate( image, degrees );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> RL.ImageRotateCW( Image image )
|
> RL.ImageRotateCW( Image image )
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user