Merge remote-tracking branch 'raysan/master' into clipboard
This commit is contained in:
commit
66fec1a8cb
48
CHANGELOG
48
CHANGELOG
|
|
@ -15,7 +15,7 @@ KEY CHANGES:
|
||||||
|
|
||||||
Detailed changes:
|
Detailed changes:
|
||||||
|
|
||||||
WIP: Last update with commit from 21-Oct-2024
|
WIP: Last update with commit from 02-Nov-2024
|
||||||
|
|
||||||
[rcore] ADDED: Working directory info at initialization by @Ray
|
[rcore] ADDED: Working directory info at initialization by @Ray
|
||||||
[rcore] ADDED: `MakeDirectory()`, supporting recursive directory creation by @Ray
|
[rcore] ADDED: `MakeDirectory()`, supporting recursive directory creation by @Ray
|
||||||
|
|
@ -48,6 +48,10 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rcore] REVIEWED: Fix typos in src/platforms/rcore_*.c (#3581) by @RadsammyT
|
[rcore] REVIEWED: Fix typos in src/platforms/rcore_*.c (#3581) by @RadsammyT
|
||||||
[rcore] REVIEWED: `ExportDataAsCode()`, change sanitization check (#3837) by @Laurentino Luna
|
[rcore] REVIEWED: `ExportDataAsCode()`, change sanitization check (#3837) by @Laurentino Luna
|
||||||
[rcore] REVIEWED: `ExportDataAsCode()`, add little sanitization to indentifier names (#3832) by @4rk
|
[rcore] REVIEWED: `ExportDataAsCode()`, add little sanitization to indentifier names (#3832) by @4rk
|
||||||
|
[rcore] REVIEWED: `GetScreenWidth()`/`GetScreenHeight()` align with all platforms (#4451) by @Arche Washi
|
||||||
|
[rcore] REVIEWED: `SetGamepadVibration()`, added duration parameter (#4410) by @Asdqwe -WARNING-
|
||||||
|
[rcore] REVIEWED: `GetGamepadAxisMovement()`, fix #4405 (#4420) by @Asdqwe
|
||||||
|
[rcore] REVIEWED: `GetGestureHoldDuration()` comments by @Ray
|
||||||
[rcore][rlgl] REVIEWED: Fix scale issues when ending a view mode (#3746) by @Jeffery Myers
|
[rcore][rlgl] REVIEWED: Fix scale issues when ending a view mode (#3746) by @Jeffery Myers
|
||||||
[rcore][GLFW] REVIEWED: Keep CORE.Window.position properly in sync with glfw window position (#4190) by @Dave Green
|
[rcore][GLFW] REVIEWED: Keep CORE.Window.position properly in sync with glfw window position (#4190) by @Dave Green
|
||||||
[rcore][GLFW] REVIEWED: Set AUTO_ICONIFY flag to false per default (#4188) by @Dave Green
|
[rcore][GLFW] REVIEWED: Set AUTO_ICONIFY flag to false per default (#4188) by @Dave Green
|
||||||
|
|
@ -57,6 +61,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rcore][GLFW] REVIEWED: Remove GLFW mouse passthrough hack and increase GLFW version in CMake (#3852) by @Alexandre Almeida
|
[rcore][GLFW] REVIEWED: Remove GLFW mouse passthrough hack and increase GLFW version in CMake (#3852) by @Alexandre Almeida
|
||||||
[rcore][GLFW] REVIEWED: Updated GLFW to 3.4 (#3827) by @Alexandre Almeida
|
[rcore][GLFW] REVIEWED: Updated GLFW to 3.4 (#3827) by @Alexandre Almeida
|
||||||
[rcore][GLFW] REVIEWED: Feature test macros before include (#3737) by @John
|
[rcore][GLFW] REVIEWED: Feature test macros before include (#3737) by @John
|
||||||
|
[rcore][GLFW] REVIEWED: Fix inconsistent dll linkage warning on windows (#4447) by @Jeffery Myers
|
||||||
[rcore][Web] ADDED: `SetWindowOpacity()` implementation (#4403) by @Asdqwe
|
[rcore][Web] ADDED: `SetWindowOpacity()` implementation (#4403) by @Asdqwe
|
||||||
[rcore][Web] ADDED: `MaximizeWindow()` and `RestoreWindow()` implementations (#4397) by @Asdqwe
|
[rcore][Web] ADDED: `MaximizeWindow()` and `RestoreWindow()` implementations (#4397) by @Asdqwe
|
||||||
[rcore][Web] ADDED: `ToggleFullscreen()` implementation (#3634) by @ubkp
|
[rcore][Web] ADDED: `ToggleFullscreen()` implementation (#3634) by @ubkp
|
||||||
|
|
@ -70,6 +75,8 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rcore][Web] REVIEWED: Fix CORE.Input.Mouse.cursorHidden with callbacks (#3644) by @ubkp
|
[rcore][Web] REVIEWED: Fix CORE.Input.Mouse.cursorHidden with callbacks (#3644) by @ubkp
|
||||||
[rcore][Web] REVIEWED: Fix `IsMouseButtonUp()` (#3611) by @ubkp
|
[rcore][Web] REVIEWED: Fix `IsMouseButtonUp()` (#3611) by @ubkp
|
||||||
[rcore][Web] REVIEWED: HighDPI support #3372 by @Ray
|
[rcore][Web] REVIEWED: HighDPI support #3372 by @Ray
|
||||||
|
[rcore][Web] REVIEWED: `SetWindowSize()` (#4452) by @Asdqwe
|
||||||
|
[rcore][Web] REVIEWED: `EmscriptenResizeCallback()`, simplified (#4415) by @Asdqwe
|
||||||
[rcore][SDL] ADDED: `IsCursorOnScreen()` (#3862) by @Peter0x44
|
[rcore][SDL] ADDED: `IsCursorOnScreen()` (#3862) by @Peter0x44
|
||||||
[rcore][SDL] ADDED: Gamepad rumble/vibration support (#3819) by @GideonSerf
|
[rcore][SDL] ADDED: Gamepad rumble/vibration support (#3819) by @GideonSerf
|
||||||
[rcore][SDL] REVIEWED: Gamepad support (#3776) by @A
|
[rcore][SDL] REVIEWED: Gamepad support (#3776) by @A
|
||||||
|
|
@ -107,6 +114,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rcore][RGFW] REVIEWED: RGFW 1.0 (#4144) by @Colleague Riley
|
[rcore][RGFW] REVIEWED: RGFW 1.0 (#4144) by @Colleague Riley
|
||||||
[rcore][RGFW] REVIEWED: Fix errors when compiling with mingw (#4282) by @Colleague Riley
|
[rcore][RGFW] REVIEWED: Fix errors when compiling with mingw (#4282) by @Colleague Riley
|
||||||
[rcore][RGFW] REVIEWED: Replace long switch with a lookup table (#4108) by @Colleague Riley
|
[rcore][RGFW] REVIEWED: Replace long switch with a lookup table (#4108) by @Colleague Riley
|
||||||
|
[rcore][RGFW] REVIEWED: Fix MSVC build errors (#4441) by @Colleague Riley
|
||||||
[rlgl] ADDED: More uniform data type options #4137 by @Ray
|
[rlgl] ADDED: More uniform data type options #4137 by @Ray
|
||||||
[rlgl] ADDED: Vertex normals for RLGL immediate drawing mode (#3866) by @bohonghuang
|
[rlgl] ADDED: Vertex normals for RLGL immediate drawing mode (#3866) by @bohonghuang
|
||||||
[rlgl] ADDED: `rlCullDistance*()` variables and getters (#3912) by @KotzaBoss
|
[rlgl] ADDED: `rlCullDistance*()` variables and getters (#3912) by @KotzaBoss
|
||||||
|
|
@ -123,6 +131,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rlgl] REVIEWED: `rlMultMatrixf()`, fix matrix multiplication order (#3935) by @bohonghuang
|
[rlgl] REVIEWED: `rlMultMatrixf()`, fix matrix multiplication order (#3935) by @bohonghuang
|
||||||
[rlgl] REVIEWED: `rlSetVertexAttribute()`, define last parameter as offset #3800 by @Ray
|
[rlgl] REVIEWED: `rlSetVertexAttribute()`, define last parameter as offset #3800 by @Ray
|
||||||
[rlgl] REVIEWED: `rlDisableVertexAttribute()`, remove redundat calls for SHADER_LOC_VERTEX_COLOR (#3871) by @Kacper Zybała
|
[rlgl] REVIEWED: `rlDisableVertexAttribute()`, remove redundat calls for SHADER_LOC_VERTEX_COLOR (#3871) by @Kacper Zybała
|
||||||
|
[rlgl] REVIEWED: `rlLoadTextureCubemap()`, load mipmaps for cubemaps (#4429) by @Nikolas
|
||||||
[rlgl] REVIEWED: `rlLoadFramebuffer()`, parameters not required by @Ray
|
[rlgl] REVIEWED: `rlLoadFramebuffer()`, parameters not required by @Ray
|
||||||
[rlgl] REVIEWED: `rlSetUniformSampler()` (#3759) by @veins1
|
[rlgl] REVIEWED: `rlSetUniformSampler()` (#3759) by @veins1
|
||||||
[rlgl] REVIEWED: Renamed near/far variables (#4039) by @jgabaut
|
[rlgl] REVIEWED: Renamed near/far variables (#4039) by @jgabaut
|
||||||
|
|
@ -132,7 +141,8 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rlgl] REVIEWED: rlgl function description and comments by @Ray
|
[rlgl] REVIEWED: rlgl function description and comments by @Ray
|
||||||
[rlgl] REVIEWED: Expose glad functions when building raylib as a shared lib (#3572) by @Peter0x44
|
[rlgl] REVIEWED: Expose glad functions when building raylib as a shared lib (#3572) by @Peter0x44
|
||||||
[rlgl] REVIEWED: Fix version info in rlgl.h (#3558) by @Steven Schveighoffer
|
[rlgl] REVIEWED: Fix version info in rlgl.h (#3558) by @Steven Schveighoffer
|
||||||
[rcamera] REVIEWED: Make camera movement independant of framerate (#4247) by @hanaxars -WARNING-
|
[rlgl] REVIEWED: Use the vertex color to the base shader in GLSL330 (#4431) by @Jeffery Myers
|
||||||
|
[rcamera] REVIEWED: Make camera movement independant of framerate (#4247) by @hanaxars -WARNING-
|
||||||
[rcamera] REVIEWED: Updated camera speeds with GetFrameTime() (#4362) by @Anthony Carbajal
|
[rcamera] REVIEWED: Updated camera speeds with GetFrameTime() (#4362) by @Anthony Carbajal
|
||||||
[rcamera] REVIEWED: `UpdateCamera()`, added CAMERA_CUSTOM check (#3938) by @Tomas Fabrizio Orsi
|
[rcamera] REVIEWED: `UpdateCamera()`, added CAMERA_CUSTOM check (#3938) by @Tomas Fabrizio Orsi
|
||||||
[rcamera] REVIEWED: Support mouse/keyboard and gamepad coexistence for input (#3579) by @ubkp
|
[rcamera] REVIEWED: Support mouse/keyboard and gamepad coexistence for input (#3579) by @ubkp
|
||||||
|
|
@ -145,6 +155,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[raymath] REVIEWED: Add extern "C" to raymath header for C++ (#3978) by @Jeffery Myers
|
[raymath] REVIEWED: Add extern "C" to raymath header for C++ (#3978) by @Jeffery Myers
|
||||||
[raymath] REVIEWED: `QuaternionFromAxisAngle()`, remove redundant axis length calculation (#3900) by @jtainer
|
[raymath] REVIEWED: `QuaternionFromAxisAngle()`, remove redundant axis length calculation (#3900) by @jtainer
|
||||||
[raymath] REVIEWED: `Vector3Perpendicular()`, avoid implicit conversion from float to double (#3799) by @João Foscarini
|
[raymath] REVIEWED: `Vector3Perpendicular()`, avoid implicit conversion from float to double (#3799) by @João Foscarini
|
||||||
|
[raymath] REVIEWED: `MatrixDecompose()`, incorrect output for certain scale and rotations (#4461) by @waveydave
|
||||||
[raymath] REVIEWED: Small code refactor (#3753) by @Idir Carlos Aliane
|
[raymath] REVIEWED: Small code refactor (#3753) by @Idir Carlos Aliane
|
||||||
[rshapes] ADDED: `CheckCollisionCircleLine()` (#4018) by @kai-z99
|
[rshapes] ADDED: `CheckCollisionCircleLine()` (#4018) by @kai-z99
|
||||||
[rshapes] REVIEWED: Multisegment Bezier splines (#3744) by @Santiago Pelufo
|
[rshapes] REVIEWED: Multisegment Bezier splines (#3744) by @Santiago Pelufo
|
||||||
|
|
@ -152,8 +163,10 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rshapes] REVIEWED: `DrawLine()` #4075 by @Ray
|
[rshapes] REVIEWED: `DrawLine()` #4075 by @Ray
|
||||||
[rshapes] REVIEWED: `DrawPixel()` drawing by @Ray
|
[rshapes] REVIEWED: `DrawPixel()` drawing by @Ray
|
||||||
[rshapes] REVIEWED: `DrawLine()` to avoid pixel rounding issues #3931 by @Ray
|
[rshapes] REVIEWED: `DrawLine()` to avoid pixel rounding issues #3931 by @Ray
|
||||||
[rshapes] REVIEWED: `DrawRectangleLinesEx()`, make sure accounts for square tiles (#4382) by @Jojaby
|
[rshapes] REVIEWED: `DrawRectangleLines()`, considering view matrix for lines "alignment" by @Ray
|
||||||
|
[rshapes] REVIEWED: `DrawRectangleLines()`, pixel offset (#4261) by @RadsammyT
|
||||||
[rshapes] REVIEWED: `DrawRectangleLines()`, pixel offset when scaling (#3884) by @Ray
|
[rshapes] REVIEWED: `DrawRectangleLines()`, pixel offset when scaling (#3884) by @Ray
|
||||||
|
[rshapes] REVIEWED: `DrawRectangleLinesEx()`, make sure accounts for square tiles (#4382) by @Jojaby
|
||||||
[rshapes] REVIEWED: `Draw*Gradient()` color parameter names (#4270) by @Paperdomo101
|
[rshapes] REVIEWED: `Draw*Gradient()` color parameter names (#4270) by @Paperdomo101
|
||||||
[rshapes] REVIEWED: `DrawGrid()`, remove duplicate color calls (#4148) by @Jeffery Myers
|
[rshapes] REVIEWED: `DrawGrid()`, remove duplicate color calls (#4148) by @Jeffery Myers
|
||||||
[rshapes] REVIEWED: `DrawSplineLinear()` to `SUPPORT_SPLINE_MITERS` by @Ray
|
[rshapes] REVIEWED: `DrawSplineLinear()` to `SUPPORT_SPLINE_MITERS` by @Ray
|
||||||
|
|
@ -177,7 +190,9 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rtextures] REVIEWED: `LoadImageRaw()` #3926 by @Ray
|
[rtextures] REVIEWED: `LoadImageRaw()` #3926 by @Ray
|
||||||
[rtextures] REVIEWED: `LoadImageColors()`, advance k in loop (#4120) by @Bruno Cabral
|
[rtextures] REVIEWED: `LoadImageColors()`, advance k in loop (#4120) by @Bruno Cabral
|
||||||
[rtextures] REVIEWED: `LoadTextureCubemap()`, added `mipmaps` #3665 by @Ray
|
[rtextures] REVIEWED: `LoadTextureCubemap()`, added `mipmaps` #3665 by @Ray
|
||||||
[rtextures] REVIEWED: `LoadTextureCubemap(), assign format to cubemap (#3823) by @Gary M
|
[rtextures] REVIEWED: `LoadTextureCubemap()`, assign format to cubemap (#3823) by @Gary M
|
||||||
|
[rtextures] REVIEWED: `LoadTextureCubemap()`, load mipmaps for cubemaps (#4429) by @Nikolas
|
||||||
|
[rtextures] REVIEWED: `LoadTextureCubemap()`, avoid dangling re-allocated pointers (#4439) by @Nikolas
|
||||||
[rtextures] REVIEWED: `LoadImageFromScreen()`, fix scaling (#3881) by @proberge-dev
|
[rtextures] REVIEWED: `LoadImageFromScreen()`, fix scaling (#3881) by @proberge-dev
|
||||||
[rtextures] REVIEWED: `LoadImageFromMemory()`, warnings on invalid image data (#4179) by @Jutastre
|
[rtextures] REVIEWED: `LoadImageFromMemory()`, warnings on invalid image data (#4179) by @Jutastre
|
||||||
[rtextures] REVIEWED: `LoadImageAnimFromMemory()`, added security checks (#3924) by @Ray
|
[rtextures] REVIEWED: `LoadImageAnimFromMemory()`, added security checks (#3924) by @Ray
|
||||||
|
|
@ -190,6 +205,8 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rtextures] REVIEWED: `GenImagePerlinNoise()` being stretched (#4276) by @Bugsia
|
[rtextures] REVIEWED: `GenImagePerlinNoise()` being stretched (#4276) by @Bugsia
|
||||||
[rtextures] REVIEWED: `DrawTexturePro()` to avoid negative dest rec #4316 by @Ray
|
[rtextures] REVIEWED: `DrawTexturePro()` to avoid negative dest rec #4316 by @Ray
|
||||||
[rtextures] REVIEWED: `ColorToInt()`, fix undefined behaviour (#3996) by @OetkenPurveyorOfCode
|
[rtextures] REVIEWED: `ColorToInt()`, fix undefined behaviour (#3996) by @OetkenPurveyorOfCode
|
||||||
|
[rtextures] REVIEWED: Remove panorama cubemap layout option (#4425) by @Jeffery Myers
|
||||||
|
[rtextures] REVIEWED: Removed unneeded module check, `rtextures` should not depend on `rtext` by @Ray
|
||||||
[rtextures] REVIEWED: Simplified for loop for some image manipulation functions (#3712) by @Alice Nyaa
|
[rtextures] REVIEWED: Simplified for loop for some image manipulation functions (#3712) by @Alice Nyaa
|
||||||
[rtext] ADDED: BDF fonts support (#3735) by @Stanley Fuller -WARNING-
|
[rtext] ADDED: BDF fonts support (#3735) by @Stanley Fuller -WARNING-
|
||||||
[rtext] ADDED: `TextToCamel()` (#4033) by @IoIxD
|
[rtext] ADDED: `TextToCamel()` (#4033) by @IoIxD
|
||||||
|
|
@ -207,6 +224,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rtext] REVIEWED: `LoadFontData()`, load image only if glyph has been found in font by @Ray
|
[rtext] REVIEWED: `LoadFontData()`, load image only if glyph has been found in font by @Ray
|
||||||
[rtext] REVIEWED: `ExportFontAsCode()`, fix C++ compiler errors (#4013) by @DarkAssassin23
|
[rtext] REVIEWED: `ExportFontAsCode()`, fix C++ compiler errors (#4013) by @DarkAssassin23
|
||||||
[rtext] REVIEWED: `MeasureTextEx()` height calculation (#3770) by @Marrony Neris
|
[rtext] REVIEWED: `MeasureTextEx()` height calculation (#3770) by @Marrony Neris
|
||||||
|
[rtext] REVIEWED: `MeasureTextEx()`, additional check for empty input string (#4448) by @mpv-enjoyer
|
||||||
[rtext] REVIEWED: `CodepointToUTF8()`, clean static buffer #4379 by @Ray
|
[rtext] REVIEWED: `CodepointToUTF8()`, clean static buffer #4379 by @Ray
|
||||||
[rtext] REVIEWED: `TextToFloat()`, always multiply by sign (#4273) by @listeria
|
[rtext] REVIEWED: `TextToFloat()`, always multiply by sign (#4273) by @listeria
|
||||||
[rtext] REVIEWED: `TextReplace()` const correctness (#3678) by @maverikou
|
[rtext] REVIEWED: `TextReplace()` const correctness (#3678) by @maverikou
|
||||||
|
|
@ -237,6 +255,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[rmodels] REVIEWED: `LoadModelAnimationsGLTF()`, added missing interpolation types (#3919) by @Benji
|
[rmodels] REVIEWED: `LoadModelAnimationsGLTF()`, added missing interpolation types (#3919) by @Benji
|
||||||
[rmodels] REVIEWED: `LoadModelAnimationsGLTF()` (#4107) by @VitoTringolo
|
[rmodels] REVIEWED: `LoadModelAnimationsGLTF()` (#4107) by @VitoTringolo
|
||||||
[rmodels] REVIEWED: `LoadBoneInfoGLTF()`, add check for animation name being NULL (#4053) by @VitoTringolo
|
[rmodels] REVIEWED: `LoadBoneInfoGLTF()`, add check for animation name being NULL (#4053) by @VitoTringolo
|
||||||
|
[rmodels] REVIEWED: `GenMeshSphere()`, fix artifacts (#4460) by @MikiZX1
|
||||||
[rmodels] REVIEWED: `GenMeshTangents()`, read uninitialized values, fix bounding case (#4066) by @kai-z99
|
[rmodels] REVIEWED: `GenMeshTangents()`, read uninitialized values, fix bounding case (#4066) by @kai-z99
|
||||||
[rmodels] REVIEWED: `GenMeshTangents()`, fixed out of bounds error (#3990) by @Salvador Galindo
|
[rmodels] REVIEWED: `GenMeshTangents()`, fixed out of bounds error (#3990) by @Salvador Galindo
|
||||||
[rmodels] REVIEWED: `DrawCylinder()`, fix drawing due to imprecise angle (#4034) by @Paul Melis
|
[rmodels] REVIEWED: `DrawCylinder()`, fix drawing due to imprecise angle (#4034) by @Paul Melis
|
||||||
|
|
@ -258,6 +277,8 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[raudio] REVIEWED: Fix crash when switching playback device at runtime (#4102) by @jkaup
|
[raudio] REVIEWED: Fix crash when switching playback device at runtime (#4102) by @jkaup
|
||||||
[raudio] REVIEWED: Support 24 bits samples for FLAC format (#4058) by @Alexey Kutepov
|
[raudio] REVIEWED: Support 24 bits samples for FLAC format (#4058) by @Alexey Kutepov
|
||||||
[examples] ADDED: `core_random_sequence` (#3846) by @Dalton Overmyer
|
[examples] ADDED: `core_random_sequence` (#3846) by @Dalton Overmyer
|
||||||
|
[examples] ADDED: `core_input_virtual_controls` (#4342) by @oblerion
|
||||||
|
[examples] ADDED: `shapes_rectangle_advanced `, implementing `DrawRectangleRoundedGradientH()` (#4435) by @Everton Jr.
|
||||||
[examples] ADDED: `models_bone_socket` (#3833) by @iP
|
[examples] ADDED: `models_bone_socket` (#3833) by @iP
|
||||||
[examples] ADDED: `shaders_vertex_displacement` (#4186) by @Alex ZH
|
[examples] ADDED: `shaders_vertex_displacement` (#4186) by @Alex ZH
|
||||||
[examples] ADDED: `shaders_shadowmap` (#3653) by @TheManTheMythTheGameDev
|
[examples] ADDED: `shaders_shadowmap` (#3653) by @TheManTheMythTheGameDev
|
||||||
|
|
@ -265,6 +286,8 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[examples] REVIEWED: `core_2d_camera_mouse_zoom`, use logarithmic scaling for a 2d zoom functionality (#3977) by @Mike Will
|
[examples] REVIEWED: `core_2d_camera_mouse_zoom`, use logarithmic scaling for a 2d zoom functionality (#3977) by @Mike Will
|
||||||
[examples] REVIEWED: `core_input_gamepad_info`, all buttons displayed within the window (#4241) by @Asdqwe
|
[examples] REVIEWED: `core_input_gamepad_info`, all buttons displayed within the window (#4241) by @Asdqwe
|
||||||
[examples] REVIEWED: `core_input_gamepad_info`, show ps3 controller (#4040) by @Konrad Gutvik Grande
|
[examples] REVIEWED: `core_input_gamepad_info`, show ps3 controller (#4040) by @Konrad Gutvik Grande
|
||||||
|
[examples] REVIEWED: `core_input_gamepad`, add drawing for generic gamepad (#4424) by @Asdqwe
|
||||||
|
[examples] REVIEWED: `core_input_gamepad`, add deadzone handling (#4422) by @Asdqwe
|
||||||
[examples] REVIEWED: `shapes_bouncing_ball` (#4226) by @Anthony Carbajal
|
[examples] REVIEWED: `shapes_bouncing_ball` (#4226) by @Anthony Carbajal
|
||||||
[examples] REVIEWED: `shapes_following_eyes` (#3710) by @Hongyu Ouyang
|
[examples] REVIEWED: `shapes_following_eyes` (#3710) by @Hongyu Ouyang
|
||||||
[examples] REVIEWED: `shapes_draw_rectangle_rounded` by @Ray
|
[examples] REVIEWED: `shapes_draw_rectangle_rounded` by @Ray
|
||||||
|
|
@ -288,6 +311,8 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[examples] REVIEWED: `shaders_basic_pbr` (#3621) by @devdad
|
[examples] REVIEWED: `shaders_basic_pbr` (#3621) by @devdad
|
||||||
[examples] REVIEWED: `shaders_basic_pbr`, remove dependencies (#3649) by @TheManTheMythTheGameDev
|
[examples] REVIEWED: `shaders_basic_pbr`, remove dependencies (#3649) by @TheManTheMythTheGameDev
|
||||||
[examples] REVIEWED: `shaders_basic_pbr`, added more comments by @Ray
|
[examples] REVIEWED: `shaders_basic_pbr`, added more comments by @Ray
|
||||||
|
[examples] REVIEWED: `shaders_gpu_skinning`, to work with OpenGL ES 2.0 #4412 by @Ray
|
||||||
|
[examples] REVIEWED: `shaders_model_shader`, use free camera (#4428) by @IcyLeave6109
|
||||||
[examples] REVIEWED: `audio_stream_effects` (#3618) by @lipx
|
[examples] REVIEWED: `audio_stream_effects` (#3618) by @lipx
|
||||||
[examples] REVIEWED: `audio_raw_stream` (#3624) by @riadbettole
|
[examples] REVIEWED: `audio_raw_stream` (#3624) by @riadbettole
|
||||||
[examples] REVIEWED: `audio_mixed_processor` (#4214) by @Anthony Carbajal
|
[examples] REVIEWED: `audio_mixed_processor` (#4214) by @Anthony Carbajal
|
||||||
|
|
@ -302,10 +327,15 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[build] REVIEWED: Makefile, fix -Wstringop-truncation warning (#4096) by @Peter0x44
|
[build] REVIEWED: Makefile, fix -Wstringop-truncation warning (#4096) by @Peter0x44
|
||||||
[build] REVIEWED: Makefile, fix issues for RGFW on Linux/macOS (#3969) by @Colleague Riley
|
[build] REVIEWED: Makefile, fix issues for RGFW on Linux/macOS (#3969) by @Colleague Riley
|
||||||
[build] REVIEWED: Makefile, update RAYLIB_VERSION (#3901) by @Belllg
|
[build] REVIEWED: Makefile, update RAYLIB_VERSION (#3901) by @Belllg
|
||||||
[build] REVIEWED: Makefile (#4054) by @Lázaro Albuquerque
|
[build] REVIEWED: Makefile, use mingw32-make for Windows (#4436) by @Asdqwe
|
||||||
|
[build] REVIEWED: Makefile, move CUSTOM_CFLAGS for better visibility (#4054) by @Lázaro Albuquerque
|
||||||
|
[build] REVIEWED: Makefile, update emsdk paths to latest versions by @Ray
|
||||||
[build] REVIEWED: Makefile examples, align /usr/local with /src Makefile (#4286) by @Tchan0
|
[build] REVIEWED: Makefile examples, align /usr/local with /src Makefile (#4286) by @Tchan0
|
||||||
[build] REVIEWED: Makefile examples, added `textures_image_kernel` (#3555) by @Sergey Zapunidi
|
[build] REVIEWED: Makefile examples, added `textures_image_kernel` (#3555) by @Sergey Zapunidi
|
||||||
[build] REVIEWED: Makefile examples (#4209) by @Anthony Carbajal
|
[build] REVIEWED: Makefile examples (#4209) by @Anthony Carbajal
|
||||||
|
[build] REVIEWED: Makefile examples, to work on NetBSD (#4438) by @NishiOwO
|
||||||
|
[build] REVIEWED: Makefile examples, WebGL2 (OpenGL ES 3.0) backend flags #4330 by @Ray
|
||||||
|
[build] REVIEWED: Makefile examples, web building (#4434) by @Asdqwe
|
||||||
[build] REVIEWED: build.zig, fix various issues around `-Dconfig` (#4398) by @Sage Hane
|
[build] REVIEWED: build.zig, fix various issues around `-Dconfig` (#4398) by @Sage Hane
|
||||||
[build] REVIEWED: build.zig, fix type mismatch (#4383) by @yuval_dev
|
[build] REVIEWED: build.zig, fix type mismatch (#4383) by @yuval_dev
|
||||||
[build] REVIEWED: build.zig, minor fixes (#4381) by @Sage Hane
|
[build] REVIEWED: build.zig, minor fixes (#4381) by @Sage Hane
|
||||||
|
|
@ -351,6 +381,7 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[build] REVIEWED: CMake, disable SDL rlgl_standalone example (#3861) by @Rob Loach
|
[build] REVIEWED: CMake, disable SDL rlgl_standalone example (#3861) by @Rob Loach
|
||||||
[build] REVIEWED: CMake, bump version required to avoid deprecated #3639 by @Ray
|
[build] REVIEWED: CMake, bump version required to avoid deprecated #3639 by @Ray
|
||||||
[build] REVIEWED: CMake, fix examples linking -DPLATFORM=SDL (#3825) by @Peter0x44
|
[build] REVIEWED: CMake, fix examples linking -DPLATFORM=SDL (#3825) by @Peter0x44
|
||||||
|
[build] REVIEWED: CMake, don't build for wayland by default (#4432) by @Peter0x44
|
||||||
[build] REVIEWED: VS2022 project by @Ray
|
[build] REVIEWED: VS2022 project by @Ray
|
||||||
[build] REVIEWED: VS2022, fix build warnings (#4095) by @Jeffery Myers
|
[build] REVIEWED: VS2022, fix build warnings (#4095) by @Jeffery Myers
|
||||||
[build] REVIEWED: Fix fix-build-paths (#3849) by @Caleb Barger
|
[build] REVIEWED: Fix fix-build-paths (#3849) by @Caleb Barger
|
||||||
|
|
@ -406,6 +437,13 @@ WIP: Last update with commit from 21-Oct-2024
|
||||||
[bindings] UPDATED: Raylib.nelua (#3552) by @Auz
|
[bindings] UPDATED: Raylib.nelua (#3552) by @Auz
|
||||||
[bindings] UPDATED: raylib-cpp to 5.0 (#3551) by @Rob Loach
|
[bindings] UPDATED: raylib-cpp to 5.0 (#3551) by @Rob Loach
|
||||||
[bindings] UPDATED: Pascal binding (#3548) by @Gunko Vadim
|
[bindings] UPDATED: Pascal binding (#3548) by @Gunko Vadim
|
||||||
|
[external] UPDATED: stb_truetype.h to latest version by @Ray
|
||||||
|
[external] UPDATED: stb_image_resize2.h to latest version by @Ray
|
||||||
|
[external] UPDATED: stb_image.h to latest version by @Ray
|
||||||
|
[external] UPDATED: qoa.h to latest version by @Ray
|
||||||
|
[external] UPDATED: dr_wav.h to latest version by @Ray
|
||||||
|
[external] UPDATED: dr_mp3.h to latest version by @Ray
|
||||||
|
[external] UPDATED: cgltf.h to latest version by @Ray
|
||||||
[external] REVIEWED: rl_gputex, correctly load mipmaps from DDS files (#4399) by @Nikolas
|
[external] REVIEWED: rl_gputex, correctly load mipmaps from DDS files (#4399) by @Nikolas
|
||||||
[external] REVIEWED: stb_image_resize2, dix vld1q_f16 undeclared in arm (#4309) by @masnm
|
[external] REVIEWED: stb_image_resize2, dix vld1q_f16 undeclared in arm (#4309) by @masnm
|
||||||
[external] REVIEWED: miniaudio, fix library and Makefile for NetBSD (#4212) by @NishiOwO
|
[external] REVIEWED: miniaudio, fix library and Makefile for NetBSD (#4212) by @NishiOwO
|
||||||
|
|
|
||||||
138
build.zig
138
build.zig
|
|
@ -2,7 +2,7 @@ const std = @import("std");
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
|
|
||||||
/// Minimum supported version of Zig
|
/// Minimum supported version of Zig
|
||||||
const min_ver = "0.12.0";
|
const min_ver = "0.13.0";
|
||||||
|
|
||||||
comptime {
|
comptime {
|
||||||
const order = std.SemanticVersion.order;
|
const order = std.SemanticVersion.order;
|
||||||
|
|
@ -11,36 +11,6 @@ comptime {
|
||||||
@compileError("Raylib requires zig version " ++ min_ver);
|
@compileError("Raylib requires zig version " ++ min_ver);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(freakmangd): I don't like using a global here, but it prevents having to
|
|
||||||
// get the flags a second time when adding raygui
|
|
||||||
var raylib_flags_arr: std.ArrayListUnmanaged([]const u8) = .{};
|
|
||||||
|
|
||||||
// This has been tested with zig version 0.12.0
|
|
||||||
pub fn addRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, options: Options) !*std.Build.Step.Compile {
|
|
||||||
const raylib_dep = b.dependencyFromBuildZig(@This(), .{
|
|
||||||
.target = target,
|
|
||||||
.optimize = optimize,
|
|
||||||
.raudio = options.raudio,
|
|
||||||
.rmodels = options.rmodels,
|
|
||||||
.rshapes = options.rshapes,
|
|
||||||
.rtext = options.rtext,
|
|
||||||
.rtextures = options.rtextures,
|
|
||||||
.platform = options.platform,
|
|
||||||
.shared = options.shared,
|
|
||||||
.linux_display_backend = options.linux_display_backend,
|
|
||||||
.opengl_version = options.opengl_version,
|
|
||||||
.config = options.config,
|
|
||||||
});
|
|
||||||
const raylib = raylib_dep.artifact("raylib");
|
|
||||||
|
|
||||||
if (options.raygui) {
|
|
||||||
const raygui_dep = b.dependency(options.raygui_dependency_name, .{});
|
|
||||||
addRaygui(b, raylib, raygui_dep);
|
|
||||||
}
|
|
||||||
|
|
||||||
return raylib;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn setDesktopPlatform(raylib: *std.Build.Step.Compile, platform: PlatformBackend) void {
|
fn setDesktopPlatform(raylib: *std.Build.Step.Compile, platform: PlatformBackend) void {
|
||||||
raylib.defineCMacro("PLATFORM_DESKTOP", null);
|
raylib.defineCMacro("PLATFORM_DESKTOP", null);
|
||||||
|
|
||||||
|
|
@ -52,6 +22,30 @@ fn setDesktopPlatform(raylib: *std.Build.Step.Compile, platform: PlatformBackend
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn createEmsdkStep(b: *std.Build, emsdk: *std.Build.Dependency) *std.Build.Step.Run {
|
||||||
|
if (builtin.os.tag == .windows) {
|
||||||
|
return b.addSystemCommand(&.{emsdk.path("emsdk.bat").getPath(b)});
|
||||||
|
} else {
|
||||||
|
return b.addSystemCommand(&.{emsdk.path("emsdk").getPath(b)});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn emSdkSetupStep(b: *std.Build, emsdk: *std.Build.Dependency) !?*std.Build.Step.Run {
|
||||||
|
const dot_emsc_path = emsdk.path(".emscripten").getPath(b);
|
||||||
|
const dot_emsc_exists = !std.meta.isError(std.fs.accessAbsolute(dot_emsc_path, .{}));
|
||||||
|
|
||||||
|
if (!dot_emsc_exists) {
|
||||||
|
const emsdk_install = createEmsdkStep(b, emsdk);
|
||||||
|
emsdk_install.addArgs(&.{ "install", "latest" });
|
||||||
|
const emsdk_activate = createEmsdkStep(b, emsdk);
|
||||||
|
emsdk_activate.addArgs(&.{ "activate", "latest" });
|
||||||
|
emsdk_activate.step.dependOn(&emsdk_install.step);
|
||||||
|
return emsdk_activate;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A list of all flags from `src/config.h` that one may override
|
/// A list of all flags from `src/config.h` that one may override
|
||||||
const config_h_flags = outer: {
|
const config_h_flags = outer: {
|
||||||
// Set this value higher if compile errors happen as `src/config.h` gets larger
|
// Set this value higher if compile errors happen as `src/config.h` gets larger
|
||||||
|
|
@ -83,21 +77,26 @@ const config_h_flags = outer: {
|
||||||
};
|
};
|
||||||
|
|
||||||
fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, options: Options) !*std.Build.Step.Compile {
|
fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, options: Options) !*std.Build.Step.Compile {
|
||||||
raylib_flags_arr.clearRetainingCapacity();
|
var raylib_flags_arr = std.ArrayList([]const u8).init(b.allocator);
|
||||||
|
defer raylib_flags_arr.deinit();
|
||||||
|
|
||||||
const shared_flags = &[_][]const u8{
|
try raylib_flags_arr.appendSlice(&[_][]const u8{
|
||||||
"-fPIC",
|
|
||||||
"-DBUILD_LIBTYPE_SHARED",
|
|
||||||
};
|
|
||||||
try raylib_flags_arr.appendSlice(b.allocator, &[_][]const u8{
|
|
||||||
"-std=gnu99",
|
"-std=gnu99",
|
||||||
"-D_GNU_SOURCE",
|
"-D_GNU_SOURCE",
|
||||||
"-DGL_SILENCE_DEPRECATION=199309L",
|
"-DGL_SILENCE_DEPRECATION=199309L",
|
||||||
"-fno-sanitize=undefined", // https://github.com/raysan5/raylib/issues/3674
|
"-fno-sanitize=undefined", // https://github.com/raysan5/raylib/issues/3674
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (options.shared) {
|
||||||
|
try raylib_flags_arr.appendSlice(&[_][]const u8{
|
||||||
|
"-fPIC",
|
||||||
|
"-DBUILD_LIBTYPE_SHARED",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (options.config.len > 0) {
|
if (options.config.len > 0) {
|
||||||
// Sets a flag indiciating the use of a custom `config.h`
|
// Sets a flag indiciating the use of a custom `config.h`
|
||||||
try raylib_flags_arr.append(b.allocator, "-DEXTERNAL_CONFIG_FLAGS");
|
try raylib_flags_arr.append("-DEXTERNAL_CONFIG_FLAGS");
|
||||||
|
|
||||||
// Splits a space-separated list of config flags into multiple flags
|
// Splits a space-separated list of config flags into multiple flags
|
||||||
//
|
//
|
||||||
|
|
@ -107,7 +106,7 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
|
|
||||||
// Apply config flags supplied by the user
|
// Apply config flags supplied by the user
|
||||||
while (config_iter.next()) |config_flag|
|
while (config_iter.next()) |config_flag|
|
||||||
try raylib_flags_arr.append(b.allocator, config_flag);
|
try raylib_flags_arr.append(config_flag);
|
||||||
|
|
||||||
// Apply all relevant configs from `src/config.h` *except* the user-specified ones
|
// Apply all relevant configs from `src/config.h` *except* the user-specified ones
|
||||||
//
|
//
|
||||||
|
|
@ -125,14 +124,10 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, append default value from config.h to compile flags
|
// Otherwise, append default value from config.h to compile flags
|
||||||
try raylib_flags_arr.append(b.allocator, flag);
|
try raylib_flags_arr.append(flag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.shared) {
|
|
||||||
try raylib_flags_arr.appendSlice(b.allocator, shared_flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
const raylib = if (options.shared)
|
const raylib = if (options.shared)
|
||||||
b.addSharedLibrary(.{
|
b.addSharedLibrary(.{
|
||||||
.name = "raylib",
|
.name = "raylib",
|
||||||
|
|
@ -223,6 +218,7 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
waylandGenerate(b, raylib, "xdg-activation-v1.xml", "xdg-activation-v1-client-protocol");
|
waylandGenerate(b, raylib, "xdg-activation-v1.xml", "xdg-activation-v1-client-protocol");
|
||||||
waylandGenerate(b, raylib, "idle-inhibit-unstable-v1.xml", "idle-inhibit-unstable-v1-client-protocol");
|
waylandGenerate(b, raylib, "idle-inhibit-unstable-v1.xml", "idle-inhibit-unstable-v1-client-protocol");
|
||||||
}
|
}
|
||||||
|
|
||||||
setDesktopPlatform(raylib, options.platform);
|
setDesktopPlatform(raylib, options.platform);
|
||||||
} else {
|
} else {
|
||||||
if (options.opengl_version == .auto) {
|
if (options.opengl_version == .auto) {
|
||||||
|
|
@ -255,8 +251,15 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
setDesktopPlatform(raylib, options.platform);
|
setDesktopPlatform(raylib, options.platform);
|
||||||
},
|
},
|
||||||
.macos => {
|
.macos => {
|
||||||
|
// Include xcode_frameworks for cross compilation
|
||||||
|
if (b.lazyDependency("xcode_frameworks", .{})) |dep| {
|
||||||
|
raylib.addSystemFrameworkPath(dep.path("Frameworks"));
|
||||||
|
raylib.addSystemIncludePath(dep.path("include"));
|
||||||
|
raylib.addLibraryPath(dep.path("lib"));
|
||||||
|
}
|
||||||
|
|
||||||
// On macos rglfw.c include Objective-C files.
|
// On macos rglfw.c include Objective-C files.
|
||||||
try raylib_flags_arr.append(b.allocator, "-ObjC");
|
try raylib_flags_arr.append("-ObjC");
|
||||||
raylib.root_module.addCSourceFile(.{
|
raylib.root_module.addCSourceFile(.{
|
||||||
.file = b.path("src/rglfw.c"),
|
.file = b.path("src/rglfw.c"),
|
||||||
.flags = raylib_flags_arr.items,
|
.flags = raylib_flags_arr.items,
|
||||||
|
|
@ -271,20 +274,19 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
setDesktopPlatform(raylib, options.platform);
|
setDesktopPlatform(raylib, options.platform);
|
||||||
},
|
},
|
||||||
.emscripten => {
|
.emscripten => {
|
||||||
|
// Include emscripten for cross compilation
|
||||||
|
if (b.lazyDependency("emsdk", .{})) |dep| {
|
||||||
|
if (try emSdkSetupStep(b, dep)) |emSdkStep| {
|
||||||
|
raylib.step.dependOn(&emSdkStep.step);
|
||||||
|
}
|
||||||
|
|
||||||
|
raylib.addIncludePath(dep.path("upstream/emscripten/cache/sysroot/include"));
|
||||||
|
}
|
||||||
|
|
||||||
raylib.defineCMacro("PLATFORM_WEB", null);
|
raylib.defineCMacro("PLATFORM_WEB", null);
|
||||||
if (options.opengl_version == .auto) {
|
if (options.opengl_version == .auto) {
|
||||||
raylib.defineCMacro("GRAPHICS_API_OPENGL_ES2", null);
|
raylib.defineCMacro("GRAPHICS_API_OPENGL_ES2", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b.sysroot == null) {
|
|
||||||
@panic("Pass '--sysroot \"$EMSDK/upstream/emscripten\"'");
|
|
||||||
}
|
|
||||||
|
|
||||||
const cache_include = b.pathJoin(&.{ b.sysroot.?, "cache", "sysroot", "include" });
|
|
||||||
|
|
||||||
var dir = std.fs.openDirAbsolute(cache_include, std.fs.Dir.OpenDirOptions{ .access_sub_paths = true, .no_follow = true }) catch @panic("No emscripten cache. Generate it!");
|
|
||||||
dir.close();
|
|
||||||
raylib.addIncludePath(.{ .cwd_relative = cache_include });
|
|
||||||
},
|
},
|
||||||
else => {
|
else => {
|
||||||
@panic("Unsupported OS");
|
@panic("Unsupported OS");
|
||||||
|
|
@ -296,25 +298,19 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
|
||||||
.flags = raylib_flags_arr.items,
|
.flags = raylib_flags_arr.items,
|
||||||
});
|
});
|
||||||
|
|
||||||
return raylib;
|
if (options.raygui) {
|
||||||
}
|
const raygui_dep = b.dependency(options.raygui_dependency_name, .{});
|
||||||
|
|
||||||
/// This function does not need to be called if you passed .raygui = true to addRaylib
|
var gen_step = b.addWriteFiles();
|
||||||
pub fn addRaygui(b: *std.Build, raylib: *std.Build.Step.Compile, raygui_dep: *std.Build.Dependency) void {
|
raylib.step.dependOn(&gen_step.step);
|
||||||
if (raylib_flags_arr.items.len == 0) {
|
|
||||||
@panic(
|
const raygui_c_path = gen_step.add("raygui.c", "#define RAYGUI_IMPLEMENTATION\n#include \"raygui.h\"\n");
|
||||||
\\argument 2 `raylib` in `addRaygui` must come from b.dependency("raylib", ...).artifact("raylib")
|
raylib.addCSourceFile(.{ .file = raygui_c_path, .flags = raylib_flags_arr.items });
|
||||||
);
|
raylib.addIncludePath(raygui_dep.path("src"));
|
||||||
|
raylib.installHeader(raygui_dep.path("src/raygui.h"), "raygui.h");
|
||||||
}
|
}
|
||||||
|
|
||||||
var gen_step = b.addWriteFiles();
|
return raylib;
|
||||||
raylib.step.dependOn(&gen_step.step);
|
|
||||||
|
|
||||||
const raygui_c_path = gen_step.add("raygui.c", "#define RAYGUI_IMPLEMENTATION\n#include \"raygui.h\"\n");
|
|
||||||
raylib.addCSourceFile(.{ .file = raygui_c_path, .flags = raylib_flags_arr.items });
|
|
||||||
raylib.addIncludePath(raygui_dep.path("src"));
|
|
||||||
|
|
||||||
raylib.installHeader(raygui_dep.path("src/raygui.h"), "raygui.h");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const Options = struct {
|
pub const Options = struct {
|
||||||
|
|
|
||||||
24
build.zig.zon
Normal file
24
build.zig.zon
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
.{
|
||||||
|
.name = "raylib",
|
||||||
|
.version = "5.5.0",
|
||||||
|
.minimum_zig_version = "0.13.0",
|
||||||
|
|
||||||
|
.dependencies = .{
|
||||||
|
.xcode_frameworks = .{
|
||||||
|
.url = "git+https://github.com/hexops/xcode-frameworks#a6bf82e032d4d9923ad5c222d466710fcc05f249",
|
||||||
|
.hash = "12208da4dfcd9b53fb367375fb612ec73f38e53015f1ce6ae6d6e8437a637078e170",
|
||||||
|
.lazy = true,
|
||||||
|
},
|
||||||
|
.emsdk = .{
|
||||||
|
.url = "git+https://github.com/emscripten-core/emsdk#3.1.50",
|
||||||
|
.hash = "1220e8fe9509f0843e5e22326300ca415c27afbfbba3992f3c3184d71613540b5564",
|
||||||
|
.lazy = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
.paths = .{
|
||||||
|
"build.zig",
|
||||||
|
"build.zig.zon",
|
||||||
|
"src",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#**************************************************************************************************
|
#**************************************************************************************************
|
||||||
#
|
#
|
||||||
# raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
|
# raylib makefile for Web platform
|
||||||
#
|
#
|
||||||
# Copyright (c) 2013-2024 Ramon Santamaria (@raysan5)
|
# Copyright (c) 2013-2024 Ramon Santamaria (@raysan5)
|
||||||
#
|
#
|
||||||
|
|
@ -30,9 +30,12 @@ PLATFORM ?= PLATFORM_WEB
|
||||||
|
|
||||||
# Define required raylib variables
|
# Define required raylib variables
|
||||||
PROJECT_NAME ?= raylib_examples
|
PROJECT_NAME ?= raylib_examples
|
||||||
RAYLIB_VERSION ?= 5.0.0
|
RAYLIB_VERSION ?= 5.5.0
|
||||||
RAYLIB_PATH ?= ..
|
RAYLIB_PATH ?= ..
|
||||||
|
|
||||||
|
# Define raylib source code path
|
||||||
|
RAYLIB_SRC_PATH ?= ../src
|
||||||
|
|
||||||
# Locations of raylib.h and libraylib.a/libraylib.so
|
# Locations of raylib.h and libraylib.a/libraylib.so
|
||||||
# NOTE: Those variables are only used for PLATFORM_OS: LINUX, BSD
|
# NOTE: Those variables are only used for PLATFORM_OS: LINUX, BSD
|
||||||
DESTDIR ?= /usr/local
|
DESTDIR ?= /usr/local
|
||||||
|
|
@ -52,6 +55,11 @@ USE_EXTERNAL_GLFW ?= FALSE
|
||||||
# NOTE: This variable is only used for PLATFORM_OS: LINUX
|
# NOTE: This variable is only used for PLATFORM_OS: LINUX
|
||||||
USE_WAYLAND_DISPLAY ?= FALSE
|
USE_WAYLAND_DISPLAY ?= FALSE
|
||||||
|
|
||||||
|
# PLATFORM_WEB: Default properties
|
||||||
|
BUILD_WEB_ASYNCIFY ?= TRUE
|
||||||
|
BUILD_WEB_SHELL ?= $(RAYLIB_PATH)/src/shell.html
|
||||||
|
BUILD_WEB_HEAP_SIZE ?= 134217728
|
||||||
|
|
||||||
# Use WebGL2 backend (OpenGL 3.0)
|
# Use WebGL2 backend (OpenGL 3.0)
|
||||||
# WARNING: Requires raylib compiled with GRAPHICS_API_OPENGL_ES3
|
# WARNING: Requires raylib compiled with GRAPHICS_API_OPENGL_ES3
|
||||||
USE_WEBGL2 ?= FALSE
|
USE_WEBGL2 ?= FALSE
|
||||||
|
|
@ -266,13 +274,17 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
# -sASYNCIFY # lets synchronous C/C++ code interact with asynchronous JS
|
# -sASYNCIFY # lets synchronous C/C++ code interact with asynchronous JS
|
||||||
# -sFORCE_FILESYSTEM=1 # force filesystem to load/save files data
|
# -sFORCE_FILESYSTEM=1 # force filesystem to load/save files data
|
||||||
# -sASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
|
# -sASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
|
||||||
# -sEXPORTED_RUNTIME_METHODS=ccall # require exporting some LEGACY_RUNTIME functions, ccall() is required by miniaudio
|
|
||||||
# -sGL_ENABLE_GET_PROC_ADDRESS # enable using the *glGetProcAddress() family of functions, required for extensions loading
|
# -sGL_ENABLE_GET_PROC_ADDRESS # enable using the *glGetProcAddress() family of functions, required for extensions loading
|
||||||
# --profiling # include information for code profiling
|
# --profiling # include information for code profiling
|
||||||
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
||||||
# --preload-file resources # specify a resources folder for data compilation
|
# --preload-file resources # specify a resources folder for data compilation
|
||||||
# --source-map-base # allow debugging in browser with source map
|
# --source-map-base # allow debugging in browser with source map
|
||||||
LDFLAGS += -sUSE_GLFW=3 -sASYNCIFY -sEXPORTED_RUNTIME_METHODS=ccall
|
LDFLAGS += -sUSE_GLFW=3 -sEXPORTED_RUNTIME_METHODS=ccall
|
||||||
|
|
||||||
|
# Build using asyncify
|
||||||
|
ifeq ($(BUILD_WEB_ASYNCIFY),TRUE)
|
||||||
|
LDFLAGS += -sASYNCIFY
|
||||||
|
endif
|
||||||
|
|
||||||
# NOTE: Flags required for WebGL 2.0 (OpenGL ES 3.0)
|
# NOTE: Flags required for WebGL 2.0 (OpenGL ES 3.0)
|
||||||
# WARNING: Requires raylib compiled with GRAPHICS_API_OPENGL_ES3
|
# WARNING: Requires raylib compiled with GRAPHICS_API_OPENGL_ES3
|
||||||
|
|
@ -280,17 +292,20 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
LDFLAGS += -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2
|
LDFLAGS += -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Add debug mode flags if required
|
||||||
|
ifeq ($(BUILD_MODE),DEBUG)
|
||||||
|
LDFLAGS += -sASSERTIONS=1 --profiling
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Define a custom shell .html and output extension
|
||||||
|
LDFLAGS += --shell-file $(BUILD_WEB_SHELL)
|
||||||
|
EXT = .html
|
||||||
|
|
||||||
# NOTE: Simple raylib examples are compiled to be interpreter with asyncify, that way,
|
# NOTE: Simple raylib examples are compiled to be interpreter with asyncify, that way,
|
||||||
# we can compile same code for ALL platforms with no change required, but, working on bigger
|
# we can compile same code for ALL platforms with no change required, but, working on bigger
|
||||||
# projects, code needs to be refactored to avoid a blocking while() loop, moving Update and Draw
|
# projects, code needs to be refactored to avoid a blocking while() loop, moving Update and Draw
|
||||||
# logic to a self contained function: UpdateDrawFrame(), check core_basic_window_web.c for reference.
|
# logic to a self contained function: UpdateDrawFrame(), check core_basic_window_web.c for reference.
|
||||||
|
|
||||||
# NOTE: Additional compilate flags for TOTAL_MEMORY, FORCE_FILESYSTEM and resources loading
|
|
||||||
# are specified per-example for optimization
|
|
||||||
|
|
||||||
# Define a custom shell .html and output extension
|
|
||||||
LDFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
|
|
||||||
EXT = .html
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Define libraries required on linking: LDLIBS
|
# Define libraries required on linking: LDLIBS
|
||||||
|
|
@ -332,7 +347,8 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||||
ifeq ($(PLATFORM_OS),BSD)
|
ifeq ($(PLATFORM_OS),BSD)
|
||||||
# Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
|
# Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
|
||||||
# NOTE: Required packages: mesa-libs
|
# NOTE: Required packages: mesa-libs
|
||||||
LDLIBS = -lraylib -lGL -lpthread -lm
|
LDFLAGS += -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib
|
||||||
|
LDLIBS = -lraylib -lGL -lm -lpthread
|
||||||
|
|
||||||
# On XWindow requires also below libraries
|
# On XWindow requires also below libraries
|
||||||
LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
||||||
|
|
@ -408,7 +424,8 @@ SHAPES = \
|
||||||
shapes/shapes_logo_raylib_anim \
|
shapes/shapes_logo_raylib_anim \
|
||||||
shapes/shapes_rectangle_scaling \
|
shapes/shapes_rectangle_scaling \
|
||||||
shapes/shapes_splines_drawing \
|
shapes/shapes_splines_drawing \
|
||||||
shapes/shapes_top_down_lights
|
shapes/shapes_top_down_lights \
|
||||||
|
shapes/shapes_rectangle_advanced
|
||||||
|
|
||||||
TEXTURES = \
|
TEXTURES = \
|
||||||
textures/textures_background_scrolling \
|
textures/textures_background_scrolling \
|
||||||
|
|
@ -417,6 +434,7 @@ TEXTURES = \
|
||||||
textures/textures_draw_tiled \
|
textures/textures_draw_tiled \
|
||||||
textures/textures_fog_of_war \
|
textures/textures_fog_of_war \
|
||||||
textures/textures_gif_player \
|
textures/textures_gif_player \
|
||||||
|
textures/textures_image_channel \
|
||||||
textures/textures_image_drawing \
|
textures/textures_image_drawing \
|
||||||
textures/textures_image_generation \
|
textures/textures_image_generation \
|
||||||
textures/textures_image_kernel \
|
textures/textures_image_kernel \
|
||||||
|
|
@ -455,6 +473,7 @@ MODELS = \
|
||||||
models/models_animation \
|
models/models_animation \
|
||||||
models/models_gpu_skinning \
|
models/models_gpu_skinning \
|
||||||
models/models_billboard \
|
models/models_billboard \
|
||||||
|
models/models_bone_socket \
|
||||||
models/models_box_collisions \
|
models/models_box_collisions \
|
||||||
models/models_cubicmap \
|
models/models_cubicmap \
|
||||||
models/models_draw_cube_texture \
|
models/models_draw_cube_texture \
|
||||||
|
|
@ -476,6 +495,7 @@ MODELS = \
|
||||||
|
|
||||||
SHADERS = \
|
SHADERS = \
|
||||||
shaders/shaders_basic_lighting \
|
shaders/shaders_basic_lighting \
|
||||||
|
shaders/shaders_basic_pbr \
|
||||||
shaders/shaders_custom_uniform \
|
shaders/shaders_custom_uniform \
|
||||||
shaders/shaders_deferred_render \
|
shaders/shaders_deferred_render \
|
||||||
shaders/shaders_eratosthenes \
|
shaders/shaders_eratosthenes \
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ int main ()
|
||||||
else if (IsKeyPressed(KEY_TWO)) zoomMode = 1;
|
else if (IsKeyPressed(KEY_TWO)) zoomMode = 1;
|
||||||
|
|
||||||
// Translate based on mouse right click
|
// Translate based on mouse right click
|
||||||
if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT))
|
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT))
|
||||||
{
|
{
|
||||||
Vector2 delta = GetMouseDelta();
|
Vector2 delta = GetMouseDelta();
|
||||||
delta = Vector2Scale(delta, -1.0f/camera.zoom);
|
delta = Vector2Scale(delta, -1.0f/camera.zoom);
|
||||||
|
|
@ -76,8 +76,8 @@ int main ()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Zoom based on mouse left click
|
// Zoom based on mouse right click
|
||||||
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
|
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
// Get the world point that is under the mouse
|
// Get the world point that is under the mouse
|
||||||
Vector2 mouseWorldPos = GetScreenToWorld2D(GetMousePosition(), camera);
|
Vector2 mouseWorldPos = GetScreenToWorld2D(GetMousePosition(), camera);
|
||||||
|
|
@ -89,7 +89,7 @@ int main ()
|
||||||
// under the cursor to the screen space point under the cursor at any zoom
|
// under the cursor to the screen space point under the cursor at any zoom
|
||||||
camera.target = mouseWorldPos;
|
camera.target = mouseWorldPos;
|
||||||
}
|
}
|
||||||
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT))
|
if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT))
|
||||||
{
|
{
|
||||||
// Zoom increment
|
// Zoom increment
|
||||||
float deltaX = GetMouseDelta().x;
|
float deltaX = GetMouseDelta().x;
|
||||||
|
|
@ -119,10 +119,16 @@ int main ()
|
||||||
DrawCircle(GetScreenWidth()/2, GetScreenHeight()/2, 50, MAROON);
|
DrawCircle(GetScreenWidth()/2, GetScreenHeight()/2, 50, MAROON);
|
||||||
|
|
||||||
EndMode2D();
|
EndMode2D();
|
||||||
|
|
||||||
|
// Draw mouse reference
|
||||||
|
//Vector2 mousePos = GetWorldToScreen2D(GetMousePosition(), camera)
|
||||||
|
DrawCircleV(GetMousePosition(), 4, DARKGRAY);
|
||||||
|
DrawTextEx(GetFontDefault(), TextFormat("[%i, %i]", GetMouseX(), GetMouseY()),
|
||||||
|
Vector2Add(GetMousePosition(), (Vector2){ -44, -24 }), 20, 2, BLACK);
|
||||||
|
|
||||||
DrawText("[1][2] Select mouse zoom mode (Wheel or Move)", 20, 20, 20, DARKGRAY);
|
DrawText("[1][2] Select mouse zoom mode (Wheel or Move)", 20, 20, 20, DARKGRAY);
|
||||||
if (zoomMode == 0) DrawText("Mouse right button drag to move, mouse wheel to zoom", 20, 50, 20, DARKGRAY);
|
if (zoomMode == 0) DrawText("Mouse left button drag to move, mouse wheel to zoom", 20, 50, 20, DARKGRAY);
|
||||||
else DrawText("Mouse right button drag to move, mouse press and move to zoom", 20, 50, 20, DARKGRAY);
|
else DrawText("Mouse left button drag to move, mouse press and move to zoom", 20, 50, 20, DARKGRAY);
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@ int main(void)
|
||||||
ModelAnimation anim = modelAnimations[animIndex];
|
ModelAnimation anim = modelAnimations[animIndex];
|
||||||
animCurrentFrame = (animCurrentFrame + 1)%anim.frameCount;
|
animCurrentFrame = (animCurrentFrame + 1)%anim.frameCount;
|
||||||
characterModel.transform = MatrixTranslate(position.x, position.y, position.z);
|
characterModel.transform = MatrixTranslate(position.x, position.y, position.z);
|
||||||
UpdateModelAnimationBoneMatrices(characterModel, anim, animCurrentFrame);
|
UpdateModelAnimationBones(characterModel, anim, animCurrentFrame);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
|
|
|
||||||
BIN
logo/raylib.ico
BIN
logo/raylib.ico
Binary file not shown.
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 6.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 475 B |
|
|
@ -3520,6 +3520,11 @@
|
||||||
"description": "Get clipboard text content",
|
"description": "Get clipboard text content",
|
||||||
"returnType": "const char *"
|
"returnType": "const char *"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "GetClipboardImage",
|
||||||
|
"description": "Get clipboard image",
|
||||||
|
"returnType": "Image"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "EnableEventWaiting",
|
"name": "EnableEventWaiting",
|
||||||
"description": "Enable waiting for events on EndDrawing(), no automatic event polling",
|
"description": "Enable waiting for events on EndDrawing(), no automatic event polling",
|
||||||
|
|
@ -11087,7 +11092,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "UpdateModelAnimationBoneMatrices",
|
"name": "UpdateModelAnimationBones",
|
||||||
"description": "Update model animation mesh bone matrices (GPU skinning)",
|
"description": "Update model animation mesh bone matrices (GPU skinning)",
|
||||||
"returnType": "void",
|
"returnType": "void",
|
||||||
"params": [
|
"params": [
|
||||||
|
|
|
||||||
|
|
@ -3397,6 +3397,11 @@ return {
|
||||||
description = "Get clipboard text content",
|
description = "Get clipboard text content",
|
||||||
returnType = "const char *"
|
returnType = "const char *"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name = "GetClipboardImage",
|
||||||
|
description = "Get clipboard image",
|
||||||
|
returnType = "Image"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name = "EnableEventWaiting",
|
name = "EnableEventWaiting",
|
||||||
description = "Enable waiting for events on EndDrawing(), no automatic event polling",
|
description = "Enable waiting for events on EndDrawing(), no automatic event polling",
|
||||||
|
|
@ -7607,7 +7612,7 @@ return {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name = "UpdateModelAnimationBoneMatrices",
|
name = "UpdateModelAnimationBones",
|
||||||
description = "Update model animation mesh bone matrices (GPU skinning)",
|
description = "Update model animation mesh bone matrices (GPU skinning)",
|
||||||
returnType = "void",
|
returnType = "void",
|
||||||
params = {
|
params = {
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -674,7 +674,7 @@
|
||||||
<Param type="unsigned int" name="frames" desc="" />
|
<Param type="unsigned int" name="frames" desc="" />
|
||||||
</Callback>
|
</Callback>
|
||||||
</Callbacks>
|
</Callbacks>
|
||||||
<Functions count="580">
|
<Functions count="581">
|
||||||
<Function name="InitWindow" retType="void" paramCount="3" desc="Initialize window and OpenGL context">
|
<Function name="InitWindow" retType="void" paramCount="3" desc="Initialize window and OpenGL context">
|
||||||
<Param type="int" name="width" desc="" />
|
<Param type="int" name="width" desc="" />
|
||||||
<Param type="int" name="height" desc="" />
|
<Param type="int" name="height" desc="" />
|
||||||
|
|
@ -795,6 +795,8 @@
|
||||||
</Function>
|
</Function>
|
||||||
<Function name="GetClipboardText" retType="const char *" paramCount="0" desc="Get clipboard text content">
|
<Function name="GetClipboardText" retType="const char *" paramCount="0" desc="Get clipboard text content">
|
||||||
</Function>
|
</Function>
|
||||||
|
<Function name="GetClipboardImage" retType="Image" paramCount="0" desc="Get clipboard image">
|
||||||
|
</Function>
|
||||||
<Function name="EnableEventWaiting" retType="void" paramCount="0" desc="Enable waiting for events on EndDrawing(), no automatic event polling">
|
<Function name="EnableEventWaiting" retType="void" paramCount="0" desc="Enable waiting for events on EndDrawing(), no automatic event polling">
|
||||||
</Function>
|
</Function>
|
||||||
<Function name="DisableEventWaiting" retType="void" paramCount="0" desc="Disable waiting for events on EndDrawing(), automatic events polling">
|
<Function name="DisableEventWaiting" retType="void" paramCount="0" desc="Disable waiting for events on EndDrawing(), automatic events polling">
|
||||||
|
|
@ -2826,7 +2828,7 @@
|
||||||
<Param type="ModelAnimation" name="anim" desc="" />
|
<Param type="ModelAnimation" name="anim" desc="" />
|
||||||
<Param type="int" name="frame" desc="" />
|
<Param type="int" name="frame" desc="" />
|
||||||
</Function>
|
</Function>
|
||||||
<Function name="UpdateModelAnimationBoneMatrices" retType="void" paramCount="3" desc="Update model animation mesh bone matrices (GPU skinning)">
|
<Function name="UpdateModelAnimationBones" retType="void" paramCount="3" desc="Update model animation mesh bone matrices (GPU skinning)">
|
||||||
<Param type="Model" name="model" desc="" />
|
<Param type="Model" name="model" desc="" />
|
||||||
<Param type="ModelAnimation" name="anim" desc="" />
|
<Param type="ModelAnimation" name="anim" desc="" />
|
||||||
<Param type="int" name="frame" desc="" />
|
<Param type="int" name="frame" desc="" />
|
||||||
|
|
|
||||||
|
|
@ -1603,7 +1603,7 @@ RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId);
|
||||||
// Model animations loading/unloading functions
|
// Model animations loading/unloading functions
|
||||||
RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, 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 (CPU)
|
RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose (CPU)
|
||||||
RLAPI void UpdateModelAnimationBoneMatrices(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (GPU skinning)
|
RLAPI void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (GPU skinning)
|
||||||
RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data
|
RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data
|
||||||
RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // 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
|
||||||
|
|
|
||||||
|
|
@ -2569,7 +2569,13 @@ RMAPI void MatrixDecompose(Matrix mat, Vector3 *translation, Quaternion *rotatio
|
||||||
if (!FloatEquals(det, 0))
|
if (!FloatEquals(det, 0))
|
||||||
{
|
{
|
||||||
clone.m0 /= s.x;
|
clone.m0 /= s.x;
|
||||||
|
clone.m4 /= s.x;
|
||||||
|
clone.m8 /= s.x;
|
||||||
|
clone.m1 /= s.y;
|
||||||
clone.m5 /= s.y;
|
clone.m5 /= s.y;
|
||||||
|
clone.m9 /= s.y;
|
||||||
|
clone.m2 /= s.z;
|
||||||
|
clone.m6 /= s.z;
|
||||||
clone.m10 /= s.z;
|
clone.m10 /= s.z;
|
||||||
|
|
||||||
// Extract rotation
|
// Extract rotation
|
||||||
|
|
|
||||||
169
src/rmodels.c
169
src/rmodels.c
|
|
@ -1508,7 +1508,7 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform)
|
||||||
|
|
||||||
#ifdef RL_SUPPORT_MESH_GPU_SKINNING
|
#ifdef RL_SUPPORT_MESH_GPU_SKINNING
|
||||||
// Upload Bone Transforms
|
// Upload Bone Transforms
|
||||||
if (material.shader.locs[SHADER_LOC_BONE_MATRICES] != -1 && mesh.boneMatrices)
|
if ((material.shader.locs[SHADER_LOC_BONE_MATRICES] != -1) && mesh.boneMatrices)
|
||||||
{
|
{
|
||||||
rlSetUniformMatrices(material.shader.locs[SHADER_LOC_BONE_MATRICES], mesh.boneMatrices, mesh.boneCount);
|
rlSetUniformMatrices(material.shader.locs[SHADER_LOC_BONE_MATRICES], mesh.boneMatrices, mesh.boneCount);
|
||||||
}
|
}
|
||||||
|
|
@ -1754,7 +1754,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i
|
||||||
|
|
||||||
#ifdef RL_SUPPORT_MESH_GPU_SKINNING
|
#ifdef RL_SUPPORT_MESH_GPU_SKINNING
|
||||||
// Upload Bone Transforms
|
// Upload Bone Transforms
|
||||||
if (material.shader.locs[SHADER_LOC_BONE_MATRICES] != -1 && mesh.boneMatrices)
|
if ((material.shader.locs[SHADER_LOC_BONE_MATRICES] != -1) && mesh.boneMatrices)
|
||||||
{
|
{
|
||||||
rlSetUniformMatrices(material.shader.locs[SHADER_LOC_BONE_MATRICES], mesh.boneMatrices, mesh.boneCount);
|
rlSetUniformMatrices(material.shader.locs[SHADER_LOC_BONE_MATRICES], mesh.boneMatrices, mesh.boneCount);
|
||||||
}
|
}
|
||||||
|
|
@ -2262,112 +2262,10 @@ ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount)
|
||||||
return animations;
|
return animations;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update model animated vertex data (positions and normals) for a given frame
|
|
||||||
// NOTE: Updated data is uploaded to GPU
|
|
||||||
void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
|
|
||||||
{
|
|
||||||
if ((anim.frameCount > 0) && (anim.bones != NULL) && (anim.framePoses != NULL))
|
|
||||||
{
|
|
||||||
if (frame >= anim.frameCount) frame = frame%anim.frameCount;
|
|
||||||
|
|
||||||
for (int m = 0; m < model.meshCount; m++)
|
|
||||||
{
|
|
||||||
Mesh mesh = model.meshes[m];
|
|
||||||
|
|
||||||
if (mesh.boneIds == NULL || mesh.boneWeights == NULL)
|
|
||||||
{
|
|
||||||
TRACELOG(LOG_WARNING, "MODEL: UpdateModelAnimation(): Mesh %i has no connection to bones", m);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool updated = false; // Flag to check when anim vertex information is updated
|
|
||||||
Vector3 animVertex = { 0 };
|
|
||||||
Vector3 animNormal = { 0 };
|
|
||||||
|
|
||||||
Vector3 inTranslation = { 0 };
|
|
||||||
Quaternion inRotation = { 0 };
|
|
||||||
// Vector3 inScale = { 0 };
|
|
||||||
|
|
||||||
Vector3 outTranslation = { 0 };
|
|
||||||
Quaternion outRotation = { 0 };
|
|
||||||
Vector3 outScale = { 0 };
|
|
||||||
|
|
||||||
int boneId = 0;
|
|
||||||
int boneCounter = 0;
|
|
||||||
float boneWeight = 0.0;
|
|
||||||
|
|
||||||
const int vValues = mesh.vertexCount*3;
|
|
||||||
for (int vCounter = 0; vCounter < vValues; vCounter += 3)
|
|
||||||
{
|
|
||||||
mesh.animVertices[vCounter] = 0;
|
|
||||||
mesh.animVertices[vCounter + 1] = 0;
|
|
||||||
mesh.animVertices[vCounter + 2] = 0;
|
|
||||||
|
|
||||||
if (mesh.animNormals != NULL)
|
|
||||||
{
|
|
||||||
mesh.animNormals[vCounter] = 0;
|
|
||||||
mesh.animNormals[vCounter + 1] = 0;
|
|
||||||
mesh.animNormals[vCounter + 2] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterates over 4 bones per vertex
|
|
||||||
for (int j = 0; j < 4; j++, boneCounter++)
|
|
||||||
{
|
|
||||||
boneWeight = mesh.boneWeights[boneCounter];
|
|
||||||
|
|
||||||
// Early stop when no transformation will be applied
|
|
||||||
if (boneWeight == 0.0f) continue;
|
|
||||||
|
|
||||||
boneId = mesh.boneIds[boneCounter];
|
|
||||||
//int boneIdParent = model.bones[boneId].parent;
|
|
||||||
inTranslation = model.bindPose[boneId].translation;
|
|
||||||
inRotation = model.bindPose[boneId].rotation;
|
|
||||||
//inScale = model.bindPose[boneId].scale;
|
|
||||||
outTranslation = anim.framePoses[frame][boneId].translation;
|
|
||||||
outRotation = anim.framePoses[frame][boneId].rotation;
|
|
||||||
outScale = anim.framePoses[frame][boneId].scale;
|
|
||||||
|
|
||||||
// Vertices processing
|
|
||||||
// NOTE: We use meshes.vertices (default vertex position) to calculate meshes.animVertices (animated vertex position)
|
|
||||||
animVertex = (Vector3){ mesh.vertices[vCounter], mesh.vertices[vCounter + 1], mesh.vertices[vCounter + 2] };
|
|
||||||
animVertex = Vector3Subtract(animVertex, inTranslation);
|
|
||||||
animVertex = Vector3Multiply(animVertex, outScale);
|
|
||||||
animVertex = Vector3RotateByQuaternion(animVertex, QuaternionMultiply(outRotation, QuaternionInvert(inRotation)));
|
|
||||||
animVertex = Vector3Add(animVertex, outTranslation);
|
|
||||||
//animVertex = Vector3Transform(animVertex, model.transform);
|
|
||||||
mesh.animVertices[vCounter] += animVertex.x*boneWeight;
|
|
||||||
mesh.animVertices[vCounter + 1] += animVertex.y*boneWeight;
|
|
||||||
mesh.animVertices[vCounter + 2] += animVertex.z*boneWeight;
|
|
||||||
updated = true;
|
|
||||||
|
|
||||||
// Normals processing
|
|
||||||
// NOTE: We use meshes.baseNormals (default normal) to calculate meshes.normals (animated normals)
|
|
||||||
if (mesh.normals != NULL)
|
|
||||||
{
|
|
||||||
animNormal = (Vector3){ mesh.normals[vCounter], mesh.normals[vCounter + 1], mesh.normals[vCounter + 2] };
|
|
||||||
animNormal = Vector3RotateByQuaternion(animNormal, QuaternionMultiply(outRotation, QuaternionInvert(inRotation)));
|
|
||||||
mesh.animNormals[vCounter] += animNormal.x*boneWeight;
|
|
||||||
mesh.animNormals[vCounter + 1] += animNormal.y*boneWeight;
|
|
||||||
mesh.animNormals[vCounter + 2] += animNormal.z*boneWeight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Upload new vertex data to GPU for model drawing
|
|
||||||
// NOTE: Only update data when values changed
|
|
||||||
if (updated)
|
|
||||||
{
|
|
||||||
rlUpdateVertexBuffer(mesh.vboId[0], mesh.animVertices, mesh.vertexCount*3*sizeof(float), 0); // Update vertex position
|
|
||||||
rlUpdateVertexBuffer(mesh.vboId[2], mesh.animNormals, mesh.vertexCount*3*sizeof(float), 0); // Update vertex normals
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update model animated bones transform matrices for a given frame
|
// Update model animated bones transform matrices for a given frame
|
||||||
// NOTE: Updated data is not uploaded to GPU but kept at model.meshes[i].boneMatrices[boneId],
|
// NOTE: Updated data is not uploaded to GPU but kept at model.meshes[i].boneMatrices[boneId],
|
||||||
// to be uploaded to shader at drawing, in case GPU skinning is enabled
|
// to be uploaded to shader at drawing, in case GPU skinning is enabled
|
||||||
void UpdateModelAnimationBoneMatrices(Model model, ModelAnimation anim, int frame)
|
void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame)
|
||||||
{
|
{
|
||||||
if ((anim.frameCount > 0) && (anim.bones != NULL) && (anim.framePoses != NULL))
|
if ((anim.frameCount > 0) && (anim.bones != NULL) && (anim.framePoses != NULL))
|
||||||
{
|
{
|
||||||
|
|
@ -2411,6 +2309,66 @@ void UpdateModelAnimationBoneMatrices(Model model, ModelAnimation anim, int fram
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// at least 2x speed up vs the old method
|
||||||
|
// Update model animated vertex data (positions and normals) for a given frame
|
||||||
|
// NOTE: Updated data is uploaded to GPU
|
||||||
|
void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
|
||||||
|
{
|
||||||
|
UpdateModelAnimationBones(model,anim,frame);
|
||||||
|
for (int m = 0; m < model.meshCount; m++)
|
||||||
|
{
|
||||||
|
Mesh mesh = model.meshes[m];
|
||||||
|
Vector3 animVertex = { 0 };
|
||||||
|
Vector3 animNormal = { 0 };
|
||||||
|
int boneId = 0;
|
||||||
|
int boneCounter = 0;
|
||||||
|
float boneWeight = 0.0;
|
||||||
|
bool updated = false; // Flag to check when anim vertex information is updated
|
||||||
|
const int vValues = mesh.vertexCount*3;
|
||||||
|
for (int vCounter = 0; vCounter < vValues; vCounter += 3)
|
||||||
|
{
|
||||||
|
mesh.animVertices[vCounter] = 0;
|
||||||
|
mesh.animVertices[vCounter + 1] = 0;
|
||||||
|
mesh.animVertices[vCounter + 2] = 0;
|
||||||
|
if (mesh.animNormals != NULL)
|
||||||
|
{
|
||||||
|
mesh.animNormals[vCounter] = 0;
|
||||||
|
mesh.animNormals[vCounter + 1] = 0;
|
||||||
|
mesh.animNormals[vCounter + 2] = 0;
|
||||||
|
}
|
||||||
|
// Iterates over 4 bones per vertex
|
||||||
|
for (int j = 0; j < 4; j++, boneCounter++)
|
||||||
|
{
|
||||||
|
boneWeight = mesh.boneWeights[boneCounter];
|
||||||
|
boneId = mesh.boneIds[boneCounter];
|
||||||
|
// Early stop when no transformation will be applied
|
||||||
|
if (boneWeight == 0.0f) continue;
|
||||||
|
animVertex = (Vector3){ mesh.vertices[vCounter], mesh.vertices[vCounter + 1], mesh.vertices[vCounter + 2] };
|
||||||
|
animVertex = Vector3Transform(animVertex,model.meshes[m].boneMatrices[boneId]);
|
||||||
|
mesh.animVertices[vCounter] += animVertex.x * boneWeight;
|
||||||
|
mesh.animVertices[vCounter+1] += animVertex.y * boneWeight;
|
||||||
|
mesh.animVertices[vCounter+2] += animVertex.z * boneWeight;
|
||||||
|
updated = true;
|
||||||
|
// Normals processing
|
||||||
|
// NOTE: We use meshes.baseNormals (default normal) to calculate meshes.normals (animated normals)
|
||||||
|
if (mesh.normals != NULL)
|
||||||
|
{
|
||||||
|
animNormal = (Vector3){ mesh.normals[vCounter], mesh.normals[vCounter + 1], mesh.normals[vCounter + 2] };
|
||||||
|
animNormal = Vector3Transform(animNormal,model.meshes[m].boneMatrices[boneId]);
|
||||||
|
mesh.animNormals[vCounter] += animNormal.x*boneWeight;
|
||||||
|
mesh.animNormals[vCounter + 1] += animNormal.y*boneWeight;
|
||||||
|
mesh.animNormals[vCounter + 2] += animNormal.z*boneWeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updated)
|
||||||
|
{
|
||||||
|
rlUpdateVertexBuffer(mesh.vboId[0], mesh.animVertices, mesh.vertexCount*3*sizeof(float), 0); // Update vertex position
|
||||||
|
rlUpdateVertexBuffer(mesh.vboId[2], mesh.animNormals, mesh.vertexCount*3*sizeof(float), 0); // Update vertex normals
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Unload animation array data
|
// Unload animation array data
|
||||||
void UnloadModelAnimations(ModelAnimation *animations, int animCount)
|
void UnloadModelAnimations(ModelAnimation *animations, int animCount)
|
||||||
{
|
{
|
||||||
|
|
@ -2820,6 +2778,7 @@ Mesh GenMeshSphere(float radius, int rings, int slices)
|
||||||
|
|
||||||
if ((rings >= 3) && (slices >= 3))
|
if ((rings >= 3) && (slices >= 3))
|
||||||
{
|
{
|
||||||
|
par_shapes_set_epsilon_degenerate_sphere(0.0);
|
||||||
par_shapes_mesh *sphere = par_shapes_create_parametric_sphere(slices, rings);
|
par_shapes_mesh *sphere = par_shapes_create_parametric_sphere(slices, rings);
|
||||||
par_shapes_scale(sphere, radius, radius, radius);
|
par_shapes_scale(sphere, radius, radius, radius);
|
||||||
// NOTE: Soft normals are computed internally
|
// NOTE: Soft normals are computed internally
|
||||||
|
|
|
||||||
|
|
@ -827,16 +827,27 @@ Image GenImageGradientLinear(int width, int height, int direction, Color start,
|
||||||
float cosDir = cosf(radianDirection);
|
float cosDir = cosf(radianDirection);
|
||||||
float sinDir = sinf(radianDirection);
|
float sinDir = sinf(radianDirection);
|
||||||
|
|
||||||
|
// Calculate how far the top-left pixel is along the gradient direction from the center of said gradient
|
||||||
|
float startingPos = 0.5f - (cosDir*width/2) - (sinDir*height/2);
|
||||||
|
// With directions that lie in the first or third quadrant (i.e. from top-left to
|
||||||
|
// bottom-right or vice-versa), pixel (0, 0) is the farthest point on the gradient
|
||||||
|
// (i.e. the pixel which should become one of the gradient's ends color); while for
|
||||||
|
// directions that lie in the second or fourth quadrant, that point is pixel (width, 0).
|
||||||
|
float maxPosValue =
|
||||||
|
((signbit(sinDir) != 0) == (signbit(cosDir) != 0))
|
||||||
|
? fabsf(startingPos)
|
||||||
|
: fabsf(startingPos+width*cosDir);
|
||||||
for (int i = 0; i < width; i++)
|
for (int i = 0; i < width; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < height; j++)
|
for (int j = 0; j < height; j++)
|
||||||
{
|
{
|
||||||
// Calculate the relative position of the pixel along the gradient direction
|
// Calculate the relative position of the pixel along the gradient direction
|
||||||
float pos = (i*cosDir + j*sinDir)/(width*cosDir + height*sinDir);
|
float pos = (startingPos + (i*cosDir + j*sinDir)) / maxPosValue;
|
||||||
|
|
||||||
float factor = pos;
|
float factor = pos;
|
||||||
factor = (factor > 1.0f)? 1.0f : factor; // Clamp to [0,1]
|
factor = (factor > 1.0f)? 1.0f : factor; // Clamp to [-1,1]
|
||||||
factor = (factor < 0.0f)? 0.0f : factor; // Clamp to [0,1]
|
factor = (factor < -1.0f)? -1.0f : factor; // Clamp to [-1,1]
|
||||||
|
factor = factor / 2 + 0.5f;
|
||||||
|
|
||||||
// Generate the color for this pixel
|
// Generate the color for this pixel
|
||||||
pixels[j*width + i].r = (int)((float)end.r*factor + (float)start.r*(1.0f - factor));
|
pixels[j*width + i].r = (int)((float)end.r*factor + (float)start.r*(1.0f - factor));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user