You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The upstream ppy/osu uses the official `ppy.osu.Framework` NuGet package. This fork replaces it with a git submodule pointing to a custom framework fork β enabling deep platform-level changes that aren't possible through the public API.
133
+
134
+
#### .NET 10 upgrade
135
+
136
+
The entire framework is upgraded from .NET 8 β **.NET 10** with C# 14 language features. All target frameworks are updated (`net10.0`, `net10.0-android`, `net10.0-ios`).
137
+
138
+
#### Audio latency reduction
139
+
140
+
The biggest audio change lives in the framework's `AudioManager`:
| AAudio backend | Not enabled |**Enabled** via `Bass.Configure(67, 1)`|
148
+
| Sample rate | 44100 Hz |**48000 Hz** (native rate for AAudio and CoreAudio) |
149
+
150
+
The `BassAudioMixer.Handle` property is made **public** so the Android Oboe bridge can access mixer handles directly instead of using fragile reflection.
151
+
152
+
#### Android Vulkan as primary renderer
153
+
154
+
In the framework's `GameHost`, the renderer order for Android is changed:
-`IOSGameHost` / `IOSWindow` β iOS host and Metal-backed window
173
+
- AOT compilation with Mono interpreter fallback
174
+
- Native framework references for BASS, FFmpeg, and Metal
175
+
- macOS-only framework stripping (removes ApplicationServices/Quartz from iOS linker)
176
+
177
+
#### Performance hot-path optimisations
178
+
179
+
Several commits eliminate allocations and reduce lock contention in the framework:
180
+
181
+
-**LINQ elimination** in `Dropdown.cs`, `FlowContainer.cs`, and shader pipelines β removed redundant enumerations that allocated on every keyboard event or layout pass
182
+
-**`System.Threading.Lock`** migration β replaced `lock(object)` with the modern `Lock` type in `RendererDisposalQueue`, `SampleStore`, `VeldridTexture`, `GLTexture`, and others for lower-overhead synchronisation
183
+
-**GL state thrashing reduction** β avoids redundant OpenGL state changes in the renderer
184
+
-**Texture upload pipeline** optimisations for faster asset loading on mobile
[Veldrid](https://github.com/veldrid/veldrid) is the cross-platform GPU abstraction layer used by osu-framework. Upstream ppy/osu uses it via a NuGet package (`ppy.Veldrid`). This fork replaces that with a git submodule containing a customised Veldrid with Android graphics support and performance improvements.
202
+
203
+
#### Android Vulkan rendering
204
+
205
+
The main reason this fork exists β full Vulkan support on Android:
206
+
207
+
-**`VkSurfaceUtil.cs`** β Creates Vulkan surfaces from `ANativeWindow` via `VK_KHR_android_surface`
208
+
-**`VkGraphicsDevice.cs`** β Detects and enables Android-specific Vulkan extensions
209
+
-**`AndroidRuntime.cs`** β P/Invoke bindings to `ANativeWindow_fromSurface()`, `ANativeWindow_setBuffersGeometry()`, `ANativeWindow_release()`
210
+
-**`SwapchainSource.cs`** β `AndroidSurfaceSwapchainSource` class for passing native windows to Vulkan
211
+
212
+
#### OpenGL ES support
213
+
214
+
For devices where Vulkan isn't available:
215
+
216
+
-**EGL bindings** (`EGLNative.cs`) β Complete EGL 1.4 API for OpenGL ES 2.0/3.0 context creation
217
+
-**`OpenGLGraphicsDevice.cs`** β `initializeANativeWindow()` for Android surface initialisation via EGL
0 commit comments