v1.8.7
Two-track release. Graphics/shaders: a live in-game shader editor with unsaved-change confirmation, bezel reflections now blurring into the CRT scanline/phosphor result for Famicom and RF displays, Slang preset grouping with SHA-256 stable IDs, a cached final-pass scaling flag, an overscan default that keeps the full frame visible in RGBA conversion, and a rendering performance pass. Library & TV Mode: box art display modes with a blurred-fill background cache, a new GenreGroupingDiagram with per-genre counts, a refreshed context-menu look for cards and list rows, clearer TV Mode settings copy across languages, and adjusted TV Mode tile/layout dimensions. Plus: a full Japanese UI translation.
Highlights
- Japanese localization: A full Japanese UI translation lands as
ja.json, wired into the language picker inGeneralSettingsViewand the Xcode build. The app now ships with English, Spanish, Portuguese, and Japanese. - Live in-game shader editor sidebar: From the game window, open a sidebar to live-edit shader parameters. Unsaved edits are guarded with a confirmation overlay, and parameter changes persist into the shader preset with SwiftUI state refreshing automatically.
- Bezel reflection blur: Bezel reflections blend
the reflected bezel into the scanline/phosphor resultof FamicomRF and RfDisplay for a more realistic CRT-on-flat-panel effect. New uniform parameters control bezel rounding, glow, and reflection blur; mask handling is more stable in the RF display. - Slang preset management & stable IDs: Presets are grouped on display, and name collisions are disambiguated by a SHA-256βderived stable preset ID. Discovery errors are handled and logged, and a cached
_finalPassIsAbsoluteflag drives aspect-ratio/viewport scaling without entering@MainActorcontext. - Overscan & aspect-ratio handling: The RGBA conversion path defaults overscan to zero so the full source image remains visible, and
MetalCoordinatorcaches system recognition for consistent aspect-ratio handling;XPCBridgeAdaptercaches the aspect ratio to cut synchronous XPC round trips. - Rendering performance pass: A generation-gated uniform cache in the RF decoder path avoids needless dictionary copies during gameplay;
CRTFilter.metalaligns the phosphor mask/scanlines to source pixels regardless of output upscale; audio resampling inStreamRecordingServiceusesUnsafeBufferPointer;GameTimeBarOverlayconnects its timers only when the overlay is visible; drawable alpha is reset after Slang renders to prevent transparency artifacts. - Box art display modes: A new display-mode setting plus integration into
GameCardView,GridCollectionView, andLibraryGridView, backed by a blurred-fill background image cache inImageCacheso cards render with a soft tinted backdrop derived from their own cover. - Genre grouping diagram & per-genre counts: New
GenreGroupingDiagramvisualizes genre settings;GenreManagerexposes counts andGenrePickerViewshows them. New labels and descriptions are added in en/es/pt. - Card/list-row context menu polish:
GameCardViewandGameListRowViewget a refreshed context-menu appearance and structure. - TV Mode copy & layout: TV Mode settings descriptions are rewritten for clarity and consistency across en/es/pt, and the TV Mode game tile and view layout dimensions are adjusted for better fit.
- 8-bit GameBoy shader cleanup: Uniform variables in
8bGameBoy.metalare renamed for consistency and clarity, with matching updates inShaderPreset,MetalCoordinator, andShaderUniforms. - RA badge prefetch logging: Removed debug logging for existing badges during the prefetch pass.
Detailed Changes
- feat(shader): implement live shader editor sidebar with unsaved changes confirmation β
StandaloneGameWindowControllerhosts the sidebar; parameters apply instantly; a confirmation overlay protects unsaved edits; preset handling refactored for seamless apply/persist; en/es/pt shader-key translations added - feat: implement bezel reflection blur for enhanced visual effects and optimize rich presence handling
- feat: enhance bezel reflection handling in
applyMaskAndBezelfor improved visual fidelity - feat: enhance bezel mask handling for improved visual fidelity and stability in the RF display
- feat: add support for bezel reflection in
RfDisplayandShaderUniformsβ new uniform parameters: bezel rounding, glow, reflection blur - Enhance Slang Compiler and Metal Coordinator for improved rendering β cached
_finalPassIsAbsoluteaccessed without@MainActor; aspect-ratio/viewport scaling strategies keyed off the preset's final pass type; final-pass state logged at activation; drawable alpha handling fix prevents transparency after Slang renders;SlangPresetDiscoveryServicetracks errors and disambiguates names via SHA-256 stable IDs - Enhance shader and rendering performance β generation-gated uniform cache for the RF decoder path in
EmulatorRunner;CRTFilter.metalaligns phosphor mask and scanlines to source pixels regardless of output upscale;FamicomRF.metal/RfDisplay.metalincorporate bezel reflection blur; cached aspect ratio inXPCBridgeAdapter;StreamRecordingServiceresamples audio withUnsafeBufferPointer;GameTimeBarOverlaymanages timer connections by overlay visibility;MetalCoordinatorcaches system recognition for aspect-ratio decisions - feat: enhance Slang preset management with grouping and improved display handling
- feat: adjust overscan setting to zero for improved visual output in RGBA conversion
- feat: add box art display mode options and integrate into library views β new display-mode options on
SystemInfo;GameCardView,GridCollectionView,LibraryGridViewupdated; en/es/pt keys added - feat: implement blurred fill image caching for box art display mode β
ImageCachegrows a blurred-fill background cache;GameCardViewuses it for soft tinted card backdrops - feat: add
GenreGroupingDiagramand enhance genre grouping settings with new labels and descriptions β new 315-line diagram view, wired intoGenreSettingsViewandSettingsCatalog; en/es/pt labels added - feat: add genre count functionality to
GenreManagerand integrate withGenrePickerViewβ per-genre counts surfaced in the picker and the grid view - feat: enhance context menu appearance in
GameCardViewandGameListRowView - feat: enhance TV Mode settings descriptions for clarity and consistency across languages β
TVModeMainSettingsViewrewrite; en/es/pt copy aligned - feat: adjust dimensions for TV Mode game tile and view layout β
TVModeGameTileandTVModeViewsizing pass - feat: rename shader uniform variables for consistency and clarity for 8-bit GameBoy shader β
8bGameBoy.metal,ShaderPreset,MetalCoordinator,ShaderUniformskept in sync - feat: remove debug logging for existing badges during the prefetching process β
RABadgeCacheService - feat: add full Japanese UI translation β
ja.json(2468 lines), wired into the language picker inGeneralSettingsViewand the Xcode resource build; the app now ships en/es/pt/ja - Refactor code structure for improved readability and maintainability
- Bump marketing version to 1.8.7 and build number to 30 across
project.yml, both Info.plists, anddocs/_config.yml