首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏海之滨云视频和流媒体技术

    DXGI快速截屏桌面直播技术

    DXGI快速截屏桌面直播技术 概述   很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。 而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。 我的笔记本比较老了,所以GDI最多只能跑到20帧了,不过可以看到,即使这种情况下,当不设置帧率,也就是无限循环截屏的情况下,DXGI的性能只能用可怕来形容。。。 ?

    4.4K60发布于 2018-05-11
  • 来自专栏Windows技术交流

    CreateSwapChainForHwnd failed with result DXGI_ERROR_NOT_CURRENTLY_AVAILABLE

    CreateSwapChainForHwnd failed with result 'DXGI_ERROR_NOT_CURRENTLY_AVAILABLE' (0x887A0022), falling  back to legacy CreateSwapChain 用DXGI_ERROR_NOT_CURRENTLY_AVAILABLE百度下: https://vimsky.com/examples/detail IDXGIOutput-FindClosestMatchingMode-method.html https://learn.microsoft.com/zh-cn/windows/win32/api/dxgi /nf-dxgi-idxgifactory-makewindowassociation 解决方案 不要在rdp会话里跑业务,在自建vnc会话里跑业务,自建vnc可参考https://cloud.tencent.com

    50910编辑于 2024-02-04
  • 来自专栏林德熙的博客

    C# 从零开始写 SharpDx 应用 从 D3DDevice 获取 DXGIDevice 方法

    本文将告诉大家在拿到了 D3D11 的 Device 也就是 D3DDevice 之后,如何去获取 DXGI.Device 以及 DXGI.Factory 的方法 本文是 SharpDX 系列博客,更多博客请点击 以及 DXGI.Factory 对象 其实方法十分简单,我记录一下,因此我刚才在写一些逗比代码的时候,又忘记是如何创建的 其实在创建 D3D11.Device 就用到了 DxGI 的 SwapChainDescription d3DDevice 调用 QueryInterface 可以拿到 DXGI.Device 对象 var dxgiDevice = _d3DDevice.QueryInterface<DXGI.Device >(); 而通过 DXGI.Device 获取 DXGI.Factory 对象还有一点坑,需要根据 DxGI 的显卡适配器 DXGI.Adapter 通过查询它的父级找到是哪个 DXGI.Factory <DXGI.Factory>(); 其实这就是坑了我的地方,也是我对 DirectX 的概念理解不够熟的原因,我开始就通过 DXGI.Device 对象尝试 GetParent 获取 DXGI.Factory

    1.3K10发布于 2021-01-14
  • 来自专栏林德熙的博客

    dotnet 分享使用 D2D 绘制界面加 AOT 发布的应用开发经验

    colorFormat = DXGI.Format.B8G8R8A8_UNorm; const int FrameCount = 2; DXGI.SwapChainDescription1 , SampleDescription = DXGI.SampleDescription.Default, Scaling = DXGI.Scaling.Stretch 的平面,这个平面就约等于窗口渲染内容 DXGI.IDXGISurface dxgiSurface = backBufferTexture.QueryInterface<DXGI.IDXGISurface 设备,用来创建 D2D 设备 DXGI.IDXGIDevice dxgiDevice = d3D11Device1.QueryInterface<DXGI.IDXGIDevice>() > GetHardwareAdapter(DXGI.IDXGIFactory2 factory) { DXGI.IDXGIFactory6?

    36610编辑于 2024-02-10
  • 来自专栏林德熙的博客

    dotnet DirectX 通过 Vortice 控制台使用 ID2D1DeviceContext 绘制画面

    使用以下代码从交换链里面拿到了 DXGI 平面,拿到的的 DXGI 平面即可被绘制 2D 内容在上面,从而将内容绘制输出到窗口上 DXGI.IDXGISwapChain1 swapChain 的平面,这个屏幕就约等于窗口渲染内容 DXGI.IDXGISurface dxgiSurface = backBufferTexture.QueryInterface<DXGI.IDXGISurface 然后分为两个路线,一个是获取 DXGI 的平面,也就是上一篇博客提供的方法,这一路线已完成。 DXGI.IDXGIDevice dxgiDevice = d3D11Device.QueryInterface<DXGI.IDXGIDevice>(); 使用工厂创建 D2D 设备 D2D.ID2D1Factory1 设备,用来创建 D2D 设备 DXGI.IDXGIDevice dxgiDevice = d3D11Device.QueryInterface<DXGI.IDXGIDevice>();

    78130编辑于 2023-05-23
  • 来自专栏林德熙的博客

    分享一个在 dotnet 里使用 D2D 配合 AOT 开发小而美的应用开发经验

    colorFormat = DXGI.Format.B8G8R8A8_UNorm; const int FrameCount = 2; DXGI.SwapChainDescription1 , SampleDescription = DXGI.SampleDescription.Default, Scaling = DXGI.Scaling.Stretch 的平面,这个平面就约等于窗口渲染内容 DXGI.IDXGISurface dxgiSurface = backBufferTexture.QueryInterface<DXGI.IDXGISurface 设备,用来创建 D2D 设备 DXGI.IDXGIDevice dxgiDevice = d3D11Device1.QueryInterface<DXGI.IDXGIDevice>() > GetHardwareAdapter(DXGI.IDXGIFactory2 factory) { DXGI.IDXGIFactory6?

    29410编辑于 2024-02-19
  • 来自专栏林德熙的博客

    dotnet DirectX 做一个简单绘制折线笔迹的 D2D 应用

    ; using D3D = Vortice.Direct3D; using D3D11 = Vortice.Direct3D11; using DXGI = Vortice.DXGI; using D2D , SampleDescription = DXGI.SampleDescription.Default, Scaling = DXGI.Scaling.Stretch // https://learn.microsoft.com/zh-cn/windows/win32/api/dxgi/nf-dxgi-idxgiswapchain-present 设备,用来创建 D2D 设备 //DXGI.IDXGIDevice dxgiDevice = d3D11Device.QueryInterface<DXGI.IDXGIDevice>( > GetHardwareAdapter(DXGI.IDXGIFactory2 factory) { DXGI.IDXGIFactory6?

    52510编辑于 2024-10-16
  • 来自专栏林德熙的博客

    DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色

    <DXGI.IDXGIAdapter1> GetHardwareAdapter(DXGI.IDXGIFactory2 factory) { } 先尝试从 IDXGIFactory2 对象获取 IDXGIFactory6 , out DXGI.IDXGIAdapter1? , out DXGI.IDXGIAdapter1? , out DXGI.IDXGIAdapter1? , SampleDescription = DXGI.SampleDescription.Default, Scaling = DXGI.Scaling.Stretch

    1.8K30编辑于 2023-04-07
  • 来自专栏林德熙的博客

    WPF 使用 SharpDX

    DXGI_FORMAT_R16G16B16A16_UNORM:每个元素包含4个16位分量,分量的取值范围在[0,1]区间内。 DXGI_FORMAT_R32G32_UINT:每个元素包含两个32位无符号整数分量。 DXGI_FORMAT_R8G8B8A8_UNORM:每个元素包含4个8位无符号分量,分量的取值范围在[0,1]区间内的浮点数。 DXGI_FORMAT_R8G8B8A8_SNORM:每个元素包含4个8位有符号分量,分量的取值范围在[−1,1] 区间内的浮点数。 DXGI_FORMAT_R8G8B8A8_SINT:每个元素包含4个8位有符号整数分量,分量的取值范围在[−128, 127] 区间内的整数。

    1.7K10发布于 2018-09-19
  • 来自专栏林德熙的博客

    WPF 使用 SharpDX 在 D3DImage 显示 介绍创建控件D3D 设备设置指针画出来

    = SharpDX.DXGI; using D3D11 = SharpDX.Direct3D11; using D3D9 = SharpDX.Direct3D9; 在使用之前,需要使用 Nuget 安装 首先转换 Format ,因为 D3D11.Texture2D 使用的是 SharpDX.DXGI.Format 需要转换为 D3D9.Format ,请看下面代码 private static var surface = renderTarget.QueryInterface<DXGI.Surface>(); var d2DFactory = new D2D.Factory 引用 using D2D = SharpDX.Direct2D1; using SharpDX.Direct3D; using SharpDX.Mathematics.Interop; using DXGI = SharpDX.DXGI; using D3D11 = SharpDX.Direct3D11; using D3D9 = SharpDX.Direct3D9; public partial

    2.9K10发布于 2018-09-19
  • 来自专栏林德熙的博客

    C# 从零开始写 SharpDx 应用 禁止 Alt + Enter 进入全屏

    是否独占的优势不大,因为系统有优化,请看 Windows 对全屏应用的优化 而为什么在按下 ALT+ENTER 键时,将会让屏幕黑屏,是因为进入全屏之后,没有任何的更新,因此看起来黑屏 解决方法就是在 DXGI.Factory dxgiFactory.MakeWindowAssociation(_renderForm.Handle, WindowAssociationFlags.IgnoreAltEnter); 而 DXGI.Factory 可以通过 D3D11.Device 获取,如下面代码 var dxgiDevice = _d3DDevice.QueryInterface<DXGI.Device>(); DXGI.Adapter dxgiDeviceAdapter = dxgiDevice.Adapter; var dxgiFactory = dxgiDeviceAdapter.GetParent <DXGI.Factory>(); 本文是 SharpDX 系列博客,更多博客请点击SharpDX 系列 ---- 本文会经常更新,请阅读原文: https://blog.lindexi.com

    1.2K20发布于 2021-01-14
  • 来自专栏林德熙的博客

    WPF 使用封装的 SharpDx 控件

    BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 SharpDX.Direct3D11.Texture2D(device, renderDesc); var surface = renderTarget.QueryInterface<SharpDX.DXGI.Surface SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown { switch (texture.Description.Format) { case SharpDX.DXGI.Format.R10G10B10A2 Float: return SharpDX.Direct3D9.Format.A16B16G16R16F; case SharpDX.DXGI.Format.B8G8R8A8

    1.1K10编辑于 2022-08-04
  • 来自专栏林德熙的博客

    WPF 使用封装的 SharpDx 控件

    BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 SharpDX.Direct3D11.Texture2D(device, renderDesc); var surface = renderTarget.QueryInterface<SharpDX.DXGI.Surface SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown { switch (texture.Description.Format) { case SharpDX.DXGI.Format.R10G10B10A2 Float: return SharpDX.Direct3D9.Format.A16B16G16R16F; case SharpDX.DXGI.Format.B8G8R8A8

    1.9K20发布于 2018-09-18
  • 来自专栏林德熙的博客

    WPF 使用 Silk.NET 进行 DirectX 渲染入门

    为了在 WPF 上使用到 D2D 就需要执行如下步骤: 创建 D3D11 设备 通过 DXGI 关联 D2D 设备 创建 D3D9 设备 如官方文档的转换图 使用 DirectX 时,初始化参数的代码将会特别多 PackageReference Include="Silk.NET.Direct3D9" Version="2.11.0" /> <PackageReference Include="Silk.NET.<em>DXGI</em> using Silk.NET.Core.Native; using D3D11 = Silk.NET.Direct3D11; using D3D9 = Silk.NET.Direct3D9; using <em>DXGI</em> = Silk.NET.<em>DXGI</em>; using D2D = SharpDX.Direct2D1; using SharpDXDXGI = SharpDX.<em>DXGI</em>; using SharpDXMathematics = Silk.NET.<em>DXGI</em>; using D2D = SharpDX.Direct2D1; using SharpDXDXGI = SharpDX.<em>DXGI</em>; using SharpDXMathematics

    3.6K40编辑于 2021-12-27
  • 来自专栏林德熙的博客

    WPF 模拟 WPFMediaKit 的 D3D 配置用来测试4k性能

    BindFlags = D3D11.BindFlags.RenderTarget | D3D11.BindFlags.ShaderResource, Format = DXGI.Format.B8G8R8A8 renderTarget = new D3D11.Texture2D(device, renderDesc); var surface = renderTarget.QueryInterface<DXGI.Surface supportRequired = FormatSupport.RenderTarget; var isSupported = device.CheckFormatSupport(DXGI.Format.B8G8R8A8 _UNorm: return D3D9.Format.A2B10G10R10; case SharpDX.DXGI.Format.R16G16B16A16 _Float: return D3D9.Format.A16B16G16R16F; case SharpDX.DXGI.Format.B8G8R8A8

    1.3K30编辑于 2021-12-23
  • 来自专栏林德熙的博客

    SharpDx 进入全屏模式 窗口模式设置透明窗口交换链全屏

    清真的程序在其他程序进去全屏的时候,渲染策略会和这个程序最小化一样,不会做实际渲染 SharpDx 系列 SharpDX.DXGI.SwapChain.SetFullscreenState(SharpDX.Mathematics.Interop.RawBool , SharpDX.DXGI.Output) Example DirectX Graphics Infrastructure (DXGI) Best Practices - Windows applications DXGI API SharpDX

    2.6K30发布于 2019-06-15
  • 来自专栏machh的专栏

    windows平台桌面截屏技术介绍

    windows系统中,抓取屏幕有很多方法,比较常用的是GDI和mirror两种方式,除此以外,利用ddraw和DXGI(windows7以上系统支持)方式也可以抓取屏幕。 由于mirror的方式涉及到驱动底层,并且也不是所有系统都支持,这里不做介绍,着重介绍GDI, DDRAW和DXGI这三种抓屏方式, 一,GDI 所有的windows版本都通用的抓屏方式, 三, DXGI 这种抓屏方式,速度非常快,而且即使启用了Aero特效,抓屏效率也一样。

    2.2K00编辑于 2022-06-10
  • 来自专栏walterlv - 吕毅的博客

    将 Direct3D11 在 GPU 中的纹理(Texture2D)导出到内存(Map)或导出成图片文件

    PackageReference Include="SharpDX.D3DCompiler" Version="4.2.0" /> <PackageReference Include="SharpDX.<em>DXGI</em> 而映射到内存中的核心代码是 SharpDX.<em>DXGI</em>.Surface 对象的 Map 方法。 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using (var surface = texture2D.QueryInterface<SharpDX.<em>DXGI</em>.Surface >()) { var map = surface.Map(SharpDX.<em>DXGI</em>.MapFlags.Read, out DataStream dataStream); for (var >()) { var map = surface.Map(SharpDX.<em>DXGI</em>.MapFlags.Read, out DataStream dataStream);

    2K50编辑于 2023-10-22
  • 来自专栏林德熙的博客

    WPF 使用 SharpDx 异步渲染

    BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 SharpDX.Direct3D11.Texture2D(device, renderDesc); var surface = renderTarget.QueryInterface<SharpDX.DXGI.Surface SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown

    1.4K20编辑于 2022-08-04
  • 来自专栏林德熙的博客

    WPF 使用 SharpDx 异步渲染 使用方法绑定渲染为什么空白等待画完异步渲染多线程渲染

    BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 SharpDX.Direct3D11.Texture2D(device, renderDesc); var surface = renderTarget.QueryInterface<SharpDX.DXGI.Surface SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown BindFlags.RenderTarget | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 SharpDX.Direct2D1.RenderTargetProperties( new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown

    2.6K30发布于 2018-09-18
领券