diff --git a/docs/bink2-bridge.md b/docs/bink2-bridge.md index 8fb7112..e46bddf 100644 --- a/docs/bink2-bridge.md +++ b/docs/bink2-bridge.md @@ -9,12 +9,12 @@ Demon's Souls plays Bink 2 (.bk2) files through a Bink implementation linked directly into eboot.bin. It does not use libSceVideodec, therefore an HLE video decoder cannot observe or replace those frames. -SharpEmu observes successful guest .bk2 opens and, when a Bink decoder is -available, presents its decoded BGRA frames at the normal guest-flip boundary. -This preserves the game's own timing and lets the host Vulkan presenter display -the movie without trying to execute the PS5-specific Bink GPU decode path. +By default, SharpEmu leaves Bink decoding to the implementation linked into +the game (`SHARPEMU_BINK_MODE=guest`). -The default path decodes by calling FFmpeg's own C API directly from managed +Set `SHARPEMU_BINK_MODE=native` to use the optional host bridge. It observes +guest .bk2 opens and presents decoded frames at the guest-flip boundary. The +host path decodes by calling FFmpeg's C API directly from managed code (`src/SharpEmu.Libs/Bink/FfmpegNativeBinkFrameSource.cs`, via the [FFmpeg.AutoGen](https://github.com/Ruslan-B/FFmpeg.AutoGen) P/Invoke bindings) against a custom FFmpeg build @@ -24,26 +24,13 @@ libraries come from. No proprietary RAD SDK is needed to build or run SharpEmu, and there is no C/C++ code of SharpEmu's own involved in decoding -- SharpEmu.CLI.csproj only downloads a prebuilt release archive. -Set `SHARPEMU_BINK_MODE=guest` to leave decoding to the Bink implementation -statically linked into the game instead. Set `skip` only when explicitly -testing a title whose cinematics are optional. +Set `SHARPEMU_BINK_MODE=skip` only when explicitly testing a title whose +cinematics are optional. Set SHARPEMU_BINK_MODE=dummy to retain the open and show a built-in, non-decoded placeholder frame. This requires no SDK, but is a visual diagnostic only; it does not decode the movie or alter its game logic. -SHARPEMU_BINK_MODE=native is equivalent to the default and mainly useful for -being explicit about it. - -The experimental `SHARPEMU_BINK_MODE=ffmpeg` override is unrelated to the -default path above: instead of calling into FFmpeg in-process, it spawns a -standalone `ffmpeg` executable and reads raw frames from its stdout -(`src/SharpEmu.Libs/Bink/FfmpegBinkFrameSource.cs`). SharpEmu searches -`SHARPEMU_FFMPEG_PATH`, the executable directory, its `ffmpeg` subdirectory, -and then `PATH` (plus a couple of common Homebrew paths on macOS). That -`ffmpeg` build must contain a Bink 2 decoder itself; a stock FFmpeg build that -only recognizes the Bink container is not sufficient. Most users want the -default `native` mode instead, which always has Bink 2 support since it's -built against `ffmpeg-core` specifically. +`SHARPEMU_BINK_MODE=ffmpeg` is an alias for `native`. ## Supplying the FFmpeg libraries diff --git a/docs/sharpemu-gui-undocumented-env-vars.md b/docs/sharpemu-gui-undocumented-env-vars.md index 1e56915..f62ca8c 100644 --- a/docs/sharpemu-gui-undocumented-env-vars.md +++ b/docs/sharpemu-gui-undocumented-env-vars.md @@ -55,7 +55,7 @@ These variables change how the emulator operates. | `SHARPEMU_HOLD_FIRST_FLIP_MS` | number | Stops the thread that submits the flip for this number of milliseconds on one guest flip. The range is 0 to 60000 and the default is 0 (off). `SHARPEMU_HOLD_FLIP_NUMBER` selects the flip. | `VideoOutExports.cs` | | `SHARPEMU_HOLD_FLIP_NUMBER` | number | Selects the guest flip that `SHARPEMU_HOLD_FIRST_FLIP_MS` holds. The minimum is 1 and the default is 1 (the first flip). | `VideoOutExports.cs` | | `SHARPEMU_IGNORE_GUEST_EXCEPTIONS` | `1` | `sceKernelRaiseException` returns OK and does not call the installed guest exception handler. Default is off. | `KernelExceptionCompatExports.cs` | -| `SHARPEMU_IMPORT_LOOP_GUARD_SECONDS` | number | Sets the time that an import call pattern can repeat before the import loop guard forces a guest exit. The default is 5 seconds. The value 0 turns the guard off. | `DirectExecutionBackend.Imports.cs`, `DirectExecutionBackend.cs` | +| `SHARPEMU_IMPORT_LOOP_GUARD_SECONDS` | number | When `SHARPEMU_DISABLE_IMPORT_LOOP_GUARD=0` enables the guard, sets how long an import call pattern can repeat before a guest exit. The default is 5 seconds; 0 turns the guard off. | `DirectExecutionBackend.Imports.cs`, `DirectExecutionBackend.cs` | | `SHARPEMU_NET_REDIRECT` | IP address | Sends guest `connect` and `sendto` traffic to this host IP address. When unset, the emulator permits outbound guest traffic only to loopback addresses. If the value is not a valid IP address, the emulator keeps the original destination and permits the traffic. | `KernelSocketCompatExports.cs` | | `SHARPEMU_NO_FLIP_PACING` | `1` | Stops flip pacing. The emulator completes each flip immediately and does not wait for the display refresh time. The default is off. | `VideoOutExports.cs`, `VideoOutExports.FlipRequests.cs` | | `SHARPEMU_OVERLAY` | `0` | Hides the performance overlay at start, even when the video options have the overlay on. All other values use the video options. | `PerfOverlay.cs`, `PerformanceOverlayState.cs` | diff --git a/src/SharpEmu.Core/Cpu/Native/DirectExecutionBackend.cs b/src/SharpEmu.Core/Cpu/Native/DirectExecutionBackend.cs index 34fa023..596a148 100644 --- a/src/SharpEmu.Core/Cpu/Native/DirectExecutionBackend.cs +++ b/src/SharpEmu.Core/Cpu/Native/DirectExecutionBackend.cs @@ -1203,9 +1203,9 @@ public sealed unsafe partial class DirectExecutionBackend : INativeCpuBackend, I Environment.GetEnvironmentVariable("SHARPEMU_PROBE_IMPORT_RET_ADDRESS")); _probeImportReturnAddressCount = 0; _importFilter = Environment.GetEnvironmentVariable("SHARPEMU_LOG_IMPORT_FILTER"); - _disableImportLoopGuard = string.Equals( + _disableImportLoopGuard = !string.Equals( Environment.GetEnvironmentVariable("SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"), - "1", + "0", StringComparison.Ordinal); _importLoopGuardSeconds = GetImportLoopGuardSeconds(); _entryReturnSentinelRip = 0uL; diff --git a/src/SharpEmu.GUI/GuiSettings.cs b/src/SharpEmu.GUI/GuiSettings.cs index 52a04b2..1e48bba 100644 --- a/src/SharpEmu.GUI/GuiSettings.cs +++ b/src/SharpEmu.GUI/GuiSettings.cs @@ -82,12 +82,12 @@ public sealed class GuiSettings public bool OverlayEnabled { get; set; } = true; public string OverlayCorner { get; set; } = "TopRight"; - public string OverlayMode { get; set; } = "Full"; + public string OverlayMode { get; set; } = "TitleBar"; /// Names of SHARPEMU_* switches set to "1" in the emulator's environment at launch. - public List EnvironmentToggles { get; set; } = ["SHARPEMU_WRITABLE_APP0"]; + public List EnvironmentToggles { get; set; } = ["SHARPEMU_WRITABLE_APP0", "SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"]; - public string BinkPlaybackMode { get; set; } = "Host"; + public string BinkPlaybackMode { get; set; } = "Guest"; /// Internal render resolution scale (1.0 = native, 0.5 = half). public double RenderResolutionScale { get; set; } = 1.0; @@ -131,7 +131,7 @@ public sealed class GuiSettings settings.GameFolders = FilterNullOrEmpty(settings.GameFolders); settings.ExcludedGames = FilterNullOrEmpty(settings.ExcludedGames); - settings.EnvironmentToggles = FilterNullOrEmpty(settings.EnvironmentToggles ?? ["SHARPEMU_WRITABLE_APP0"]); + settings.EnvironmentToggles = FilterNullOrEmpty(settings.EnvironmentToggles ?? ["SHARPEMU_WRITABLE_APP0", "SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"]); settings.LogLevel ??= "Info"; settings.Language ??= "en"; var legacyProfile = settings.EnvironmentToggles @@ -186,9 +186,9 @@ public sealed class GuiSettings settings.Resolution = NormalizeResolution(settings.Resolution); settings.ScalingMode = NormalizeChoice(settings.ScalingMode, "Fit", "Cover", "Stretch", "Integer"); settings.HdrMode = NormalizeChoice(settings.HdrMode, "Auto", "On", "Off"); - settings.BinkPlaybackMode = NormalizeChoice(settings.BinkPlaybackMode, "Host", "Guest", "Skip"); + settings.BinkPlaybackMode = NormalizeChoice(settings.BinkPlaybackMode, "Guest", "Host", "Skip"); settings.OverlayCorner = NormalizeChoice(settings.OverlayCorner, "TopRight", "TopLeft", "BottomRight", "BottomLeft"); - settings.OverlayMode = NormalizeChoice(settings.OverlayMode, "Full", "Minimal", "TitleBar"); + settings.OverlayMode = NormalizeChoice(settings.OverlayMode, "TitleBar", "Full", "Minimal"); settings.DisplayIndex = Math.Max(0, settings.DisplayIndex); settings.RefreshRate = Math.Clamp(settings.RefreshRate, 0, 1000); settings.EmbeddedConsoleHeight = NormalizeConsoleSize(settings.EmbeddedConsoleHeight, 240, 120); diff --git a/src/SharpEmu.GUI/Languages/ar.json b/src/SharpEmu.GUI/Languages/ar.json index 7fb3f3a..7c7c318 100644 --- a/src/SharpEmu.GUI/Languages/ar.json +++ b/src/SharpEmu.GUI/Languages/ar.json @@ -236,7 +236,7 @@ "Options.Hdr.Desc": "استخدام HDR عندما تدعمه الشاشة المحددة وواجهة الرسومات. يعود الوضع التلقائي إلى SDR.", "Options.Hdr.Auto": "تلقائي", "Options.Env.BinkPlayback.Label": "تشغيل فيديو Bink", - "Options.Env.BinkPlayback.Desc": "يقوم Host بتشغيل فيديوهات Bink عبر جسر FFmpeg، لكن قد تظهر مشكلات في بعض الألعاب.\nيستخدم Guest وحدة فك الترميز الخاصة بمحرك اللعبة، والتي يدعمها SharpEmu حاليًا بشكل جزئي فقط.\nيتخطى Skip فيديوهات Bink، مما قد يجعل التطوير أسهل.", + "Options.Env.BinkPlayback.Desc": "يقوم Host بتشغيل فيديوهات Bink عبر جسر FFmpeg، لكن قد تظهر مشكلات في بعض الألعاب.\nيستخدم Guest وحدة فك الترميز الخاصة بمحرك اللعبة.\nيتخطى Skip فيديوهات Bink، مما قد يجعل التطوير أسهل.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "تخطي" diff --git a/src/SharpEmu.GUI/Languages/az.json b/src/SharpEmu.GUI/Languages/az.json index bbaf5b2..8a418d1 100644 --- a/src/SharpEmu.GUI/Languages/az.json +++ b/src/SharpEmu.GUI/Languages/az.json @@ -91,7 +91,7 @@ "Options.Hdr.Desc": "Seçilmiş ekran və qrafik alt sistem dəstəklədikdə HDR istifadə edin. Avtomatik rejimdə dəstək yoxdursa, SDR istifadə olunur.", "Options.Hdr.Auto": "Avtomatik", "Options.Env.BinkPlayback.Label": "Bink video oynadılması", - "Options.Env.BinkPlayback.Desc": "Host Bink videolarını FFmpeg körpüsü vasitəsilə oynadır, lakin bəzi oyunlarda problemlər yarana bilər.\nGuest oyunun öz dekoderindən istifadə edir; SharpEmu hazırda bunu yalnız qismən dəstəkləyir.\nSkip Bink videolarını ötürür və bu, inkişaf prosesini asanlaşdıra bilər.", + "Options.Env.BinkPlayback.Desc": "Host Bink videolarını FFmpeg körpüsü vasitəsilə oynadır, lakin bəzi oyunlarda problemlər yarana bilər.\nGuest oyunun öz dekoderindən istifadə edir.\nSkip Bink videolarını ötürür və bu, inkişaf prosesini asanlaşdıra bilər.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Skip", diff --git a/src/SharpEmu.GUI/Languages/br.json b/src/SharpEmu.GUI/Languages/br.json index b4e0e08..964ebbf 100644 --- a/src/SharpEmu.GUI/Languages/br.json +++ b/src/SharpEmu.GUI/Languages/br.json @@ -237,7 +237,7 @@ "Options.Hdr.Desc": "Usa HDR quando a tela selecionada e o backend gráfico oferecem suporte. O modo automático retorna ao SDR.", "Options.Hdr.Auto": "Automático", "Options.Env.BinkPlayback.Label": "Reprodução de vídeo Bink", - "Options.Env.BinkPlayback.Desc": "Host reproduz vídeos Bink pela ponte FFmpeg, mas alguns jogos podem apresentar problemas.\nGuest usa o decodificador do próprio motor do jogo, que o SharpEmu atualmente suporta apenas parcialmente.\nSkip ignora os vídeos Bink, o que pode facilitar o desenvolvimento.", + "Options.Env.BinkPlayback.Desc": "Host reproduz vídeos Bink pela ponte FFmpeg, mas alguns jogos podem apresentar problemas.\nGuest usa o decodificador do próprio motor do jogo.\nSkip ignora os vídeos Bink, o que pode facilitar o desenvolvimento.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Ignorar" diff --git a/src/SharpEmu.GUI/Languages/de.json b/src/SharpEmu.GUI/Languages/de.json index 4e5e83f..e4b6b76 100644 --- a/src/SharpEmu.GUI/Languages/de.json +++ b/src/SharpEmu.GUI/Languages/de.json @@ -236,7 +236,7 @@ "Options.Hdr.Desc": "HDR verwenden, wenn die ausgewählte Anzeige und das Grafik-Backend es unterstützen. Automatisch fällt auf SDR zurück.", "Options.Hdr.Auto": "Automatisch", "Options.Env.BinkPlayback.Label": "Bink-Videowiedergabe", - "Options.Env.BinkPlayback.Desc": "Host spielt Bink-Videos über die FFmpeg-Brücke ab, bei einigen Spielen können jedoch Probleme auftreten.\nGuest verwendet den spieleigenen Decoder, den SharpEmu derzeit nur teilweise unterstützt.\nSkip überspringt Bink-Videos, was die Entwicklung erleichtern kann.", + "Options.Env.BinkPlayback.Desc": "Host spielt Bink-Videos über die FFmpeg-Brücke ab, bei einigen Spielen können jedoch Probleme auftreten.\nGuest verwendet den spieleigenen Decoder.\nSkip überspringt Bink-Videos, was die Entwicklung erleichtern kann.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Überspringen" diff --git a/src/SharpEmu.GUI/Languages/dk.json b/src/SharpEmu.GUI/Languages/dk.json index 13a6654..b10d989 100644 --- a/src/SharpEmu.GUI/Languages/dk.json +++ b/src/SharpEmu.GUI/Languages/dk.json @@ -236,7 +236,7 @@ "Options.Hdr.Desc": "Brug HDR, når den valgte skærm og grafik-backend understøtter det. Automatisk falder tilbage til SDR.", "Options.Hdr.Auto": "Automatisk", "Options.Env.BinkPlayback.Label": "Bink-videoafspilning", - "Options.Env.BinkPlayback.Desc": "Host afspiller Bink-videoer via FFmpeg-broen, men nogle spil kan opleve problemer.\nGuest bruger spilmotorens egen dekoder, som SharpEmu i øjeblikket kun understøtter delvist.\nSkip springer Bink-videoer over, hvilket kan gøre udviklingen nemmere.", + "Options.Env.BinkPlayback.Desc": "Host afspiller Bink-videoer via FFmpeg-broen, men nogle spil kan opleve problemer.\nGuest bruger spilmotorens egen dekoder.\nSkip springer Bink-videoer over, hvilket kan gøre udviklingen nemmere.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Spring over" diff --git a/src/SharpEmu.GUI/Languages/ee.json b/src/SharpEmu.GUI/Languages/ee.json index 48af79d..c6cef57 100644 --- a/src/SharpEmu.GUI/Languages/ee.json +++ b/src/SharpEmu.GUI/Languages/ee.json @@ -102,7 +102,7 @@ "Options.Hdr.Desc": "Kasuta HDR-i, kui valitud kuvar ja graafikaliides seda toetavad. Automaatrežiim lülitub tagasi SDR-ile.", "Options.Hdr.Auto": "Automaatne", "Options.Env.BinkPlayback.Label": "Bink-video taasesitus", - "Options.Env.BinkPlayback.Desc": "Host esitab Bink-videoid FFmpegi silla kaudu, kuid mõnes mängus võib esineda probleeme.\nGuest kasutab mängumootori enda dekoodrit, mida SharpEmu praegu ainult osaliselt toetab.\nSkip jätab Bink-videod vahele, mis võib arendust lihtsustada.", + "Options.Env.BinkPlayback.Desc": "Host esitab Bink-videoid FFmpegi silla kaudu, kuid mõnes mängus võib esineda probleeme.\nGuest kasutab mängumootori enda dekoodrit.\nSkip jätab Bink-videod vahele, mis võib arendust lihtsustada.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Jäta vahele", diff --git a/src/SharpEmu.GUI/Languages/en.json b/src/SharpEmu.GUI/Languages/en.json index 57aa6dc..cedc742 100644 --- a/src/SharpEmu.GUI/Languages/en.json +++ b/src/SharpEmu.GUI/Languages/en.json @@ -102,7 +102,7 @@ "Options.Hdr.Desc": "Use HDR when the selected display and graphics backend support it. Auto falls back to SDR.", "Options.Hdr.Auto": "Auto", "Options.Env.BinkPlayback.Label": "Bink video playback", - "Options.Env.BinkPlayback.Desc": "Host plays Bink videos through the FFmpeg bridge, but some games may have issues.\nGuest uses the game engine's own decoder, which SharpEmu currently supports only partially.\nSkip skips Bink videos, which can make development easier.", + "Options.Env.BinkPlayback.Desc": "Host plays Bink videos through the FFmpeg bridge, but some games may have issues.\nGuest uses the game engine's own decoder.\nSkip skips Bink videos, which can make development easier.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Skip", diff --git a/src/SharpEmu.GUI/Languages/es.json b/src/SharpEmu.GUI/Languages/es.json index ed9c052..ed8abdb 100644 --- a/src/SharpEmu.GUI/Languages/es.json +++ b/src/SharpEmu.GUI/Languages/es.json @@ -237,7 +237,7 @@ "Options.Hdr.Desc": "Usa HDR cuando la pantalla seleccionada y el backend gráfico sean compatibles. El modo automático vuelve a SDR.", "Options.Hdr.Auto": "Automático", "Options.Env.BinkPlayback.Label": "Reproducción de vídeo Bink", - "Options.Env.BinkPlayback.Desc": "Host reproduce los vídeos Bink mediante el puente FFmpeg, aunque algunos juegos pueden presentar problemas.\nGuest usa el decodificador propio del motor del juego, que SharpEmu actualmente solo admite de forma parcial.\nSkip omite los vídeos Bink, lo que puede facilitar el desarrollo.", + "Options.Env.BinkPlayback.Desc": "Host reproduce los vídeos Bink mediante el puente FFmpeg, aunque algunos juegos pueden presentar problemas.\nGuest usa el decodificador propio del motor del juego.\nSkip omite los vídeos Bink, lo que puede facilitar el desarrollo.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Omitir" diff --git a/src/SharpEmu.GUI/Languages/fr.json b/src/SharpEmu.GUI/Languages/fr.json index 6ec4a2e..0c425e2 100644 --- a/src/SharpEmu.GUI/Languages/fr.json +++ b/src/SharpEmu.GUI/Languages/fr.json @@ -237,7 +237,7 @@ "Options.Hdr.Desc": "Utiliser le HDR lorsque l’écran sélectionné et le backend graphique le prennent en charge. Le mode automatique revient au SDR.", "Options.Hdr.Auto": "Automatique", "Options.Env.BinkPlayback.Label": "Lecture vidéo Bink", - "Options.Env.BinkPlayback.Desc": "Host lit les vidéos Bink via le pont FFmpeg, mais certains jeux peuvent rencontrer des problèmes.\nGuest utilise le décodeur propre au moteur du jeu, que SharpEmu ne prend actuellement en charge que partiellement.\nSkip ignore les vidéos Bink, ce qui peut faciliter le développement.", + "Options.Env.BinkPlayback.Desc": "Host lit les vidéos Bink via le pont FFmpeg, mais certains jeux peuvent rencontrer des problèmes.\nGuest utilise le décodeur propre au moteur du jeu.\nSkip ignore les vidéos Bink, ce qui peut faciliter le développement.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Ignorer" diff --git a/src/SharpEmu.GUI/Languages/hu.json b/src/SharpEmu.GUI/Languages/hu.json index c502b28..af24a81 100644 --- a/src/SharpEmu.GUI/Languages/hu.json +++ b/src/SharpEmu.GUI/Languages/hu.json @@ -237,7 +237,7 @@ "Options.Hdr.Desc": "HDR használata, ha a kiválasztott kijelző és grafikus backend támogatja. Az automatikus mód SDR-re vált vissza.", "Options.Hdr.Auto": "Automatikus", "Options.Env.BinkPlayback.Label": "Bink videólejátszás", - "Options.Env.BinkPlayback.Desc": "A Host az FFmpeg hídon keresztül játssza le a Bink videókat, de egyes játékoknál problémák jelentkezhetnek.\nA Guest a játékmotor saját dekóderét használja, amelyet a SharpEmu jelenleg csak részben támogat.\nA Skip kihagyja a Bink videókat, ami megkönnyítheti a fejlesztést.", + "Options.Env.BinkPlayback.Desc": "A Host az FFmpeg hídon keresztül játssza le a Bink videókat, de egyes játékoknál problémák jelentkezhetnek.\nA Guest a játékmotor saját dekóderét használja.\nA Skip kihagyja a Bink videókat, ami megkönnyítheti a fejlesztést.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Kihagyás" diff --git a/src/SharpEmu.GUI/Languages/it.json b/src/SharpEmu.GUI/Languages/it.json index 551a3de..97a6885 100644 --- a/src/SharpEmu.GUI/Languages/it.json +++ b/src/SharpEmu.GUI/Languages/it.json @@ -241,7 +241,7 @@ "Options.Hdr.Desc": "Usa HDR quando lo schermo selezionato e il backend grafico lo supportano. La modalità automatica torna a SDR.", "Options.Hdr.Auto": "Automatico", "Options.Env.BinkPlayback.Label": "Riproduzione video Bink", - "Options.Env.BinkPlayback.Desc": "Host riproduce i video Bink tramite il bridge FFmpeg, ma alcuni giochi potrebbero avere problemi.\nGuest usa il decoder del motore di gioco, che SharpEmu attualmente supporta solo in parte.\nSkip salta i video Bink, facilitando lo sviluppo.", + "Options.Env.BinkPlayback.Desc": "Host riproduce i video Bink tramite il bridge FFmpeg, ma alcuni giochi potrebbero avere problemi.\nGuest usa il decoder del motore di gioco.\nSkip salta i video Bink, facilitando lo sviluppo.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Salta" diff --git a/src/SharpEmu.GUI/Languages/ja.json b/src/SharpEmu.GUI/Languages/ja.json index d1abed8..697da9d 100644 --- a/src/SharpEmu.GUI/Languages/ja.json +++ b/src/SharpEmu.GUI/Languages/ja.json @@ -236,7 +236,7 @@ "Options.Hdr.Desc": "選択したディスプレイとグラフィックスバックエンドが対応している場合にHDRを使用します。自動ではSDRにフォールバックします。", "Options.Hdr.Auto": "自動", "Options.Env.BinkPlayback.Label": "Bink 動画再生", - "Options.Env.BinkPlayback.Desc": "Host は FFmpeg ブリッジ経由で Bink 動画を再生しますが、一部のゲームで問題が発生する場合があります。\nGuest はゲームエンジン独自のデコーダーを使用しますが、SharpEmu は現在これを部分的にしかサポートしていません。\nSkip は Bink 動画をスキップし、開発を容易にする場合があります。", + "Options.Env.BinkPlayback.Desc": "Host は FFmpeg ブリッジ経由で Bink 動画を再生しますが、一部のゲームで問題が発生する場合があります。\nGuest はゲームエンジン独自のデコーダーを使用します。\nSkip は Bink 動画をスキップし、開発を容易にする場合があります。", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "スキップ" diff --git a/src/SharpEmu.GUI/Languages/ko.json b/src/SharpEmu.GUI/Languages/ko.json index bde79fd..443677a 100644 --- a/src/SharpEmu.GUI/Languages/ko.json +++ b/src/SharpEmu.GUI/Languages/ko.json @@ -236,7 +236,7 @@ "Options.Hdr.Desc": "선택한 디스플레이와 그래픽 백엔드가 지원하는 경우 HDR을 사용합니다. 자동 모드는 SDR로 대체됩니다.", "Options.Hdr.Auto": "자동", "Options.Env.BinkPlayback.Label": "Bink 비디오 재생", - "Options.Env.BinkPlayback.Desc": "Host는 FFmpeg 브리지를 통해 Bink 비디오를 재생하지만 일부 게임에서 문제가 발생할 수 있습니다.\nGuest는 게임 엔진 자체 디코더를 사용하며, SharpEmu는 현재 이를 부분적으로만 지원합니다.\nSkip은 Bink 비디오를 건너뛰어 개발을 더 쉽게 할 수 있습니다.", + "Options.Env.BinkPlayback.Desc": "Host는 FFmpeg 브리지를 통해 Bink 비디오를 재생하지만 일부 게임에서 문제가 발생할 수 있습니다.\nGuest는 게임 엔진 자체 디코더를 사용합니다.\nSkip은 Bink 비디오를 건너뛰어 개발을 더 쉽게 할 수 있습니다.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "건너뛰기" diff --git a/src/SharpEmu.GUI/Languages/nl.json b/src/SharpEmu.GUI/Languages/nl.json index e2a607e..0c83373 100644 --- a/src/SharpEmu.GUI/Languages/nl.json +++ b/src/SharpEmu.GUI/Languages/nl.json @@ -236,7 +236,7 @@ "Options.Hdr.Desc": "Gebruik HDR wanneer het geselecteerde beeldscherm en de grafische backend dit ondersteunen. Automatisch valt terug op SDR.", "Options.Hdr.Auto": "Automatisch", "Options.Env.BinkPlayback.Label": "Bink-video afspelen", - "Options.Env.BinkPlayback.Desc": "Host speelt Bink-video's af via de FFmpeg-brug, maar sommige games kunnen problemen hebben.\nGuest gebruikt de eigen decoder van de game-engine, die SharpEmu momenteel slechts gedeeltelijk ondersteunt.\nSkip slaat Bink-video's over, wat de ontwikkeling kan vergemakkelijken.", + "Options.Env.BinkPlayback.Desc": "Host speelt Bink-video's af via de FFmpeg-brug, maar sommige games kunnen problemen hebben.\nGuest gebruikt de eigen decoder van de game-engine.\nSkip slaat Bink-video's over, wat de ontwikkeling kan vergemakkelijken.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Overslaan" diff --git a/src/SharpEmu.GUI/Languages/pl.json b/src/SharpEmu.GUI/Languages/pl.json index e1b7b40..f15bb64 100644 --- a/src/SharpEmu.GUI/Languages/pl.json +++ b/src/SharpEmu.GUI/Languages/pl.json @@ -102,7 +102,7 @@ "Options.Hdr.Desc": "Używaj HDR, gdy wybrany wyświetlacz i backend graficzny to obsługują. Automatyczny przełącza na SDR.", "Options.Hdr.Auto": "Automatyczny", "Options.Env.BinkPlayback.Label": "Odtwarzanie wideo Bink", - "Options.Env.BinkPlayback.Desc": "Host odtwarza filmy Bink przez most FFmpeg, ale w niektórych grach mogą wystąpić problemy.\nGuest używa dekodera silnika gry, który SharpEmu obecnie obsługuje tylko częściowo.\nSkip pomija filmy Bink, co może ułatwić rozwój.", + "Options.Env.BinkPlayback.Desc": "Host odtwarza filmy Bink przez most FFmpeg, ale w niektórych grach mogą wystąpić problemy.\nGuest używa dekodera silnika gry.\nSkip pomija filmy Bink, co może ułatwić rozwój.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Pomiń", diff --git a/src/SharpEmu.GUI/Languages/pt.json b/src/SharpEmu.GUI/Languages/pt.json index 1c32822..27f1d15 100644 --- a/src/SharpEmu.GUI/Languages/pt.json +++ b/src/SharpEmu.GUI/Languages/pt.json @@ -237,7 +237,7 @@ "Options.Hdr.Desc": "Utiliza HDR quando o ecrã selecionado e o backend gráfico o suportam. O modo automático regressa a SDR.", "Options.Hdr.Auto": "Automático", "Options.Env.BinkPlayback.Label": "Reprodução de vídeo Bink", - "Options.Env.BinkPlayback.Desc": "Host reproduz vídeos Bink pela ponte FFmpeg, mas alguns jogos podem apresentar problemas.\nGuest usa o descodificador do próprio motor do jogo, que o SharpEmu atualmente suporta apenas parcialmente.\nSkip ignora os vídeos Bink, o que pode facilitar o desenvolvimento.", + "Options.Env.BinkPlayback.Desc": "Host reproduz vídeos Bink pela ponte FFmpeg, mas alguns jogos podem apresentar problemas.\nGuest usa o descodificador do próprio motor do jogo.\nSkip ignora os vídeos Bink, o que pode facilitar o desenvolvimento.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Ignorar" diff --git a/src/SharpEmu.GUI/Languages/ru.json b/src/SharpEmu.GUI/Languages/ru.json index fd11033..7bbd4e8 100644 --- a/src/SharpEmu.GUI/Languages/ru.json +++ b/src/SharpEmu.GUI/Languages/ru.json @@ -98,7 +98,7 @@ "Options.Hdr.Desc": "Использовать HDR, если выбранный монитор и графический бэкенд его поддерживают. Автоматический режим при необходимости переключается на SDR.", "Options.Hdr.Auto": "Авто", "Options.Env.BinkPlayback.Label": "Воспроизведение видео Bink", - "Options.Env.BinkPlayback.Desc": "Host воспроизводит видео Bink через мост FFmpeg, однако в некоторых играх могут возникать проблемы.\nGuest использует собственный декодер игрового движка, который SharpEmu сейчас поддерживает лишь частично.\nSkip пропускает видео Bink, что может упростить разработку.", + "Options.Env.BinkPlayback.Desc": "Host воспроизводит видео Bink через мост FFmpeg, однако в некоторых играх могут возникать проблемы.\nGuest использует собственный декодер игрового движка.\nSkip пропускает видео Bink, что может упростить разработку.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Пропустить", diff --git a/src/SharpEmu.GUI/Languages/tr.json b/src/SharpEmu.GUI/Languages/tr.json index 7ab007c..6135c15 100644 --- a/src/SharpEmu.GUI/Languages/tr.json +++ b/src/SharpEmu.GUI/Languages/tr.json @@ -240,7 +240,7 @@ "Options.Scaling.Integer": "Tam sayı", "Options.Hdr.Auto": "Otomatik", "Options.Env.BinkPlayback.Label": "Bink video oynatma", - "Options.Env.BinkPlayback.Desc": "Host, Bink videolarını FFmpeg köprüsüyle oynatır ancak bazı oyunlarda sorunlarla karşılaşabilir.\nGuest, oyun motorunun kendi kod çözücüsünü kullanır ancak SharpEmu bunu şu anda yalnızca kısmen desteklemektedir.\nSkip, Bink videolarını atlar; bu, geliştirmeyi kolaylaştırabilir.", + "Options.Env.BinkPlayback.Desc": "Host, Bink videolarını FFmpeg köprüsüyle oynatır ancak bazı oyunlarda sorunlarla karşılaşabilir.\nGuest, oyun motorunun kendi kod çözücüsünü kullanır.\nSkip, Bink videolarını atlar; bu, geliştirmeyi kolaylaştırabilir.", "Options.Env.BinkPlayback.Host": "Host (FFmpeg)", "Options.Env.BinkPlayback.Guest": "Guest", "Options.Env.BinkPlayback.Skip": "Atla" diff --git a/src/SharpEmu.GUI/MainWindow.GameOptions.cs b/src/SharpEmu.GUI/MainWindow.GameOptions.cs index ca09cc1..2f42710 100644 --- a/src/SharpEmu.GUI/MainWindow.GameOptions.cs +++ b/src/SharpEmu.GUI/MainWindow.GameOptions.cs @@ -218,7 +218,7 @@ public partial class MainWindow "Fit"); GameVSyncToggle.IsChecked = effective.VSync; GameOverlayEnabledToggle.IsChecked = effective.OverlayEnabled; - GameOverlayModeBox.SelectedItem = FindChoice(_overlayModeChoices, effective.OverlayMode, "Full"); + GameOverlayModeBox.SelectedItem = FindChoice(_overlayModeChoices, effective.OverlayMode, "TitleBar"); GameOverlayCornerBox.SelectedItem = FindChoice(_overlayCornerChoices, effective.OverlayCorner, "TopRight"); GameHdrModeBox.SelectedItem = FindChoice( _hdrModeChoices, @@ -285,7 +285,7 @@ public partial class MainWindow VSync = GameVSyncToggle.IsChecked == true, HdrMode = SelectedComboText(GameHdrModeBox, "Auto"), OverlayEnabled = GameOverlayEnabledToggle.IsChecked == true, - OverlayMode = SelectedComboText(GameOverlayModeBox, "Full"), + OverlayMode = SelectedComboText(GameOverlayModeBox, "TitleBar"), OverlayCorner = SelectedComboText(GameOverlayCornerBox, "TopRight"), EnvironmentToggles = BuildGameEnvironmentEntries(), CustomEnvironmentVariables = PerGameSettings.Load(_gameSettingsTitleId)?.CustomEnvironmentVariables, diff --git a/src/SharpEmu.GUI/MainWindow.axaml.cs b/src/SharpEmu.GUI/MainWindow.axaml.cs index 3275da8..9a23de4 100644 --- a/src/SharpEmu.GUI/MainWindow.axaml.cs +++ b/src/SharpEmu.GUI/MainWindow.axaml.cs @@ -327,7 +327,7 @@ public partial class MainWindow : Window VSyncToggle.IsCheckedChanged += (_, _) => _settings.VSync = VSyncToggle.IsChecked == true; HdrModeBox.SelectionChanged += (_, _) => _settings.HdrMode = SelectedComboText(HdrModeBox, "Auto"); OverlayEnabledToggle.IsCheckedChanged += (_, _) => _settings.OverlayEnabled = OverlayEnabledToggle.IsChecked == true; - OverlayModeBox.SelectionChanged += (_, _) => _settings.OverlayMode = SelectedComboText(OverlayModeBox, "Full"); + OverlayModeBox.SelectionChanged += (_, _) => _settings.OverlayMode = SelectedComboText(OverlayModeBox, "TitleBar"); OverlayCornerBox.SelectionChanged += (_, _) => _settings.OverlayCorner = SelectedComboText(OverlayCornerBox, "TopRight"); UpdateButton.Click += async (_, _) => await OnUpdateButtonAsync(); SelectLogFilePathButton.Click += async (_, _) => await SelectLogFilePathAsync(); @@ -344,7 +344,7 @@ public partial class MainWindow : Window EnvWritableApp0Toggle.IsCheckedChanged += (_, _) => SetEnvironmentToggle("SHARPEMU_WRITABLE_APP0", EnvWritableApp0Toggle.IsChecked == true); BinkPlaybackBox.SelectionChanged += (_, _) => - _settings.BinkPlaybackMode = SelectedComboText(BinkPlaybackBox, "Host"); + _settings.BinkPlaybackMode = SelectedComboText(BinkPlaybackBox, "Guest"); EnvVkValidationToggle.IsCheckedChanged += (_, _) => SetEnvironmentToggle("SHARPEMU_VK_VALIDATION", EnvVkValidationToggle.IsChecked == true); EnvDumpSpirvToggle.IsCheckedChanged += (_, _) => @@ -2545,6 +2545,11 @@ public partial class MainWindow : Window _appliedEnvironmentVariables.Add(StrictComputeSettings.VariableName); _appliedEnvironmentVariables.Add(DefaultProfileEnvironmentName); + // An absent switch now enables the guard opt-out by default; send 0 for a disabled GUI toggle. + Environment.SetEnvironmentVariable("SHARPEMU_DISABLE_IMPORT_LOOP_GUARD", + effective.EnvironmentToggles.Contains("SHARPEMU_DISABLE_IMPORT_LOOP_GUARD") ? "1" : "0"); + _appliedEnvironmentVariables.Add("SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"); + Environment.SetEnvironmentVariable( BinkModeEnvironmentName, _settings.BinkPlaybackMode switch diff --git a/src/SharpEmu.Libs/Media/HostMovieBridge.cs b/src/SharpEmu.Libs/Media/HostMovieBridge.cs index c72a143..27d7678 100644 --- a/src/SharpEmu.Libs/Media/HostMovieBridge.cs +++ b/src/SharpEmu.Libs/Media/HostMovieBridge.cs @@ -283,11 +283,7 @@ internal static class HostMovieBridge return MovieMode.Native; } - // Native is the default: FfmpegVideoDecoder.TryOpen degrades gracefully - // (falls back to the guest's own decode, logging one informational line) - // if the FFmpeg libraries SharpEmu.CLI.csproj downloads next to the - // executable are genuinely unavailable, so defaulting to it is safe. - return MovieMode.Native; + return MovieMode.Guest; } private static void AttachDummyMovieLocked(string hostPath) diff --git a/src/SharpEmu.Libs/VideoOut/HostVideoOptions.cs b/src/SharpEmu.Libs/VideoOut/HostVideoOptions.cs index a8e553b..6ef7fb0 100644 --- a/src/SharpEmu.Libs/VideoOut/HostVideoOptions.cs +++ b/src/SharpEmu.Libs/VideoOut/HostVideoOptions.cs @@ -64,7 +64,7 @@ public sealed record HostVideoOptions public bool OverlayEnabled { get; init; } = true; public PerformanceOverlayCorner OverlayCorner { get; init; } = PerformanceOverlayCorner.TopRight; - public PerformanceOverlayMode OverlayMode { get; init; } = PerformanceOverlayMode.Full; + public PerformanceOverlayMode OverlayMode { get; init; } = PerformanceOverlayMode.TitleBar; public HostVideoOptions Normalize() => this with { @@ -74,7 +74,7 @@ public sealed record HostVideoOptions RefreshRate = Math.Clamp(RefreshRate, 0, 1000), HdrMode = Enum.IsDefined(HdrMode) ? HdrMode : HostHdrMode.Auto, OverlayCorner = Enum.IsDefined(OverlayCorner) ? OverlayCorner : PerformanceOverlayCorner.TopRight, - OverlayMode = Enum.IsDefined(OverlayMode) ? OverlayMode : PerformanceOverlayMode.Full, + OverlayMode = Enum.IsDefined(OverlayMode) ? OverlayMode : PerformanceOverlayMode.TitleBar, }; } diff --git a/tests/SharpEmu.Libs.Tests/GUI/GuiSettingsTests.cs b/tests/SharpEmu.Libs.Tests/GUI/GuiSettingsTests.cs index 90205e6..21e9923 100644 --- a/tests/SharpEmu.Libs.Tests/GUI/GuiSettingsTests.cs +++ b/tests/SharpEmu.Libs.Tests/GUI/GuiSettingsTests.cs @@ -9,12 +9,15 @@ namespace SharpEmu.Libs.Tests.GUI; public sealed class GuiSettingsTests { [Fact] - public void NewSettingsEnableWritableApp0WithoutCrashCapture() + public void NewSettingsEnableWritableApp0AndDisableImportLoopGuard() { var settings = new GuiSettings(); - Assert.Equal(["SHARPEMU_WRITABLE_APP0"], settings.EnvironmentToggles); + Assert.Equal(["SHARPEMU_WRITABLE_APP0", "SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"], settings.EnvironmentToggles); + Assert.True(settings.OverlayEnabled); + Assert.Equal("TitleBar", settings.OverlayMode); + Assert.Equal("Guest", settings.BinkPlaybackMode); settings.EnvironmentToggles.Clear(); - Assert.Equal(["SHARPEMU_WRITABLE_APP0"], new GuiSettings().EnvironmentToggles); + Assert.Equal(["SHARPEMU_WRITABLE_APP0", "SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"], new GuiSettings().EnvironmentToggles); } [Theory] @@ -24,10 +27,18 @@ public sealed class GuiSettingsTests { var settings = GuiSettings.NormalizeFromJson(json); Assert.DoesNotContain("SHARPEMU_WRITABLE_APP0", settings.EnvironmentToggles); + Assert.DoesNotContain("SHARPEMU_DISABLE_IMPORT_LOOP_GUARD", settings.EnvironmentToggles); var restored = GuiSettings.NormalizeFromJson(System.Text.Json.JsonSerializer.Serialize(settings)); Assert.Equal(settings.EnvironmentToggles, restored.EnvironmentToggles); } + [Fact] + public void SavedHostPlaybackChoiceSurvivesNewGuestDefault() + { + var settings = GuiSettings.NormalizeFromJson("""{"BinkPlaybackMode":"Host"}"""); + Assert.Equal("Host", settings.BinkPlaybackMode); + } + [Theory] [InlineData(false)] [InlineData(true)] @@ -98,7 +109,7 @@ public sealed class GuiSettingsTests Assert.Equal("1525606762248540221", settings.DiscordClientId); Assert.Empty(settings.GameFolders); Assert.Empty(settings.ExcludedGames); - Assert.Equal(["SHARPEMU_WRITABLE_APP0"], settings.EnvironmentToggles); + Assert.Equal(["SHARPEMU_WRITABLE_APP0", "SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"], settings.EnvironmentToggles); Assert.Equal("Windowed", settings.WindowMode); Assert.Equal("1920x1080", settings.Resolution); Assert.Equal("Fit", settings.ScalingMode); @@ -289,7 +300,7 @@ public sealed class GuiSettingsTests Assert.Equal("1525606762248540221", settings.DiscordClientId); Assert.Empty(settings.GameFolders); Assert.Empty(settings.ExcludedGames); - Assert.Equal(["SHARPEMU_WRITABLE_APP0"], settings.EnvironmentToggles); + Assert.Equal(["SHARPEMU_WRITABLE_APP0", "SHARPEMU_DISABLE_IMPORT_LOOP_GUARD"], settings.EnvironmentToggles); } [Fact] diff --git a/tests/SharpEmu.Libs.Tests/GUI/OverlaySettingsTests.cs b/tests/SharpEmu.Libs.Tests/GUI/OverlaySettingsTests.cs index 8cb443c..6b26d24 100644 --- a/tests/SharpEmu.Libs.Tests/GUI/OverlaySettingsTests.cs +++ b/tests/SharpEmu.Libs.Tests/GUI/OverlaySettingsTests.cs @@ -10,11 +10,11 @@ namespace SharpEmu.Libs.Tests.GUI; public sealed class OverlaySettingsTests { [Fact] - public void MissingSettingsKeepTheExistingFullTopRightOverlay() + public void MissingSettingsUseTitleBarOverlay() { var settings = GuiSettings.NormalizeFromJson("{}"); Assert.True(settings.OverlayEnabled); - Assert.Equal("Full", settings.OverlayMode); + Assert.Equal("TitleBar", settings.OverlayMode); Assert.Equal("TopRight", settings.OverlayCorner); } @@ -36,7 +36,7 @@ public sealed class OverlaySettingsTests var settings = GuiSettings.NormalizeFromJson(""" {"OverlayMode":null,"OverlayCorner":"somewhere"} """); - Assert.Equal("Full", settings.OverlayMode); + Assert.Equal("TitleBar", settings.OverlayMode); Assert.Equal("TopRight", settings.OverlayCorner); } diff --git a/tests/SharpEmu.Libs.Tests/GUI/PerformanceProfileSettingsTests.cs b/tests/SharpEmu.Libs.Tests/GUI/PerformanceProfileSettingsTests.cs index a785c92..cc8c76c 100644 --- a/tests/SharpEmu.Libs.Tests/GUI/PerformanceProfileSettingsTests.cs +++ b/tests/SharpEmu.Libs.Tests/GUI/PerformanceProfileSettingsTests.cs @@ -55,9 +55,9 @@ public sealed class PerformanceProfileSettingsTests public void GameProfileChoiceSurvivesReloadWithoutChangingGlobalSettings(string variable, bool globalEnabled, bool gameEnabled) { var global = new GuiSettings(); + var game = new PerGameSettings { EnvironmentToggles = [.. global.EnvironmentToggles] }; if (globalEnabled) global.EnvironmentToggles.Add(variable); - var game = new PerGameSettings { EnvironmentToggles = ["SHARPEMU_WRITABLE_APP0"] }; if (gameEnabled) game.EnvironmentToggles.Add(variable); diff --git a/tests/SharpEmu.Libs.Tests/VideoOut/PerformanceOverlayTests.cs b/tests/SharpEmu.Libs.Tests/VideoOut/PerformanceOverlayTests.cs index 2d51955..7ba48e1 100644 --- a/tests/SharpEmu.Libs.Tests/VideoOut/PerformanceOverlayTests.cs +++ b/tests/SharpEmu.Libs.Tests/VideoOut/PerformanceOverlayTests.cs @@ -16,7 +16,7 @@ public sealed class PerformanceOverlayTests public void FullPanelUsesSelectedCorner(PerformanceOverlayCorner corner, int left, int top) { var state = new PerformanceOverlayState(); - state.Configure(new HostVideoOptions { OverlayCorner = corner }, false); + state.Configure(new HostVideoOptions { OverlayCorner = corner, OverlayMode = PerformanceOverlayMode.Full }, false); Assert.Equal( new OverlayRectangle(left, top, PerfOverlay.PanelWidth, PerfOverlay.PanelHeight), @@ -31,7 +31,7 @@ public sealed class PerformanceOverlayTests public void SmallSurfaceClipsPanelInsideItsBounds(PerformanceOverlayCorner corner) { var state = new PerformanceOverlayState(); - state.Configure(new HostVideoOptions { OverlayCorner = corner }, false); + state.Configure(new HostVideoOptions { OverlayCorner = corner, OverlayMode = PerformanceOverlayMode.Full }, false); foreach (var size in new[] { 0, 1, 12, 24, 100, 4096 }) { var rectangle = state.GetRectangle(size, size); @@ -71,9 +71,10 @@ public sealed class PerformanceOverlayTests { var state = new PerformanceOverlayState(); state.Configure(HostVideoOptions.Default, true); - Assert.False(state.DrawOnScreen); + Assert.False(state.Enabled); state.Toggle(); - Assert.True(state.DrawOnScreen); + Assert.True(state.Enabled); + Assert.Equal(PerformanceOverlayMode.TitleBar, state.Mode); } [Theory] @@ -149,7 +150,7 @@ public sealed class PerformanceOverlayTests OverlayEnabled = false, }.Normalize(); Assert.Equal(PerformanceOverlayCorner.TopRight, options.OverlayCorner); - Assert.Equal(PerformanceOverlayMode.Full, options.OverlayMode); + Assert.Equal(PerformanceOverlayMode.TitleBar, options.OverlayMode); Assert.False(options.OverlayEnabled); }