Skip to content

Releases: ppy/osu-framework

2023.904.0

05 Sep 06:39
fc5cd7e
Compare
Choose a tag to compare

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

Full Changelog: 2023.823.0...2023.904.0

2023.823.0

23 Aug 11:11
091a670
Compare
Choose a tag to compare

What's Changed

Full Changelog: 2023.822.0...2023.823.0

2023.822.0

22 Aug 03:34
036defa
Compare
Choose a tag to compare

What's Changed

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 to ScreenSpaceScissorArea.
  • MaskingRect renamed to MaskingArea
  • ToScissorSpace added. If ScreenSpaceScissorArea truly represents a screen-space area, set this to Matrix3.Identity, otherwise set it to convert vertex coordinate inputs to the appropriate coordinate space of ScreenSpaceScissorArea.

New Contributors

Full Changelog: 2023.817.0...2023.822.0

2023.817.0

17 Aug 07:11
55f4a81
Compare
Choose a tag to compare

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

15 Aug 05:24
3365c86
Compare
Choose a tag to compare

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

12 Aug 08:51
6bc3e8f
Compare
Choose a tag to compare

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

11 Aug 12:34
04dfe11
Compare
Choose a tag to compare

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

31 Jul 22:12
e301001
Compare
Choose a tag to compare

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 to UnbindAllBindables by @peppy in #5956
  • Fix BindableList being unsafe for complex bind trees by @peppy in #5954
  • Fix ModelBackedDrawable potentially crashing on badly timed null by @peppy in #5955

Full Changelog: 2023.724.0...2023.801.0

2023.724.0

24 Jul 07:30
ddc2488
Compare
Choose a tag to compare

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

20 Jul 11:02
07236ad
Compare
Choose a tag to compare

What's Changed

  • Add option to avoid automatically running the first step in TestScenes 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