Releases: ppy/osu-framework
2023.904.0
Breaking Changes
Storage.Move()
will overwrite file at target destination if present
Previously it would fail if a file already existed at the target destination. Overwriting is usually the preferred outcome.
What's Changed
- Free AVIOContext and IO buffer by @FreezyLemon in #5982
- Remove libavfilter where possible by @FreezyLemon in #5980
- Change behaviour of
Storage.Move
to overwrite existing by default by @peppy in #5984 - Fix crash on minimising from non-native fullscreen resolutions by @smoogipoo in #5983
- Update native libraries by @peppy in #5985
Full Changelog: 2023.823.0...2023.904.0
2023.823.0
What's Changed
- Add D3D11VA hwaccel type by @FreezyLemon in #5976
- VideoSprite: Test all supported containers, codecs by @FreezyLemon in #5977
- Add a cache busting mechanism to the shader compilation cache by @smoogipoo in #5978
- Remove now unnecessary blur shader workaround by @smoogipoo in #5979
Full Changelog: 2023.822.0...2023.823.0
2023.822.0
What's Changed
- Add DeltaDash to the list of projects using the framework by @minisbett in #5969
- Allow gravity in RigidBodySimulation to be adjustable by @hwabis in #5972
- Use SSBOs for bindless masking by @smoogipoo in #5952
- Use RectangleF for masking scissor by @smoogipoo in #5960
- Implement window flashing by @ItsShamed in #5970
- Bump Android target SDK version to 33 by @bdach in #5973
- Fix
KeyBindingContainer
propagating release events to removed drawables by @bdach in #5975
Breaking changes
Maskable vertex input layout has changed
Vertices which want to use the built-in VertexShaderDescriptor.TEXTURE
fragment shader, or the sh_Masking.h
particle, will need to adjust the vertex input slightly:
+ #include "Internal/sh_MaskingInfo.h"
layout(location = 0) in vec2 m_Position;
+ layout(location = 1) in int m_MaskingIndex;
+ layout(location = 5) flat out int v_MaskingIndex;
+ layout(location = 6) out highp vec2 v_ScissorPosition;
void main(void)
{
+ InitMasking(m_MaskingIndex);
// Transform from screen space to masking space.
- highp vec3 maskingPos = g_ToMaskingSpace * vec3(m_Position, 1.0);
+ highp vec4 maskingPos = g_MaskingInfo.ToMaskingSpace * vec4(m_Position, 1.0, 0.0);
v_MaskingPosition = maskingPos.xy / maskingPos.z;
+ // Transform from screen space to scissor space.
+ highp vec4 scissorPos = g_MaskingInfo.ToScissorSpace * vec4(m_Position, 1.0, 0.0);
+ v_ScissorPosition = scissorPos.xy / scissorPos.z;
+ v_MaskingIndex = m_MaskingIndex;
gl_Position = g_ProjMatrix * vec4(m_Position, 1.0, 1.0);
}
Likewise, the C# definition must also be updated to write the m_MaskingIndex
input, and be constructed with an IRenderer
:
[StructLayout(LayoutKind.Sequential)]
public struct MyCustomVertex : IEquatable<MyCustomVertex>, IVertex
{
[VertexMember(2, VertexAttribPointerType.Float)]
public Vector2 Position;
+ [VertexMember(1, VertexAttribPointerType.Int)]
+ private readonly int maskingIndex;
+ public MyCustomVertex(IRenderer renderer)
+ {
+ this = default;
+ maskingIndex = renderer.CurrentMaskingIndex;
+ }
public readonly bool Equals(MyCustomVertex other) =>
Position.Equals(other.Position)
+ && maskingIndex == other.maskingIndex;
}
Non-masking fragment shaders must use non-masking vertex shaders
Any usages of VertexShaderDescriptor.TEXTURE_2
as a vertex shader in-combination with a non-masking fragment shader (i.e. one that does not use the built-in sh_Masking.h
particle), should be updated to use VertexShaderDescriptor.TEXTURE_2_NO_MASKING
instead.
IRenderer.PushScissorOffset()
/IRenderer.PopScissorOffset()
have been removed
The way masking applies scissor has changed such that this no longer has any use.
MaskingInfo
layout has changed
ScreenSpaceAABB
renamed toScreenSpaceScissorArea
.MaskingRect
renamed toMaskingArea
ToScissorSpace
added. IfScreenSpaceScissorArea
truly represents a screen-space area, set this toMatrix3.Identity
, otherwise set it to convert vertex coordinate inputs to the appropriate coordinate space ofScreenSpaceScissorArea
.
New Contributors
- @minisbett made their first contribution in #5969
- @ItsShamed made their first contribution in #5970
Full Changelog: 2023.817.0...2023.822.0
2023.817.0
What's Changed
- Remove
DepthWrappingVertex<T>
by @smoogipoo in #5943 - Add support for shader storage buffer objects (SSBOs) by @smoogipoo in #5950
- Implement popover hinting by @bdach in #5967
- Make
KeyBindingContainer.Prioritised
work for positional input too by @bdach in #5966
Breaking changes
TexturedVertex2D
must be initialised with an IRenderer
.
The default constructor for this type has been obsoleted and will now generate a compiler error.
Full Changelog: 2023.815.0...2023.817.0
2023.815.0
What's Changed
- Fix
DrawableAudioWrapper
unapplying adjustments between removal from hierarchy and disposal by @bdach in #5965
Full Changelog: 2023.812.0...2023.815.0
2023.812.0
What's Changed
- Fix crash on tablet stylus touch when stylus is over inactive area and mouse confine is off by @bdach in #5964
Full Changelog: 2023.811.0...2023.812.0
2023.811.0
What's Changed
- Include type name in long-running exception output by @peppy in #5957
- Disallow
SafeWriteStream
logic from running on finalisation by @bdach in #5958 - Fix potential user-facing error when same shader is compiled in parallel by @peppy in #5961
- Update workarounds file to fix iOS AOT build issues via command line by @frenzibyte in #5962
Full Changelog: 2023.801.0...2023.811.0
2023.801.0
What's Changed
- Stop
OnDrag
,OnDragEnd
,OnMouseUp
etc. from firing on removed / disposed drawables by @peppy in #5557 - Use better method for
NSString
conversion to avoid potentially pasting garbage content from clipboard by @frenzibyte in #5942 - Fix CI test results not working by @Susko3 in #5947
- Fix integer vertex atributes being cast to floats by @smoogipoo in #5944
- Prevent re-entrancy into
VertexBatch.Draw()
by @smoogipoo in #5948 - Refactor global UBO binding by @smoogipoo in #5949
- Fix
DrawableAudioWrapper
deadlock by moving unbind toUnbindAllBindables
by @peppy in #5956 - Fix
BindableList
being unsafe for complex bind trees by @peppy in #5954 - Fix
ModelBackedDrawable
potentially crashing on badly timednull
by @peppy in #5955
Full Changelog: 2023.724.0...2023.801.0
2023.724.0
What's Changed
- Improve vertex upload performance significantly on iOS by @frenzibyte in #5931
- Fix building iOS projects in AOT mode via command line not working by @frenzibyte in #5940
- Fix window size not being stored to config during resize by @Susko3 in #5937
- Fix custom interpolation functions potentially causing SIGSEGV on iOS by @frenzibyte in #5941
- Remove most locking overhead in
TripleBuffer
by @peppy in #5915
Full Changelog: 2023.720.0...2023.724.0
2023.720.0
What's Changed
- Add option to avoid automatically running the first step in
TestScene
s by @Susko3 in #5935 - Change source generators to only run for release builds by @peppy in #5938
Breaking Changes
Source generators will now only run on release builds
As we continue to add more source generators, we've seen increases in compile-time overheads, with local testing showing over 2x compile times with source generators turned on.
osu!framework source generators are made to optimise builds at runtime (mostly by removing reflection overhead). As such, it doesn't make sense to run these for debug releases as they are basically custom release-targeting optimisations.
This should not result in a noticeable change in runtime performance during debug, but will reduce compilation times by over 50% in most cases. This is valuable during debug as the most common case is frequently building / hot reloading for quick iteration.
Full Changelog: 2023.716.0...2023.720.0