* RGFW also requires RGBA8 images as window icons, as raylib already reports in raylib.h
* LibraryConfigurations.cmake: exchanged MATCHES -> STREQUAL in platform choosing if-statements
* WebRGFW: remapping mouse/touch position to canvas pixel coordinates
* fix 'typo'
* has to be done like that because of += in case of captured mouse
* [rcore_desktop_rgfw] [emscripten] fix typo
* RGFW also requires RGBA8 images as window icons, as raylib already reports in raylib.h
* LibraryConfigurations.cmake: exchanged MATCHES -> STREQUAL in platform choosing if-statements
* WebRGFW: remapping mouse/touch position to canvas pixel coordinates
* fix 'typo'
* has to be done like that because of += in case of captured mouse
* auto generates all combinations of blending factors
This adds a macro system that generate a function for each possible combination of blending factors, resulting in 11*11 functions, hence 121.
This then allows for only one indirection and function call instead of two previously (assuming the first call was inlined).
* rename dispatch tables for consistency
* change blend funcs validity check
Simplifies the validation of blend functions.
Can allow `SW_SRC_ALPHA_SATURATE` as dst factor, but hey
* disables blending when it requires alpha and there is none
* review immediate rendering functions and attribute layout
* prevent state changes during immediate record
* reduce number of op for each vertex push + review primitive struct
* simplified draw functions
* review `sw_vertex_t`
removes `float screen[2]`; each step stores the transformed coordinates in `float coord[4]`.
This also simplifies vertex interpolation during triangle rasterization.
* reduces unnecessary interpolation costs during triangle rasterization + cleanup
* extends the simd color conversion to more cases
* affine interpolation per blocks
* long side check for each triangle line
My mistake in a previous commit
* style tweaks
* select the read function on texture load
This removes the per-pixel switch; it's slightly more efficient on my hardware, but probably a poor prediction
Should remain profitable or at worst the same
* use optionnal LUT for uint8_t -> float conversion
* sets internal the number of vertices post-clipping and the epsilon clipping + a little cleanup
* moves color conversion to math part
* prevents sampling if it's a depth texture that is bound
Dropped the `11` relative to OpenGL 1.1 because latest `rlsw 1.5` also includes support for FBOs and could potentially implemented other higher level features in the feature, discerning from OpenGL 1.1 limitations
* review texture formats
Added support for `R3G3B2`, `R5G6B5`, `R4G4B4A4` and `R5G5B5A1`
Added depth formats
* use of textures for the framebuffer
- Framebuffers can now use all texture types that are already available.
- The 24-bit depth format has been removed as it is no longer needed.
- Framebuffer formats are still defined at compile time.
- The allocated texture size is now preserved, which avoids frequent reallocations when resizing framebuffers and will allow the use of `glTexSubImage2D`.
* review framebuffer blit/copy
This greatly simplifies the framebuffer blit/copy logic while now supporting all pixel formats. It is slightly slower in debug builds, but this path is mainly kept for compatibility anyway. The `copy_fast` version is still used for the "normal" cases when presenting to the screen.
* review pixel get/set
less ops for certain formats + fixes
* fix depth write
* texture read/write cleanup + tweaks
I made the pointers parameters `restrict` for reading/writing textures, which resulted in a slight improvement.
And I reviewed the `static inline` statements, which could potentially bias the compiler; no difference, but it's cleaner.
* style tweaks
* review uint8_t <-> float conversion
* added a reusable object pool system
will allow management of both textures and framebuffers
added support for `glTexSubImage2D`
added handling of 'GL_OUT_OF_MEMORY' errors
removed the default internal texture (unused)
* added FBO API + refactored rasterizer dispatch logic
* fix ndc projection + review presentation
and rename rlsw's resize/copy/blit
* add `glRenderbufferStorage` binding
+ tweaks and fixes
* fix quad sorting + simplify quad rasterization part
* fix line shaking issue
* support of `GL_DRAW_FRAMEBUFFER_BINDING`
* update rlgl - support of rlsw's framebuffers
* fix pixel origin in line rasterization
my bad, an oversight in my previous fix.
This offset should have been moved here rather than per pixel during truncation.
* style tweaks
* fix vla issue with msvc - fill depth / fill color
`SDL_GetTicks()` only has millisecond resolution so switched to
`SLD_GetPerformanceCounter()` combined with
`SDL_GetPerformanceFrequency()` which should allow more granular timing
Fix: remove intermediate variable
Remove second cast
* 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.