* fix audio pan comment -- found by a.b.c.d.a.b.c.d
* rlparser: update raylib_api.* by CI
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
ADDED: `rlUnloadShader()` to unload shaders (that function was missing and compute shaders leak memory)
RENAMED: `rlCompileShader()` to p `rlLoadShader()` to be consistent with `rlUnloadShader()`
RENAMED: `rlLoadShaderCode()` to `rlLoadShaderProgram()`, more descriptive of return
RENAMED: `rlLoadShaderProgram()` to `rlLoadShaderProgramEx()`
RENAMED: `rlLoadComputeShaderProgram()` to `rlLoadShaderProgramCompute()`
RENAMED: Some functions parameters for consistency
Tested on Windows with Edge and Chrome browsers, the other options do not work:
- `Module.canvas.requestFullscreen(false, false)` - FAIL
- `Module.requestFullscreen(false, false)` - FAIL
- `Module.requestFullscreen()` - FAIL
Tested with latest Emscripten/emsdk 5.0.2
* Testing linux implementation
* Add implementation for ClipboardImage on Linux
* Adding another check to make sure that only X11 include X11 libs
* Adding some comments to explain the magic numbers
Redesigned to support disabling features on compilation with `-DSUPPORT_FEATURE=0`
REMOVED: `SUPPORT_DEFAULT_FONT`, always supported
REMOVED: `SUPPORT_IMAGE_MANIPULATION `, always supported
REMOVED: `SUPPORT_TEXT_MANIPULATION`, always supported
REDESIGNED: `SUPPORT_FONT_ATLAS_WHITE_REC` to `FONT_ATLAS_CORNER_REC_SIZE`
REVIEWED: Config values (other than 0-1) are already defined on respective modules
Other config tweaks here and there
* ANDROID: Fix broken LoadMusicStream due to missing fopen macro override in raudio
* ANDROID: Add missing forward declaration before fopen macro override in raudio
* renamed SHADER_LOC_VERTEX_INSTANCETRANSFORMS to SHADER_LOC_VERTEX_INSTANCETRANSFORM
* rlparser: update raylib_api.* by CI
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* win32 clipbaord: fix for BI_ALPHABITFIELDS narrow support
* Define BI_ALPHABITFIELDS even if wingdi headers are already included
since BI_ALPHABITFIELDS is not always defined there
REVIEWED: Reorganized structures for a clearer distinction between "skeleton", "skin" and "skinning" data
ADDED: New structures: `ModelSkeleton`, `ModelAnimPose` (alias `Transform*`)
ADDED: Runtime data `currentPose` and `boneMatrices` to `Model` structure
ADDED: Support animation frames-blending, for timing control
ADDED: Support animations blending, between two animations
REVIEWED: All models animation loading functions
ADDED: `UpdateModelAnimationEx()` for two animations blending
REMOVED: `UpdateModelAnimationBones*()`, simplified API
REVIEWED: Shader attributes/uniforms names for animations, for consistency
REVIEWED: Multiple tweaks on animations loading for consistency between formats
ADDED: example: `models_animation_timing`
ADDED: example: `models_animation_blending`
REVIEWED: example: `models_animation_gpu_skinning`
REVIEWED: example: `models_animation_blend_custom`
REVIEWED: All animated models loading examples
This is happening because the processing function keeps reading audio
data from the AudioBuffer even after it has been marked as stopped.
There is also an error in ReadAudioBufferFramesInInternalFormat() where
if it is called on a stopped sound, it'll still return audio frames.
This has also been addressed with this commit.
* Audio: Stop setting capture config options.
Since the device is being configured as a playback device, all capture
config options are unused and therefore need to not be set.
* Audio: Stop pre-silencing the miniaudio output buffer.
raylib already manually silences the output buffer prior to mixing so
there is no reason to have miniaudio also do it. It can therefore be
disabled via the device config to make data processing slightly more
efficient.
* Audio: Stop forcing fixed sized processing callbacks.
There is no requirement for raylib to have guaranteed fixed sized
audio processing. By disabling it, audio processing can be made more
efficient by not having to run the data through an internal intermediary
buffer.
* Audio: Make the period size (latency) configurable.
The default period size is 10ms, but this is inappropriate for certain
platforms so it is useful to be able to allow those platforms to
configure the period size as required.
* Audio: Fix documentation for pan.
The pan if -1..1, not 0..1.
* Audio: Remove use of ma_data_converter_get_required_input_frame_count().
This function is being removed from miniaudio. To make this work with
the current architecture of raylib it requires the use of a cache.
This commit implements a generic solution that works across all
AudioBuffer types (static, streams and callback based), but the static
case could be optimized to avoid the cache by incorporating the
functionality of ReadAudioBufferFramesInInternalFormat() into
ReadAudioBufferFramesInMixingFormat(). It would be unpractical to avoid
the cache with streams and callback-based AudioBuffers however so this
commit sticks with a generic solution.
* Audio: Correct usage of miniaudio's dynamic rate adjustment.
This affects pitch shifting. The output rate is being modified with
ma_data_converter_set_rate(), but then that value is being used in the
computation of the output rate the next time SetAudioBufferPitch() which
results in a cascade. The correct way to do this is to use an anchored
output rate as the basis for the calculation after pitch shifting. In
this case, it's the device's sample rate that acts as the anchor.
* Audio: Optimize memory usage for data conversion.
This reduces the per-AudioBuffer conversion cache from 256 PCM frames
down to 8.
* [rmodels] Added implementation of `UpdateModelAnimationBonesWithBlending()` function
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
* [rmodels] Added example for animation blending and fixed wrap issue for blend factor
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
* [rmodels] Updated build information for animation blending example
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
* [rmodels] Fixed typos in anmation blending example
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
* [rmodels] Updated blend function signature and added function to update verts from bones
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
* [rmodels] Updated documentation
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
* rlparser: update raylib_api.* by CI
* rlparser: update raylib_api.* by CI
---------
Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
Co-authored-by: Ray <raysan5@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Fix window scaling on Wayland with GLFW 3.4+ display scaling
GLFW 3.4 defaults GLFW_SCALE_FRAMEBUFFER to TRUE on all platforms,
causing framebuffer/window size mismatch on Wayland with display
scaling (content renders in a subset of the window, mouse coordinates
are wrong).
Three fixes:
- Disable GLFW_SCALE_FRAMEBUFFER on Wayland when FLAG_WINDOW_HIGHDPI
is not set, restoring 1:1 window-to-framebuffer mapping
- With FLAG_WINDOW_HIGHDPI, read actual framebuffer size from GLFW
instead of resizing the window (which double-scales on Wayland
where GLFW_SCALE_TO_MONITOR has no effect)
- Skip mouse coordinate scaling on Wayland since GLFW already reports
coordinates in logical (window) space
Tested on NixOS/Niri with GLFW 3.4 at 1x, 1.5x, and 2x scaling.
Fixes#5504
* Fix fullscreen and borderless windowed scaling on Wayland with HiDPI
ToggleFullscreen and ToggleBorderlessWindowed exit paths manually
scale screen size by DPI before passing to glfwSetWindowMonitor,
which double-scales on Wayland where GLFW_SCALE_FRAMEBUFFER already
handles it. Skip the manual resize on Wayland.
Also fix FramebufferSizeCallback fullscreen branch: on Wayland with
GLFW_SCALE_FRAMEBUFFER the framebuffer is still scaled in fullscreen,
so use the logical window size as screen size and derive screenScale
from the framebuffer/window ratio.
Fixes#5504
* Apply style fixes from code review: remove duplicate screenScale assignment, collapse single-statement ifs to one line, remove trailing periods from comments
* Fix out of bounds Memory read in Material.Maps by using the MATERIAL_MAP_SPECULAR define instead of the SHADER_LOG_SPECULAR enum
* Fix out of bounds Memory read in Material.Maps by using the MATERIAL_MAP_SPECULAR define instead of the SHADER_LOG_SPECULAR enum
* fixed typos preventing window from min/maxing
* fixed window style generation ignoring minimize precedence, causing errors in edge cases
* added maximize button on resizable windows
* fixed infinite loop when resizing the window manually
* activate window upon creation to set focus and show taskbar icon
* extended SanitizeFlags() to account for problematic resizing/mizing flag mixups
* update
* update
* stuff
* update
* move headerfile to root
* delete .h
* update ignore
* fix IsMouseButtonDown\Pressed\Released\Up will get randomly returned to true when the button code is outside the range of mouse button
* remove unessary macro
* refactor IsMouseButton*() early returns
- Use named fields in rlTranslatef and rlScalef instead of array literals
- Label implicit row-major to column-major transpose in MatrixToFloatV
- Update rlSetUniformMatrix to use rlMatrixToFloat convention
* LoadDirectoryFilesEx on not recursive loading count files
* Removed FilePathList.capacity
* Added security check in case of memory leak
* Fix stop loading paths early on recursive loading
* Fix count directories only if filter contains DIRECTORY_FILTER_TAG
* rlparser: update raylib_api.* by CI
* GetDirectoryFileCount() and GetDirectoryFileCountEx() made visible
* rlparser: update raylib_api.* by CI
* Added new file and directories filter tags
* Renamed `fileCount` in `ScanDirectoryFiles()` to `expectedFileCount`
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
[utils] was created long time ago, when [rcore] contained all the platforms code, the purpose of the file was exposing basic filesystem functionality across modules and also logging mechanism but many things have changed since then and there is no need to keep using this module.
- Logging system has been move to [rcore] module and macros are exposed through `config.h` to other modules
- File system functionality has also been centralized in [rcore] module that along the years it was already adding more and more file-system functions, now they are all in the same module
- Android specific code has been moved to `rcore_android.c`, it had no sense to have specific platform code in `utils`, [rcore] is responsible of all platform code.
* Improved touch input handling and multitouch support in drm platform
* revert
* made some fixes for the touch issue in drm platform
* updated touch input handling by adding multitouch support
* improved how it handles the multitouch
* added cleanup
* Remove touch last update tracking to simplify touch input handling
* improved multitouch support by tracking touch positions and IDs for each slot
* Better touch input handling
* Increase maximum touch points from 8 to 10 and enhance touchscreen prioritization logic
* Refactor touch input handling to use slot index as ID for stability and simplify touch clearing logic
* Improve touch input handling by activating slot 0 based on mouse click or touch events
* touch event handling to use tracking ID for unique touch identification
* Add multitouch detection to PollMouseEvents for improved touch handling
* Fix conditional formatting in PollMouseEvents for clarity
* Refactor conditional statements in PollMouseEvents and InitPlatform for improved readability
* Fix formatting in PollMouseEvents for improved readability
in android gesture system is not reporting GESTURE_NONE, specified in the issue https://github.com/raysan5/raylib/issues/5010 so, automatically GESTURE_SWIPE, TAP, DOUBLE_TAP, also will not be reported. in this commit it is fixed.
Considering multi-monitor and multi-ppi configurations
Fullscreen-exclusive scales to available display resolution, ignoring content scaling
Windowed-borderless scales to available logical resolution considering HighDPI **if requested**
- Changed GLTF_ANIMDELAY (17ms, ~58.82fps) to GLTF_FRAMERATE (60.0fps)
- Updated frameCount calculation: (animDuration * 60) instead of (animDuration * 1000 / 17)
- Updated time calculation: j / 60.0f instead of (j * 17) / 1000.0f
This fixes animation frame count misalignment when importing glTF models
exported at standard 60fps. Animations that were 27+ frames shorter than
expected on 1350-frame sequences will now import correctly.
* fix: set correct default axes for gamepads that are not connected
`glfwGetGamepadState` will set all gamepad state variables to 0.0 if required gamepad is not connected, but `RecordAutomationEvent()` inside rcore.c expects trigger axes to be -1.0f when gamepad is not connected. Since SDL and RGFW return -1.0f in such case, this change is aligning it with them
* updated comment in rcore_desktop_glfw.c
Tested on two monitors with different DPI configuration, for HigDPI enabled and not, including window resizing (with framebuffer resizing if required). Verified mouse coordinates follow the requested screen size.
Note that high-dpi awareness must be enabled by users and `CORE.Window.render` reports the scaled framebuffer size, while `CORE.Window.screen` reports the logical size.
`ToggleBorderlessWindow()` has also been reviewed to be consistent with scaling, if monitor physical display size is reported as 1920x1080 but there is a content scale of 1.5, then the borderless fullscreen window will be 1280x720, with the 1920x1080 framebuffer
This improvement is just a prove of concept, at this moment `PLATFORM_WEB` is limited in terms of software rendering by `GLFW` that only allows creating a WebGL canvas context with `glfwCreateWindow()`.
We can skip that call but then some GLFW functionality is not available (windowing, inputs). The best solution is replacing GLFW completely by a pure Emscripten implementation for `PLATFORM_WEB`.
Following raylib design, a warning log message is shown and program can continue execution.
Some early return checks have been added on most critical functions.
[rtext] Previous implementation checking `isGpuReady` cross-module variable is not needed any more, resulting in a more decoupled code, load failure is managed at rlgl level
* Make the comments on the camera 2d fields more clear about what space each one is in.
* rlparser: update raylib_api.* by CI
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Fix modulo bias in GetRandomValue(); implement rejection sampling for uniformity
* Replace do-while with for-loop in GetRandomValue rejection sampling
target already gets assigned by the clang macro it points to, overwriting it causes it to target linux instead of android, making it check for usr directories instead of the NDK's directories