首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • D3DImage 显示 介绍创建控件D3D 设备设置指针画出来

    希望大家从第一篇开始看 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage 微软为了大家方便使用 Direct2D 就添加了 D3DImage ,虽然这个元素不是很好用。 介绍 先告诉大家什么是 D3DImage ,这是一个可以和 Direct2D、3D 交互的元素,他是一个 ImageSource ,可以放在 Image 控件显示。 使用 D3DImage 会发送一次内存复制,如果在显卡渲染,那么就会先从显卡获得位图,复制到 D3DImage 作为图片显示到 WPF ,也就是同个位图需要现在显卡渲染,然后复制到内存,让 WPF 渲染图片 一般使用 D3DImage 都不能拿到比原来好的性能。 那么 D3DImage 有什么用?

    25310编辑于 2025-08-21
  • 来自专栏林德熙的博客

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

    微软为了大家方便使用 Direct2D 就添加了 D3DImage ,虽然这个元素不是很好用。 使用 D3DImage 会发送一次内存复制,如果在显卡渲染,那么就会先从显卡获得位图,复制到 D3DImage 作为图片显示到 WPF ,也就是同个位图需要现在显卡渲染,然后复制到内存,让 WPF 渲染图片 一般使用 D3DImage 都不能拿到比原来好的性能。 那么 D3DImage 有什么用? </Grid> 从上面可以看到D3DImage的方法,他在 WPF 和其他元素没有不一样的。 因为传入 D3D11.Texture2D ,但是 D3DImage 是 dx9 的,所以需要转换一下。

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

    dotnet 读 WPF 源代码笔记 AppDomainShutdownMonitor 的设计

    在 WPF 中的 AppDomainShutdownMonitor 类是一个不开放的类,这个类当前只是给 D3DImage 类使用。 在 AppDomainShutdownMonitor 提供了在应用的进程或程序域关闭的时候,进行一次通知,当前是用来清理 D3DImage 类的资源 在 WPF 中的 D3DImage 类是一个充满黑科技的类 同时在 D3DImage 类被回收的时候,就不需要订阅进程退出或程序域关闭的时候的清理逻辑,因为在 D3DImage 回收的时候,将会自动执行清理逻辑 如果让 D3DImage 类去关注进程退出等,那么将会让 因为还有这样的需求,在 D3DImage 类被回收的时候,就不需要订阅进程退出或程序域关闭的时候的清理逻辑,因此还有一个 Remove 方法 public static void Remove = new WeakReference(this); AppDomainShutdownMonitor.Add(_listener); } ~D3DImage

    59630发布于 2020-12-23
  • 来自专栏林德熙的博客

    WPF 使用 Vortice 在 D3DImage 显示 D2D 内容

    本文将告诉大家,如何在 WPF 里面,使用 Vortice 库在 D3DImage 上显示通过 D2D 绘制的内容 本文绝大部分代码来源于 Raspberry Monster 伙伴提供。 使用 Vortice 底层库,能让 C# 代码比较方便的和 DirectX 对接 在本文这里,将尝试利用 Vortice 库使得 D2D 绘制的内容能够在 D3DImage 上显示。 x:Name="D3DImage" /> </Image.Source> </Image> </Border> </Grid 这是最通用的格式,可以很方便很设置给到 D3DImage 里 对接 D2D 渲染 创建出来的纹理可先和 D2D 进行对接,也可先和 D3DImage 对接,这个顺序可随意排列。 整个过程就是让 D2D 绘制在 ID3D11Texture2D 纹理上,再将 ID3D11Texture2D 纹理当成 IDirect3DTexture9 给 D3DImage 使用,如下图所示 渲染画面

    24610编辑于 2026-01-28
  • 来自专栏林德熙的博客

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

    本文告诉大家如何通过 SharpDx 进行异步渲染,但是因为在 WPF 是需要使用 D3DImage 画出来,所以渲染只是画出图片,最后的显示还是需要 WPF 在他自己的主线程渲染。 使用方法 因为使用 SharpDx 在 WPF 除了使用 D3DImage 还可以使用 D3D11Image 但是这个需要分开 x86 和 x64 。 现在使用的方法是把 D3DImage 作为图片画出来,如果使用 D3D11Image 也没有什么性能提升。 绑定 如果需要使用 SharpDx 需要把 SharpDX.Direct3D11 和 D3DImage 绑定,调用时不能在这个控件的 Load 前,不然无法拿到大小。 虽然已经写好 D3DImage 但是如何显示? 继承 FrameworkElement 可以重写 OnRender 。

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

    WPF 使用 SharpDx 异步渲染

    本文告诉大家如何通过 SharpDx 进行异步渲染,但是因为在 WPF 是需要使用 D3DImage 画出来,所以渲染只是画出图片,最后的显示还是需要 WPF 在他自己的主线程渲染。 使用方法 因为使用 SharpDx 在 WPF 除了使用 D3DImage 还可以使用 D3D11Image 但是这个需要分开 x86 和 x64 。 现在使用的方法是把 D3DImage 作为图片画出来,如果使用 D3D11Image 也没有什么性能提升。 绑定 如果需要使用 SharpDx 需要把 SharpDX.Direct3D11 和 D3DImage 绑定,调用时不能在这个控件的 Load 前,不然无法拿到大小。 虽然已经写好 D3DImage 但是如何显示? 继承 FrameworkElement 可以重写 OnRender 。

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

    WPF 对接 Vortice 调用 D2D 使用 IWICBitmap 离屏渲染

    此方法和 D3DImage 对比如何?从代码分析上来说,如果不是静态画面绘制,那是比不过 D3DImage 的。静态画面绘制就是绘制一张静态画面,后续也不需要去更新,去修改画面的内容。 在绘制静态画面的时候,性能预计和 D3DImage 持平。 只是相对于 D3DImage 这么重的来说,使用 WICBitmap 会更加轻而已,而且由于本身设计上也不是作为动态画面使用,少了很多同步的逻辑 既然这个方式需要这么好用,那再用反射似乎也说不过去,刚好我是

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

    dotnet 读 WPF 源代码笔记 为什么加上 BooleanBoxes 类

    为什么在 D3DImage 的 Callback 方法里面,传入的是 object 对象,却能被转换为布尔。 因此如果做此优化,将修改行为 那这和 D3DImage 的 Callback 方法里面,有什么关系呢? 因为本来是通过布尔装箱创建的,也因此能被转换为布尔值 以上就是 WPF 为什么加上 BooleanBoxes 类的原因,以及在 D3DImage 里,使用布尔强转一个 object 可以符合预期 更多逻辑

    86010编辑于 2022-08-12
  • 来自专栏林德熙的博客

    WPF 使用封装的 SharpDx 控件

    希望大家从第一篇开始看 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 在WPF 使用 SharpDX 在 D3DImage 显示我告诉大家如何在 WPF 使用,但是代码都是写在一个 MainPage ,所以下面我把代码封装一下 使用这个类作为 Image 的 Source 会占用 3% 的 CPU ,而且这个类没有注释,关于这个类是如何写的请看WPF 使用 SharpDX 在 D3DImage 显示 。 System.Windows.Media; using SharpDX.Direct3D; namespace WPFSharpDx { public abstract class SharpDxImage : D3DImage

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

    WPF 使用封装的 SharpDx 控件

    希望大家从第一篇开始看 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 在WPF 使用 SharpDX 在 D3DImage 显示我告诉大家如何在 WPF 使用,但是代码都是写在一个 MainPage ,所以下面我把代码封装一下 使用这个类作为 Image 的 Source 会占用 3% 的 CPU ,而且这个类没有注释,关于这个类是如何写的请看WPF 使用 SharpDX 在 D3DImage 显示 。 System.Windows.Media; using SharpDX.Direct3D; namespace WPFSharpDx { public abstract class SharpDxImage : D3DImage

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

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

    例如调用方也只能采用不安全代码调用,写法也有点诡异 根据 Surface sharing between Windows graphics APIs - Win32 apps 文档,为了在 WPF 的 D3DImage x:Name="D3DImage"></interop:D3DImage> </Image.Source> </Image> </Grid> </Window 但是在开始前,还需要关联到 WPF 的 D3DImage 才能渲染。 为了关联 D3DImage 就需要继续创建 D3D9 设备,如下面代码,调用 SetRenderTarget 将 D3D11 创建的 ID3D11Texture2D 作为 D3D9 的共享纹理,从而让 D2D 的内容可以在 D3DImage 上使用 SetRenderTarget(renderTarget); 在 SetRenderTarget 的代码是从 ID3D11Texture2D

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

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

    DsError.ThrowExceptionForHR(hr); 通过如上代码创建的 IDirect3DSurface9 类型的 m_privateSurface 可以作为 D3DImage <PackageReference Include="SharpDX.Direct3D9" Version="4.2.0" /> </ItemGroup> 参考 WPF 使用 SharpDX 在 D3DImage return D3D9.Format.Unknown; } } 拿到 m_privateTexture 对象,即可使用 GetSurfaceLevel 方法获取到可以给 D3DImage

    1.4K30编辑于 2021-12-23
  • 来自专栏逍遥剑客的游戏开发

    WPF初体验

    最早看到过的方式是WPF提供的D3DImage类. 这个类的作用就是把BackBuffer拷贝过来, 然后再用WPF那一套东西来显示.

    1.2K30发布于 2018-05-23
  • 来自专栏林德熙的博客

    win10 uwp 渲染原理 DirectComposition 渲染 例子创建工程如何写显示CompositionSurfaceBrush

    从我的博客WPF 使用 SharpDX 在 D3DImage 显示可以知道,在 WPF 使用 d2d 是比较难的,因为很难集合两个在一个界面。但是 UWP 通过这个类就可以把底层渲染放在指定层级。 这就是为什么说 UWP 可以做出比较高性能,因为 WPF 是很难修改他的渲染,即使使用D3DImage也是把渲染位图作为图片显示,需要先在显卡渲染然后把位图复制到内存,让WPF画出图片。

    3.1K10发布于 2018-09-18
  • 来自专栏walterlv - 吕毅的博客

    WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

    Freezable 主要由那些与图形渲染强相关的 WPF 类型继承,比如 Brush、Transform、Geometry、D3DImage 还有各种动画等。典型的,这些类型都对高性能渲染有要求。 指定了 PresentationOptions:Freeze="True" 特性的对象可以跨线程访问 没有指定此特性的对象不可以跨线程访问 这些对象比如 Brush、Transform、Geometry、D3DImage

    1.4K20发布于 2020-02-10
  • 来自专栏林德熙的博客

    WPF 使用 SharpDX

    本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage

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

    WPF 使用 Direct2D1 画图入门

    本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage

    1.1K10发布于 2018-09-19
  • 来自专栏walterlv - 吕毅的博客

    WPF 高性能位图渲染 WriteableBitmap 及其高性能用法示例

    WPF 渲染框架并没有对外提供多少可以完全控制渲染的部分,目前可以做的有: D3DImage,用来承载使用 DirectX 各个版本渲染内容的控件 WriteableBitmap,通过一段内存空间来指定如何渲染一个位图的图片

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

    dotnet 从入门到放弃的 500 篇文章合集

    从文件加载字体 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 Direct2D1 画图 wpf 使用 Dispatcher.Invoke 冻结窗口 WPF 使用 SharpDX 在 D3DImage

    13.7K20发布于 2018-09-19
领券