mirror of
https://github.com/par274/sharpemu.git
synced 2026-08-09 11:15:41 +08:00
Sdl backend (#670)
* [audio] added sdl audio backend and in-tree atrac9 decoder * [input] replaced per-platform pad readers with sdl gamepad input * [video] added sdl window and host display plumbing * [gui] added host display options and per-game render settings * [bink] synced host movie playback to the guest audio clock * [cpu] hooked windows write faults into guest image tracking * [perf] added guest and render profiling, reserved host cpu lanes * [kernel] fixed stale pthread mutex handle alias * [host] wired the sdl session, save-data paths and project references * [audio] hoisted ajm trace stackalloc out of its loop * [video] Add guest image sync setting * [build] Strip native symbols * reuse
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// Copyright (C) 2026 SharpEmu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
namespace SharpEmu.Libs.VideoOut;
|
||||
|
||||
using SharpEmu.Libs.Gpu.Metal;
|
||||
|
||||
public enum HostWindowMode
|
||||
{
|
||||
Windowed,
|
||||
Borderless,
|
||||
ExclusiveFullscreen,
|
||||
}
|
||||
|
||||
public enum HostScalingMode
|
||||
{
|
||||
Fit,
|
||||
Cover,
|
||||
Stretch,
|
||||
Integer,
|
||||
}
|
||||
|
||||
public enum HostHdrMode
|
||||
{
|
||||
Auto,
|
||||
On,
|
||||
Off,
|
||||
}
|
||||
|
||||
public sealed record HostVideoOptions
|
||||
{
|
||||
public static HostVideoOptions Default { get; } = new();
|
||||
|
||||
public HostWindowMode WindowMode { get; init; } = HostWindowMode.Windowed;
|
||||
|
||||
public HostScalingMode ScalingMode { get; init; } = HostScalingMode.Fit;
|
||||
|
||||
public int Width { get; init; } = 1920;
|
||||
|
||||
public int Height { get; init; } = 1080;
|
||||
|
||||
public int DisplayIndex { get; init; }
|
||||
|
||||
public int RefreshRate { get; init; }
|
||||
|
||||
public bool VSync { get; init; } = true;
|
||||
|
||||
public HostHdrMode HdrMode { get; init; } = HostHdrMode.Auto;
|
||||
|
||||
public HostVideoOptions Normalize() => this with
|
||||
{
|
||||
Width = Math.Clamp(Width, 640, 16384),
|
||||
Height = Math.Clamp(Height, 360, 16384),
|
||||
DisplayIndex = Math.Max(0, DisplayIndex),
|
||||
RefreshRate = Math.Clamp(RefreshRate, 0, 1000),
|
||||
HdrMode = Enum.IsDefined(HdrMode) ? HdrMode : HostHdrMode.Auto,
|
||||
};
|
||||
}
|
||||
|
||||
public static class HostVideoHost
|
||||
{
|
||||
public static bool TryConfigureVideo(HostVideoOptions options)
|
||||
{
|
||||
var normalized = options.Normalize();
|
||||
return VulkanVideoPresenter.TryConfigureVideo(normalized) &
|
||||
MetalVideoPresenter.TryConfigureVideo(normalized);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user