committed by
GitHub
17 changed files with 398 additions and 194 deletions
@ -0,0 +1,140 @@ |
|||
using System.Collections.Generic; |
|||
using Avalonia.OpenGL; |
|||
using Avalonia.Platform; |
|||
|
|||
namespace Avalonia; |
|||
|
|||
/// <summary>
|
|||
/// Represents the rendering mode for platform graphics.
|
|||
/// </summary>
|
|||
public enum Win32RenderingMode |
|||
{ |
|||
/// <summary>
|
|||
/// Avalonia is rendered into a framebuffer.
|
|||
/// </summary>
|
|||
Software = 1, |
|||
|
|||
/// <summary>
|
|||
/// Enables ANGLE EGL for Windows with GPU rendering.
|
|||
/// </summary>
|
|||
AngleEgl = 2, |
|||
|
|||
/// <summary>
|
|||
/// Avalonia would try to use native Widows OpenGL with GPU rendering.
|
|||
/// </summary>
|
|||
Wgl = 3 |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Represents the Win32 window composition mode.
|
|||
/// </summary>
|
|||
public enum Win32CompositionMode |
|||
{ |
|||
/// <summary>
|
|||
/// Render Avalonia to a texture inside the Windows.UI.Composition tree.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// Supported on Windows 10 build 17134 and above. Ignored on other versions.
|
|||
/// This is recommended option, as it allows window acrylic effects and high refresh rate rendering.<br/>
|
|||
/// Can only be applied with <see cref="Win32PlatformOptions.RenderingMode"/>=<see cref="Win32RenderingMode.AngleEgl"/>.
|
|||
/// </remarks>
|
|||
WinUIComposition = 1, |
|||
|
|||
// /// <summary>
|
|||
// /// Render Avalonia to a texture inside the DirectComposition tree.
|
|||
// /// </summary>
|
|||
// /// <remarks>
|
|||
// /// Supported on Windows 8 and above. Ignored on other versions.<br/>
|
|||
// /// Can only be applied with <see cref="Win32PlatformOptions.RenderingMode"/>=<see cref="Win32RenderingMode.AngleEgl"/>.
|
|||
// /// </remarks>
|
|||
// DirectComposition = 2,
|
|||
|
|||
/// <summary>
|
|||
/// When <see cref="LowLatencyDxgiSwapChain"/> is active, renders Avalonia through a low-latency Dxgi Swapchain.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// Requires Feature Level 11_3 to be active, Windows 8.1+ Any Subversion.
|
|||
/// This is only recommended if low input latency is desirable, and there is no need for the transparency
|
|||
/// and styling / blurring offered by <see cref="WinUIComposition"/>.<br/>
|
|||
/// Can only be applied with <see cref="Win32PlatformOptions.RenderingMode"/>=<see cref="Win32RenderingMode.AngleEgl"/>.
|
|||
/// </remarks>
|
|||
LowLatencyDxgiSwapChain = 3, |
|||
|
|||
/// <summary>
|
|||
/// The window renders to a redirection surface.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// This option is kept only for compatibility with older systems. Some Avalonia features might not work.
|
|||
/// </remarks>
|
|||
RedirectionSurface, |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Platform-specific options which apply to Windows.
|
|||
/// </summary>
|
|||
public class Win32PlatformOptions |
|||
{ |
|||
/// <summary>
|
|||
/// Embeds popups to the window when set to true. The default value is false.
|
|||
/// </summary>
|
|||
public bool OverlayPopups { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets Avalonia rendering modes with fallbacks.
|
|||
/// The first element in the array has the highest priority.
|
|||
/// The default value is: <see cref="Win32RenderingMode.AngleEgl"/>, <see cref="Win32RenderingMode.Software"/>.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// If application should work on as wide range of devices as possible, at least add <see cref="Win32RenderingMode.Software"/> as a fallback value.
|
|||
/// </remarks>
|
|||
/// <exception cref="System.InvalidOperationException">Thrown if no values were matched.</exception>
|
|||
public IReadOnlyList<Win32RenderingMode> RenderingMode { get; set; } = new[] |
|||
{ |
|||
Win32RenderingMode.AngleEgl, Win32RenderingMode.Software |
|||
}; |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets Avalonia composition modes with fallbacks.
|
|||
/// The first element in the array has the highest priority.
|
|||
/// The default value is: <see cref="Win32CompositionMode.WinUIComposition"/>, <see cref="Win32CompositionMode.RedirectionSurface"/>.
|
|||
/// </summary>
|
|||
/// <remarks>
|
|||
/// If application should work on as wide range of devices as possible, at least add <see cref="Win32CompositionMode.RedirectionSurface"/> as a fallback value.
|
|||
/// </remarks>
|
|||
/// <exception cref="System.InvalidOperationException">Thrown if no values were matched.</exception>
|
|||
public IReadOnlyList<Win32CompositionMode> CompositionMode { get; set; } = new[] |
|||
{ |
|||
Win32CompositionMode.WinUIComposition, Win32CompositionMode.RedirectionSurface |
|||
}; |
|||
|
|||
/// <summary>
|
|||
/// When <see cref="CompositionMode"/> is set to <see cref="Win32CompositionMode.WinUIComposition"/>, create rounded corner blur brushes
|
|||
/// If set to null the brushes will be created using default settings (sharp corners)
|
|||
/// This can be useful when you need a rounded-corner blurred Windows 10 app, or borderless Windows 11 app.
|
|||
/// </summary>
|
|||
public float? WinUICompositionBackdropCornerRadius { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Render directly on the UI thread instead of using a dedicated render thread.
|
|||
/// Only applicable if <see cref="CompositionMode"/> is set to <see cref="Win32CompositionMode.RedirectionSurface"/>.
|
|||
/// This setting is only recommended for interop with systems that must render on the UI thread, such as WPF.
|
|||
/// This setting is false by default.
|
|||
/// </summary>
|
|||
public bool ShouldRenderOnUIThread { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Windows OpenGL profiles used when <see cref="RenderingMode"/> is set to <see cref="Win32RenderingMode.Wgl"/>.
|
|||
/// This setting is 4.0 and 3.2 by default.
|
|||
/// </summary>
|
|||
public IList<GlVersion> WglProfiles { get; set; } = new List<GlVersion> |
|||
{ |
|||
new(GlProfileType.OpenGL, 4, 0), new(GlProfileType.OpenGL, 3, 2) |
|||
}; |
|||
|
|||
/// <summary>
|
|||
/// Provides a way to use a custom-implemented graphics context such as a custom ISkiaGpu.
|
|||
/// When this property set <see cref="RenderingMode"/> is ignored
|
|||
/// and <see cref="CompositionMode"/> only accepts null or <see cref="Win32CompositionMode.RedirectionSurface"/>.
|
|||
/// </summary>
|
|||
public IPlatformGraphics? CustomPlatformGraphics { get; set; } |
|||
} |
|||
Loading…
Reference in new issue