From 3b8eba3bb14ca17472effc04d13e521daa40719b Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Sat, 4 May 2024 18:59:29 +0800 Subject: [PATCH] code style --- .../Snap.Hutao/ViewModel/TestViewModel.cs | 54 ++++++++++--------- src/Snap.Hutao/Snap.Hutao/Win32/D3D11.cs | 17 ++++++ src/Snap.Hutao/Snap.Hutao/Win32/D3D12.cs | 29 ---------- .../Graphics/Direct3D11/D3D11_CULL_MODE.cs | 2 +- .../Direct3D11/D3D11_RESOURCE_MISC_FLAG.cs | 2 +- .../Direct3D11/D3D11_SUBRESOURCE_DATA.cs | 1 - .../Win32/Graphics/Direct3D11/D3D11_USAGE.cs | 2 +- .../Direct3D11/ID3D11RasterizerState.cs | 21 -------- .../Graphics/Direct3D11/ID3D11SamplerState.cs | 29 ++++++++++ 9 files changed, 79 insertions(+), 78 deletions(-) delete mode 100644 src/Snap.Hutao/Snap.Hutao/Win32/D3D12.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11SamplerState.cs diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs index a9b4e050..a2f1a400 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs @@ -42,6 +42,8 @@ internal sealed partial class TestViewModel : Abstraction.ViewModel private readonly ITaskContext taskContext; private readonly MainWindow mainWindow; + private long counter; + private UploadAnnouncement announcement = new(); public UploadAnnouncement Announcement { get => announcement; set => SetProperty(ref announcement, value); } @@ -157,6 +159,8 @@ internal sealed partial class TestViewModel : Abstraction.ViewModel [Command("TestWindowsGraphicsCaptureCommand")] private unsafe void TestWindowsGraphicsCapture() { + counter = 0; + // https://github.com/obsproject/obs-studio/blob/master/libobs-winrt/winrt-capture.cpp if (!UniversalApiContract.IsPresent(WindowsVersion.Windows10Version1903)) { @@ -172,8 +176,7 @@ internal sealed partial class TestViewModel : Abstraction.ViewModel D3D11_CREATE_DEVICE_FLAG flag = D3D11_CREATE_DEVICE_FLAG.D3D11_CREATE_DEVICE_BGRA_SUPPORT | D3D11_CREATE_DEVICE_FLAG.D3D11_CREATE_DEVICE_DEBUG; - ID3D11Device* pD3D11Device = default; - if (SUCCEEDED(D3D11CreateDevice(default, D3D_DRIVER_TYPE.D3D_DRIVER_TYPE_HARDWARE, default, flag, default, 0, D3D11_SDK_VERSION, &pD3D11Device, default, default))) + if (SUCCEEDED(D3D11CreateDevice(default, D3D_DRIVER_TYPE.D3D_DRIVER_TYPE_HARDWARE, default, flag, [], D3D11_SDK_VERSION, out ID3D11Device* pD3D11Device, out _, out _))) { if (SUCCEEDED(IUnknownMarshal.QueryInterface(pD3D11Device, in IDXGIDevice.IID, out IDXGIDevice* pDXGIDevice))) { @@ -182,31 +185,36 @@ internal sealed partial class TestViewModel : Abstraction.ViewModel IDirect3DDevice direct3DDevice = WinRT.CastExtensions.As(WinRT.IInspectable.FromAbi((nint)inspectable)); SizeInt32 size = new(1920, 1080); - Direct3D11CaptureFramePool framePool = Direct3D11CaptureFramePool.CreateFreeThreaded(direct3DDevice, DirectXPixelFormat.B8G8R8A8UIntNormalized, 2, size); - GC.KeepAlive(framePool); - framePool.FrameArrived += (pool, obj) => + using (Direct3D11CaptureFramePool framePool = Direct3D11CaptureFramePool.CreateFreeThreaded(direct3DDevice, DirectXPixelFormat.B8G8R8A8UIntNormalized, 2, size)) { - using (Direct3D11CaptureFrame frame = framePool.TryGetNextFrame()) + framePool.FrameArrived += (pool, obj) => { - if (frame is not null) + Interlocked.Increment(ref counter); + using (Direct3D11CaptureFrame frame = framePool.TryGetNextFrame()) { - logger.LogInformation("Content Size: {Width} x {Height}", frame.ContentSize.Width, frame.ContentSize.Height); - } - else - { - logger.LogInformation("Null Frame"); + if (frame is not null) + { + logger.LogInformation("Content Size: {Width} x {Height} {Count}", frame.ContentSize.Width, frame.ContentSize.Height, Volatile.Read(ref counter)); + } + else + { + logger.LogInformation("Null Frame"); + } } + }; + + HWND hwnd = serviceProvider.GetRequiredService().GetWindowHandle(); + GraphicsCaptureItem.As().CreateForWindow(hwnd, out GraphicsCaptureItem item); + + using (GraphicsCaptureSession captureSession = framePool.CreateCaptureSession(item)) + { + captureSession.IsCursorCaptureEnabled = false; + captureSession.IsBorderRequired = false; + captureSession.StartCapture(); + + Thread.Sleep(1000); } - }; - - HWND hwnd = serviceProvider.GetRequiredService().GetWindowHandle(); - - GraphicsCaptureItem.As().CreateForWindow(hwnd, out GraphicsCaptureItem item); - - GraphicsCaptureSession captureSession = framePool.CreateCaptureSession(item); - captureSession.StartCapture(); - - Thread.Sleep(1000); + } } else { @@ -224,7 +232,5 @@ internal sealed partial class TestViewModel : Abstraction.ViewModel { logger.LogWarning("D3D11CreateDevice failed"); } - - _ = 1; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/D3D11.cs b/src/Snap.Hutao/Snap.Hutao/Win32/D3D11.cs index 9841b5fe..148d34aa 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/D3D11.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/D3D11.cs @@ -29,4 +29,21 @@ internal static class D3D11 [DllImport("d3d11.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)] public static unsafe extern HRESULT D3D11CreateDevice([AllowNull] IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, D3D11_CREATE_DEVICE_FLAG Flags, [AllowNull] D3D_FEATURE_LEVEL* pFeatureLevels, uint FeatureLevels, uint SDKVersion, [MaybeNull] ID3D11Device** ppDevice, [MaybeNull] D3D_FEATURE_LEVEL* pFeatureLevel, [MaybeNull] ID3D11DeviceContext** ppImmediateContext); + + public static unsafe HRESULT D3D11CreateDevice([AllowNull] IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, D3D11_CREATE_DEVICE_FLAG Flags, [AllowNull] ReadOnlySpan featureLevels, uint SDKVersion, out ID3D11Device* pDevice, out D3D_FEATURE_LEVEL featureLevel, out ID3D11DeviceContext* pImmediateContext) + { + fixed (ID3D11Device** ppDevice = &pDevice) + { + fixed (D3D_FEATURE_LEVEL* pFeatureLevels = featureLevels) + { + fixed (D3D_FEATURE_LEVEL* pFeatureLevel = &featureLevel) + { + fixed (ID3D11DeviceContext** ppImmediateContext = &pImmediateContext) + { + return D3D11CreateDevice(pAdapter, DriverType, Software, Flags, pFeatureLevels, (uint)featureLevels.Length, SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext); + } + } + } + } + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/D3D12.cs b/src/Snap.Hutao/Snap.Hutao/Win32/D3D12.cs deleted file mode 100644 index 14f011b7..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Win32/D3D12.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -using Snap.Hutao.Win32.Foundation; -using Snap.Hutao.Win32.Graphics.Direct3D; -using Snap.Hutao.Win32.System.Com; -using System.Runtime.InteropServices; - -namespace Snap.Hutao.Win32; - -[SuppressMessage("", "SA1313")] -[SuppressMessage("", "SYSLIB1054")] -internal static class D3D12 -{ - [DllImport("d3d12.dll", CallingConvention = CallingConvention.Winapi, ExactSpelling = true)] - public static unsafe extern HRESULT D3D12CreateDevice([AllowNull] IUnknown* pAdapter, D3D_FEATURE_LEVEL MinimumFeatureLevel, Guid* riid, void** ppDevice); - - public static unsafe HRESULT D3D12CreateDevice([AllowNull] IUnknown* pAdapter, D3D_FEATURE_LEVEL MinimumFeatureLevel, ref readonly Guid riid, [MaybeNull] out T* pDevice) - where T : unmanaged - { - fixed (Guid* riid2 = &riid) - { - fixed (T** pDevice2 = &pDevice) - { - return D3D12CreateDevice(pAdapter, MinimumFeatureLevel, riid2, (void**)pDevice2); - } - } - } -} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_CULL_MODE.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_CULL_MODE.cs index da93eae5..d8e24ae5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_CULL_MODE.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_CULL_MODE.cs @@ -7,5 +7,5 @@ internal enum D3D11_CULL_MODE { D3D11_CULL_NONE = 1, D3D11_CULL_FRONT = 2, - D3D11_CULL_BACK = 3 + D3D11_CULL_BACK = 3, } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_RESOURCE_MISC_FLAG.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_RESOURCE_MISC_FLAG.cs index 471d8f12..fe272c0c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_RESOURCE_MISC_FLAG.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_RESOURCE_MISC_FLAG.cs @@ -24,5 +24,5 @@ internal enum D3D11_RESOURCE_MISC_FLAG : uint D3D11_RESOURCE_MISC_TILED = 0x40000, D3D11_RESOURCE_MISC_HW_PROTECTED = 0x80000, D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE = 0x100000, - D3D11_RESOURCE_MISC_SHARED_EXCLUSIVE_WRITER = 0x200000 + D3D11_RESOURCE_MISC_SHARED_EXCLUSIVE_WRITER = 0x200000, } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_SUBRESOURCE_DATA.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_SUBRESOURCE_DATA.cs index 8e50a814..74e0a8b9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_SUBRESOURCE_DATA.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_SUBRESOURCE_DATA.cs @@ -6,7 +6,6 @@ namespace Snap.Hutao.Win32.Graphics.Direct3D11; [SuppressMessage("", "SA1307")] internal struct D3D11_SUBRESOURCE_DATA { - // [Const] public unsafe void* pSysMem; public uint SysMemPitch; public uint SysMemSlicePitch; diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_USAGE.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_USAGE.cs index 1f0b6a20..5d8a26e4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_USAGE.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/D3D11_USAGE.cs @@ -8,5 +8,5 @@ internal enum D3D11_USAGE D3D11_USAGE_DEFAULT = 0, D3D11_USAGE_IMMUTABLE = 1, D3D11_USAGE_DYNAMIC = 2, - D3D11_USAGE_STAGING = 3 + D3D11_USAGE_STAGING = 3, } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11RasterizerState.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11RasterizerState.cs index 952e75ba..2621ed62 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11RasterizerState.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11RasterizerState.cs @@ -26,25 +26,4 @@ internal unsafe readonly struct ID3D11RasterizerState internal readonly ID3D11DeviceChild.Vftbl ID3D11DeviceChildVftbl; internal readonly delegate* unmanaged[Stdcall] GetDesc; } -} - -[SupportedOSPlatform("windows6.1")] -internal unsafe readonly struct ID3D11SamplerState -{ - public readonly Vftbl* ThisPtr; - - internal static ref readonly Guid IID - { - get - { - ReadOnlySpan data = [0x51, 0xEA, 0x6F, 0xDA, 0x4C, 0x56, 0x87, 0x44, 0x98, 0x10, 0xF0, 0xD0, 0xF9, 0xB4, 0xE3, 0xA5]; - return ref Unsafe.As(ref MemoryMarshal.GetReference(data)); - } - } - - internal readonly struct Vftbl - { - internal readonly ID3D11DeviceChild.Vftbl ID3D11DeviceChildVftbl; - internal readonly delegate* unmanaged[Stdcall] GetDesc; - } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11SamplerState.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11SamplerState.cs new file mode 100644 index 00000000..6dca1e28 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Graphics/Direct3D11/ID3D11SamplerState.cs @@ -0,0 +1,29 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +namespace Snap.Hutao.Win32.Graphics.Direct3D11; + +[SupportedOSPlatform("windows6.1")] +internal unsafe readonly struct ID3D11SamplerState +{ + public readonly Vftbl* ThisPtr; + + internal static ref readonly Guid IID + { + get + { + ReadOnlySpan data = [0x51, 0xEA, 0x6F, 0xDA, 0x4C, 0x56, 0x87, 0x44, 0x98, 0x10, 0xF0, 0xD0, 0xF9, 0xB4, 0xE3, 0xA5]; + return ref Unsafe.As(ref MemoryMarshal.GetReference(data)); + } + } + + internal readonly struct Vftbl + { + internal readonly ID3D11DeviceChild.Vftbl ID3D11DeviceChildVftbl; + internal readonly delegate* unmanaged[Stdcall] GetDesc; + } +} \ No newline at end of file