From c01c1fea0dff88459b928458cf23b4187a453004 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Wed, 22 Feb 2023 23:57:59 +0100 Subject: [PATCH] Updated Vortice to 2.3 --- .../DirectX/DX11CompatibilityExtensions.cs | 19 +++++ .../DirectX/DX11ScreenCapture.cs | 74 +++++++++---------- ScreenCapture.NET/ScreenCapture.NET.csproj | 2 +- 3 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 ScreenCapture.NET/DirectX/DX11CompatibilityExtensions.cs diff --git a/ScreenCapture.NET/DirectX/DX11CompatibilityExtensions.cs b/ScreenCapture.NET/DirectX/DX11CompatibilityExtensions.cs new file mode 100644 index 0000000..de72e55 --- /dev/null +++ b/ScreenCapture.NET/DirectX/DX11CompatibilityExtensions.cs @@ -0,0 +1,19 @@ +using Vortice.DXGI; + +namespace ScreenCapture.NET; + +// DarthAffe 22.02.2023: These helper-methods where removed from Vortice and are readded here since they are used. +internal static class DX11CompatibilityExtensions +{ + public static IDXGIAdapter1 GetAdapter1(this IDXGIFactory1 factory, int index) + { + factory.EnumAdapters1(index, out IDXGIAdapter1 adapter).CheckError(); + return adapter; + } + + public static IDXGIOutput GetOutput(this IDXGIAdapter1 adapter, int index) + { + adapter.EnumOutputs(index, out IDXGIOutput output).CheckError(); + return output; + } +} \ No newline at end of file diff --git a/ScreenCapture.NET/DirectX/DX11ScreenCapture.cs b/ScreenCapture.NET/DirectX/DX11ScreenCapture.cs index 7afc9fb..3bcda1c 100644 --- a/ScreenCapture.NET/DirectX/DX11ScreenCapture.cs +++ b/ScreenCapture.NET/DirectX/DX11ScreenCapture.cs @@ -305,18 +305,18 @@ public sealed class DX11ScreenCapture : IScreenCapture private void InitializeCaptureZone(in CaptureZone captureZone) { Texture2DDescription stagingTextureDesc = new() - { - CpuAccessFlags = CpuAccessFlags.Read, - BindFlags = BindFlags.None, - Format = Format.B8G8R8A8_UNorm, - Width = captureZone.Width, - Height = captureZone.Height, - OptionFlags = ResourceOptionFlags.None, - MipLevels = 1, - ArraySize = 1, - SampleDescription = { Count = 1, Quality = 0 }, - Usage = ResourceUsage.Staging - }; + { + CPUAccessFlags = CpuAccessFlags.Read, + BindFlags = BindFlags.None, + Format = Format.B8G8R8A8_UNorm, + Width = captureZone.Width, + Height = captureZone.Height, + MiscFlags = ResourceOptionFlags.None, + MipLevels = 1, + ArraySize = 1, + SampleDescription = { Count = 1, Quality = 0 }, + Usage = ResourceUsage.Staging + }; ID3D11Texture2D stagingTexture = _device!.CreateTexture2D(stagingTextureDesc); ID3D11Texture2D? scalingTexture = null; @@ -324,18 +324,18 @@ public sealed class DX11ScreenCapture : IScreenCapture if (captureZone.DownscaleLevel > 0) { Texture2DDescription scalingTextureDesc = new() - { - CpuAccessFlags = CpuAccessFlags.None, - BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, - Format = Format.B8G8R8A8_UNorm, - Width = captureZone.UnscaledWidth, - Height = captureZone.UnscaledHeight, - OptionFlags = ResourceOptionFlags.GenerateMips, - MipLevels = captureZone.DownscaleLevel + 1, - ArraySize = 1, - SampleDescription = { Count = 1, Quality = 0 }, - Usage = ResourceUsage.Default - }; + { + CPUAccessFlags = CpuAccessFlags.None, + BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, + Format = Format.B8G8R8A8_UNorm, + Width = captureZone.UnscaledWidth, + Height = captureZone.UnscaledHeight, + MiscFlags = ResourceOptionFlags.GenerateMips, + MipLevels = captureZone.DownscaleLevel + 1, + ArraySize = 1, + SampleDescription = { Count = 1, Quality = 0 }, + Usage = ResourceUsage.Default + }; scalingTexture = _device!.CreateTexture2D(scalingTextureDesc); scalingTextureView = _device.CreateShaderResourceView(scalingTexture); } @@ -362,18 +362,18 @@ public sealed class DX11ScreenCapture : IScreenCapture using IDXGIOutput5 output = _output.QueryInterface(); Texture2DDescription captureTextureDesc = new() - { - CpuAccessFlags = CpuAccessFlags.None, - BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, - Format = Format.B8G8R8A8_UNorm, - Width = Display.Width, - Height = Display.Height, - OptionFlags = ResourceOptionFlags.None, - MipLevels = 1, - ArraySize = 1, - SampleDescription = { Count = 1, Quality = 0 }, - Usage = ResourceUsage.Default - }; + { + CPUAccessFlags = CpuAccessFlags.None, + BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, + Format = Format.B8G8R8A8_UNorm, + Width = Display.Width, + Height = Display.Height, + MiscFlags = ResourceOptionFlags.None, + MipLevels = 1, + ArraySize = 1, + SampleDescription = { Count = 1, Quality = 0 }, + Usage = ResourceUsage.Default + }; _captureTexture = _device.CreateTexture2D(captureTextureDesc); lock (_captureZones) @@ -383,7 +383,7 @@ public sealed class DX11ScreenCapture : IScreenCapture } if (_useNewDuplicationAdapter) - _duplicatedOutput = output.DuplicateOutput1(_device, Format.B8G8R8A8_UNorm); // DarthAffe 27.02.2021: This prepares for the use of 10bit color depth + _duplicatedOutput = output.DuplicateOutput1(_device, new[] { Format.B8G8R8A8_UNorm }); // DarthAffe 27.02.2021: This prepares for the use of 10bit color depth else _duplicatedOutput = output.DuplicateOutput(_device); } diff --git a/ScreenCapture.NET/ScreenCapture.NET.csproj b/ScreenCapture.NET/ScreenCapture.NET.csproj index b3f3072..d0cb645 100644 --- a/ScreenCapture.NET/ScreenCapture.NET.csproj +++ b/ScreenCapture.NET/ScreenCapture.NET.csproj @@ -64,7 +64,7 @@ - +