mirror of
https://github.com/par274/sharpemu.git
synced 2026-08-09 11:15:41 +08:00
2b6bd5a532
* [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
69 lines
1.5 KiB
C#
69 lines
1.5 KiB
C#
// 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);
|
|
}
|
|
}
|