本文告诉大家如何在 WPF 使用 SharpDX ,只是入门。 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 WPF 使用 SharpDx 异步渲染 先介绍一下 SharpDx ,一个底层封装的 DirectX 库,支持 AnyCpu ,支持 Direct3D9 安装 首先安装 SharpDX 的库,需要安装下面几个库 创建工厂 使用 SharpDX 和 DirectX 一样,开始都需要创建工厂,然后创建RenderTarget,之后才可以显示基础图形。 先引用命名 using D2D = SharpDX.Direct2D1; using WIC = SharpDX.WIC; using DW = SharpDX.DirectWrite; using DXGI
本文告诉大家两个不同的方法进入全屏模式 本文属于 SharpDx 系列 博客,建议从头开始读 本文的上一篇是 C# 从零开始写 SharpDx 应用 初始化dx修改颜色 本文的代码将会在上一篇的代码上修改 在 SharpDx 里面可以通过两个方法进入全屏模式,一个是窗口进入全屏,另一个是交换链进入全屏 窗口模式 和普通的 WPF 窗口差不多,可以在 RenderForm 创建的时候设置进入全屏模式,全屏就是最大化的窗口同时去掉标题栏 _renderForm.AllowTransparency = true; 这时画出的透明的颜色就是让窗口透明,透明的部分会命中到后面的元素 和 WPF 的全屏不相同的是,在 SharpDx
SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 WPF 使用 SharpDx 异步渲染 更多请看 WPF 使用 SharpDx 渲染博客导航 虽然上一篇告诉大家如何使用封装的 protected abstract void OnRender(SharpDX.Direct2D1.RenderTarget renderTarget); 其他的代码和WPF 使用封装的 SharpDx 绑定 如果需要使用 SharpDx 需要把 SharpDX.Direct3D11 和 D3DImage 绑定,调用时不能在这个控件的 Load 前,不然无法拿到大小。 | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 如何画,然后在另一个线程等待 SharpDx 画出来。
Include="SharpDX.Desktop" Version="3.1.1" /> <PackageReference Include="<em>SharpDX</em>.Direct2D1" Version \" /> </ItemGroup> </Project> 如果使用的不是 VisualStudio 2017 的就通过 Nuget 安装下面几个库 SharpDX SharpDX.D3DCompiler SharpDX.Desktop SharpDX.Direct2D1 SharpDX.Direct3D11 SharpDX.DXGI 创建窗口 首先创建一个简单的类,这个类主要使用 RenderForm 更多SharpDx博客请到SharpDX 系列 参见:SharpDX Beginners Tutorial Part 1: Setting up a SharpDX project in Visual Studio 2013 - Johan Falk 下一篇 C# 从零开始写 SharpDx 应用 初始化dx修改颜色
本文记录一些通用的 SharpDx 的性能优化方法 本文属于 SharpDx 系列 博客,建议从头开始读 不要监听 ContentRendered 事件 监听了 Window 的 ContentRendered 事件将会降低整个 WPF 的渲染性能 关注硬件渲染 注意是否在 WPF 开启了硬件渲染,详细请看 WPF 渲染级别 和 WPF 设置纯软件渲染 执行业务代码的耗时 在执行 SharpDx 的指导渲染逻辑 ,也就是告诉 SharpDx 应该画点还是画线的逻辑,在这个逻辑里面耦合了业务逻辑,业务逻辑本身的耗时将会让 SharpDx 的收集绘制指令的性能降低 _renderTarget.BeginDraw() renderTarget.DrawEllipse(ellipse, brush, 1); _renderTarget.EndDraw(); 因此优先解决这部分业务代码,可选方案是让这部分代码先执行,执行完成之后再执行 SharpDx 的绘制逻辑 另一个方法就是让业务代码在另一个线程执行 这部分和具体业务相关 减少绘制数量 尽管使用 SharpDx 的绘制效率很高,但是假定需要执行的绘制命令特别多,此时也会降低性能,因此我的一个性能比较强的应用就预先计算出某些命令不会在界面可见
SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 在WPF 使用 SharpDX 在 D3DImage 显示我告诉大家如何在 WPF 使用,但是代码都是写在一个 | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 = SharpDX.Direct3D11.ResourceOptionFlags.Shared, CpuAccessFlags = SharpDX.Direct3D11 <SharpDX.DXGI.Surface>(); var d2DFactory = new SharpDX.Direct2D1.Factory(); new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown, SharpDX.Direct2D1
SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 在WPF 使用 SharpDX 在 D3DImage 显示我告诉大家如何在 WPF 使用,但是代码都是写在一个 | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 = SharpDX.Direct3D11.ResourceOptionFlags.Shared, CpuAccessFlags = SharpDX.Direct3D11 <SharpDX.DXGI.Surface>(); var d2DFactory = new SharpDX.Direct2D1.Factory(); new SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.Unknown, SharpDX.Direct2D1
本文告诉大家如何在 SharpDx 里面使用笔刷,包括纯色笔刷、渐变笔刷和图片笔刷 本文属于 SharpDx 系列 博客,建议从头开始读 初始化 本文将会在 C# 从零开始写 SharpDx 应用 初始化 创建图片需要比较多的代码,下面我创建一个函数用来加载图片 在 SharpDx 使用 WIC 解析图片,先创建图片工厂 ImagingFactory imagingFactory 属性 Image 属性,这里的 Image 可以将 SharpDX.Direct2D1.Bitmap 传入 在 SharpDx 的 Image 是基类,可以使用 Bitmap1 ImageSourceFromWic 提供的是很底层的封装,通过底层的封装是可以自己写出一套 UI 界面的,不过逐步 SharpDx 将会过时,在 Windows 下的底层渲染是 Win2d 才比较好用 本文在加载图片参考了下面的博客 SharpDX main Applying Direct2D built-in effects to bitmaps with SharpDX – int main Brushes Overview - Windows
本文告诉大家通过 SharpDx 画出简单的 2D 界面 本文属于 SharpDx 系列 博客,建议从头开始读 本文分为两步,第一步是初始化,第二步才是画界面 初始化 先创建 RenderForm 用来显示界面 private const int Width = 1280; private const int Height = 720; 上面创建的代码大部分参阅了C# 从零开始写 SharpDx { var d2dFactory = new SharpDX.Direct2D1.Factory(); Texture2D backBuffer = D3D11 需要先创建才能使用,注意工厂需要只创建一次 var factory = new SharpDX.DirectWrite.Factory(); 创建工厂可以用来实例文本格式 var 系列 使用 SharpDx 绘制很底层,但是绘制性能超级高
SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 WPF 使用 SharpDx 异步渲染 虽然上一篇告诉大家如何使用封装的 SharpDx 控件,但是大家也看到了核心是使用 protected abstract void OnRender(SharpDX.Direct2D1.RenderTarget renderTarget); 其他的代码和WPF 使用封装的 SharpDx 绑定 如果需要使用 SharpDx 需要把 SharpDX.Direct3D11 和 D3DImage 绑定,调用时不能在这个控件的 Load 前,不然无法拿到大小。 | SharpDX.Direct3D11.BindFlags.ShaderResource, Format = SharpDX.DXGI.Format.B8G8R8A8 如何画,然后在另一个线程等待 SharpDx 画出来。
SharpDX 本文的代码会使用到 SharpDX 库,因此,你需要在你的项目当中安装这些 NuGet 包: 1 2 3 4 5 6 7 8 9 10 <! -- 基础,必装 --> <PackageReference Include="<em>SharpDX</em>" Version="4.2.0" /> <PackageReference Include="<em>SharpDX</em>.D3DCompiler ="SharpDX.Mathematics" Version="4.2.0" /> <PackageReference Include="<em>SharpDX</em>.Direct3D11" Version="4.2.0 对应到 <em>SharpDX</em> 中,用来表示 Direct3D11 的设备的类型是 <em>SharpDX</em>.Direct3D11.Device,其有一个 OpenSharedResource<T> 方法来打开来自于其他设备的共享资源 1 var surface = texture2D.QueryInterface<<em>SharpDX</em>.DXGI.Surface>(); 在获取到 <em>SharpDX</em>.DXGI.Surface 的 COM 组件引用之后
---- SharpDX 本文的代码会使用到 SharpDX 库,因此,你需要在你的项目当中安装这些 NuGet 包: 1 2 3 4 5 6 7 8 9 10 <! ="<em>SharpDX</em>.Mathematics" Version="4.2.0" /> <PackageReference Include="<em>SharpDX</em>.Direct3D11" Version="4.2.0 ) 本文接下来的内容,是在你已经获得了 <em>SharpDX</em>.Direct3D11.Resource 的引用,或者 <em>SharpDX</em>.Direct3D11.Texture2D 的前提之下。 <<em>SharpDX</em>.Direct3D11.Resource>(); 关键代码(<em>SharpDX</em>.DXGI.Surface.Map) 要获得 GPU 中渲染的图片,我们必须要将其映射到内存中才行。 Error all values are 0 - Stack Overflow <em>SharpDX</em>-Samples/Program.cs at master · <em>sharpdx</em>/<em>SharpDX</em>-Samples
本文将和大家聊聊 DirectX 里面的功能等级在 SharpDx 的使用方法 本文是 SharpDX 系列博客,更多博客请点击SharpDX 系列 在C# 控制台创建 Sharpdx 窗口已经创建了一个窗口 我会在文章去掉很多细节放在后面的博客讲,让大家先知道总体是如何做的 创建交换链 在 C# 从零开始写 SharpDx 应用 初始化dx修改颜色 这篇博客里面有告诉大家如何创建交换链 在创建交换链的时候, 727623616 可以一起探讨DX11,以及有什么问题也可以在这里问群主(不要问我) 参考 DirectX11 With Windows SDK–01 DirectX11初始化_X_Jun的博客-CSDN博客 SharpDX Beginners Tutorial Part 3: Initializing DirectX - Johan Falk SharpDX 系列 WPF 底层渲染 Directx11入门之D3D程序初始化 本文会经常更新,请阅读原文: https://blog.lindexi.com/post/C-%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99-SharpDx
一、初次尝试对于标准的joystick或者gamepad 开发,首先想到的是微软的SharpDX (https://github.com/sharpdx/SharpDX),本以为很简单的一件事,结果发现 SharpDX.XInput这个库,只监听了标准按键。 二、对SharpDX.XInput源码的分析现在知道了SharpDX.XInput并不提供直接的guide键控制项,进一步翻源码看看为啥他只有这些个枚举值,以及它怎么实现的,看看我们是否能够通过修改枚举值来实现功能 三、抛弃SharpDX.XInput 想着是不是可以hid方式去读取设备,获取原始输入值。
本文来告诉大家如何在上一篇博客创建的窗口里面使用 Sharpdx 初始化,然后设置窗口颜色。 本文是 SharpDX 系列博客,更多博客请点击SharpDX 系列 在C# 控制台创建 Sharpdx 窗口已经创建了一个窗口,现在需要在这个窗口初始化。 下面创建的是模式显示描述 using SharpDX.Direct3D; using SharpDX.DXGI; // 其他忽略的代码 class KikuSimairme : IDisposable ; using SharpDX.DXGI; using SharpDX.Mathematics.Interop; using SharpDX.Windows; using D3D11 = SharpDX.Direct3D11 应用 控制台创建 Sharpdx 窗口 下一篇 C# 从零开始写 SharpDx 应用 画三角 将会告诉大家如何创建 视口 ViewPort,视口定义了我们渲染到屏幕上的面积。
本文将告诉大家在拿到了 D3D11 的 Device 也就是 D3DDevice 之后,如何去获取 DXGI.Device 以及 DXGI.Factory 的方法 本文是 SharpDX 系列博客,更多博客请点击 SharpDX 系列 在 C# 从零开始写 SharpDx 应用 初始化dx修改颜色 这篇博客完成了基础的初始化 而接下来如何根据之前的代码,也就是如何根据上一篇博客创建的 D3D11.Device 来创建对应的 () at SharpDX.DXGI.DXGIObject.GetParent(Guid riid, IntPtr& parentOut) at SharpDX.DXGI.DXGIObject.GetParent Beginners Tutorial Part 3: Initializing DirectX - Johan Falk SharpDX 系列 WPF 底层渲染 Directx11入门之D3D程序初始化 本文会经常更新,请阅读原文: https://blog.lindexi.com/post/C-%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99-SharpDx
本文告诉大家如何使用 SharpDX 在 D3DImage 显示。在上一篇WPF 使用 SharpDX只是使用窗口,也就是无法使用其它的 WPF 控件。 SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 WPF 使用 SharpDx 异步渲染 如果只是使用 SharpDX 使用窗口渲染,就无法使用其它的 在 SharpDX 可以使用 D3DImage 进行离屏渲染,本来 WPF 只能有一个渲染线程,但是使用了 SharpDX 就可以有多个渲染线程,这时通过 dx12 加速,一般渲染速度会比不使用 SharpDX ; using DXGI = SharpDX.DXGI; using D3D11 = SharpDX.Direct3D11; using D3D9 = SharpDX.Direct3D9; 在使用之前, ; using SharpDX.Direct3D; using SharpDX.Mathematics.Interop; using DXGI = SharpDX.DXGI; using D3D11 =
本文告诉大家两个不同的方法进入全屏模式 本文属于 SharpDx 系列 博客,建议从头开始读 本文的上一篇是 C# 从零开始写 SharpDx 应用 初始化dx修改颜色 本文的代码将会在上一篇的代码上修改 在 SharpDx 里面可以通过两个方法进入全屏模式,一个是窗口进入全屏,另一个是交换链进入全屏 窗口模式 和普通的 WPF 窗口差不多,可以在 RenderForm 创建的时候设置进入全屏模式,全屏就是最大化的窗口同时去掉标题栏 _renderForm.AllowTransparency = true; 这时画出的透明的颜色就是让窗口透明,透明的部分会命中到后面的元素 和 WPF 的全屏不相同的是,在 SharpDx 清真的程序在其他程序进去全屏的时候,渲染策略会和这个程序最小化一样,不会做实际渲染 SharpDx 系列 SharpDX.DXGI.SwapChain.SetFullscreenState(SharpDX.Mathematics.Interop.RawBool DXGI API SharpDX
本文是一个系列,希望大家从第一篇开始看 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WPF 使用 SharpDX 在 D3DImage 显示 WPF 使用封装的 SharpDx 控件 WPF 使用 SharpDx 异步渲染 如果只是使用 SharpDX 使用窗口渲染,就无法使用其它的 WPF 控件,实际使用经常只是使用 SharpDX 加快一些渲染,很多元素都是不需要。 如果拿来 HWND 做渲染,那么 WPF 只是提供一个窗口,这和 WPF 的设计,高效而且灵活不符合,所以本文就来告诉大家如何使用 SharpDx 高性能渲染同时使用 WPF 的元素。 在 SharpDX 可以使用 D3DImage 进行离屏渲染,本来 WPF 只能有一个渲染线程,但是使用了 SharpDX 就可以有多个渲染线程,这时通过 dx12 加速,一般渲染速度会比不使用 SharpDX
m_device 了 Marshal.Release(dev); 为了在 D3D9 里使用上 D2D 需要创建 D3D11 设备,这部分逻辑只是用来测试,为了方便代码,我加上 SharpDx 值得一说的是 SharpDx 当前官方不维护了,可以选择的代替请看 SharpDx 的代替项目 <ItemGroup> <PackageReference Include="<em>SharpDX</em>" Include="<em>SharpDX</em>.Direct3D11" Version="4.2.0" /> <PackageReference Include="<em>SharpDX</em>.Direct3D9" Version ="4.2.0" /> </ItemGroup> 参考 WPF 使用 SharpDX 在 D3DImage 显示 的定义逻辑,在 CreateRenderTarget 方法加上代码 其中 GPU 有百分之20是 DWM 占用 更多 DX 相关请看 WPF 使用 SharpDx 渲染博客导航 Direct3D 9Ex improvements - Win32 apps Surface