本文将告诉大家如何通过 Vortice 使用 D2D 的 CommandList 功能

本文属于 DirectX 系列博客,更多 DirectX 和 D2D 以及 Vortice 库的博客,请参阅我的 博客导航

上一篇博客: dotnet DirectX 通过 Vortice 控制台使用 ID2D1DeviceContext 绘制画面

在 Direct2D 里面的一个很基础也很重要的功能组件是 D2D 的 CommandList 功能。通过 D2D 的 CommandList 功能,可以用来存放记录一系列的绘制命令,从而将绘制内容作为 ID2D1Image 参与其他功能。比如将继承于 ID2D1Image 的 ID2D1CommandList 作为 ID2D1DeviceContext 的 DrawImage 参数被进行绘制。比如作为特效的输入等等

更多关于 Direct2D 的 ID2D1CommandList 的优势还请自行了解,本文着重在于如何在 Vortice 创建 ID2D1CommandList 对象,以及将绘制内容输入到 ID2D1CommandList 里

在上一篇博客的基础上,创建 CreateCommandList 方法,将在此方法里面编写创建 ID2D1CommandList 对象的逻辑,方法大概如下

        ID2D1CommandList CreateCommandList()
{
...
}

创建 ID2D1CommandList 对象需要用到 ID2D1DeviceContext 的 CreateCommandList 方法,代码如下

            ID2D1CommandList commandList = renderTarget.CreateCommandList();

创建完成之后,需要将 ID2D1DeviceContext 的 Target 挂过去,如以下代码

            var originTarget = renderTarget.Target;
ID2D1CommandList commandList = renderTarget.CreateCommandList();
renderTarget.Target = commandList;

接着即可使用 ID2D1DeviceContext 进行绘制界面,如以下代码在 ID2D1CommandList 里记录绘制界面

            using var brush = renderTarget.CreateSolidColorBrush(color);

            // 此时绘制过去的都是在 ID2D1CommandList 里面
renderTarget.DrawRoundedRectangle(new RoundedRectangle()
{
RadiusX = 5,
RadiusY = 5,
Rect = new Vortice.RawRectF(100, 100, 600, 300)
}, brush, 5); var backgroundBrush = renderTarget.CreateSolidColorBrush(new Color4(0x64, 0x95, 0xED)); renderTarget.FillRoundedRectangle(new RoundedRectangle()
{
RadiusX = 5,
RadiusY = 5,
Rect = new Vortice.RawRectF(115, 115, 590, 290)
}, backgroundBrush);

完成之后别忘了调用 ID2D1CommandList 的 Close 方法,将 ID2D1DeviceContext 的 Target 设置回原先的对象

            commandList.Close();

            renderTarget.Target = originTarget;

获取到 ID2D1CommandList 之后,可以作为 ID2D1Image 在 ID2D1DeviceContext 使用 DrawImage 进行绘制,代码如下

                // 开始绘制逻辑
renderTarget.BeginDraw(); // 清空画布
renderTarget.Clear(new Color4(0xFF, 0xFF, 0xFF)); using ID2D1CommandList commandList = CreateCommandList();
ID2D1Image image = commandList; renderTarget.DrawImage(image); renderTarget.EndDraw();

如此即可将 ID2D1CommandList 绘制到画布上

本文所有代码放在 githubgitee 上,可以通过以下方式获取整个项目的代码

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 08dae017fae148b8eb014a08296ac2f81da218d7

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 08dae017fae148b8eb014a08296ac2f81da218d7

获取代码之后,进入 VorticeD2DCommandList 文件夹

dotnet C# 通过 Vortice 使用 Direct2D 的 ID2D1CommandList 入门的更多相关文章

  1. .NET 2.0 参考源码索引

    http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...

  2. 在CentOS7 开发与部署 asp.net core app笔记

    原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...

  3. 官宣 MAUI 在.NET Preview 3的最新进展

    我们在.NET 6 Preview 3中交付了.NET多平台应用UI的移动和桌面开发的最新进展.此版本添加了Windows平台和WinUI 3,改进了基本应用程序和启动构建器,添加了原生生命周期事件, ...

  4. Win2D 官方文章系列翻译 - 与 Direct2D 互操作

    本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-interop-with-direct2d/ Win2D 作为 Direct2D 的上层实现,支持与其进行双向 ...

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

    本文将告诉大家如何使用 Vortice 底层库从零开始,从一个控制台项目,开始搭建一个最简单的使用 Direct2D1 的 DirectX 应用.本文属于入门级博客,期望本文能让大家了解 Vortic ...

  6. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  7. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  8. 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

    在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...

  9. dotNet Core开发环境搭建及简要说明

    一.安装 .NET Core SDK 在 Windows 上使用 .NET Core 的最佳途径:使用Visual Studio. 免费下载地址: Visual Studio Community 20 ...

  10. .NET Core dotnet 命令大全

    dotnet 命令大全,让你理解dotnet 命令. 本文将以一个实例串起 dotnet 所有命令,让你玩转dotnet 命令. 本篇文章编写环境为windows 10 ,dotnet 命令同样适用于 ...

随机推荐

  1. 记一次 .NET某游戏后端API服务 CPU爆高分析

    一:背景 1. 讲故事 前几天有位朋友找到我,说他们的API服务程序跑着跑着CPU满了降不下去,让我帮忙看下怎么回事,现在貌似民间只有我一个人专注dump分析,还是申明一下我dump分析是免费的,如果 ...

  2. IDEA 突然无法打开 解决办法

    如果实在没有方法了可以试一试 删除所有的配置文件,默认位置C:\Users\${你的用户名}\${.IntelliJIdea+版本} 注意:删除配置后之前所有的设置都会失效,谨慎操作.

  3. SDC可伸缩的高维约束基准和算法

    可伸缩的高维约束基准和算法 ​ 在过去二十年里,进化约束多目标优化受到了广泛的关注和研究,并且已经提出了一些基准测试约束多目标进化算法(CMOEAs).特别地,约束函数与目标函数值有紧密的联系,这使得 ...

  4. WebRTC开源框架

    1.什么是WebRTC WebRTC (Web Real-Time Communications)是一项实时通讯的技术,旨在使得浏览器能为实时通信提供简单的JavaScript接口,让浏览器通过JS实 ...

  5. KingbaseES查找慢查询语句和阻塞会话

    在处理数据库性能问题时,识别和分析慢查询及阻塞会话是至关重要的步骤.数据库管理员和开发人员常常需要依赖特定的工具和查询语句来追踪这些性能瓶颈. 当数据库响应变慢或出现处理延迟时,第一步通常是查找那些执 ...

  6. KingbaseES角色和权限介绍

    KingbaseES 使用角色的概念管理数据库访问权限.为了方便权限管理,用户可以建立多个角色,对角色进行授权和权限回收,并把角色授予其他用户. 数据库初始化时,会创建一个超级用户的角色:system ...

  7. 抗噪液晶屏驱动芯片VK2C22A/B适用于单相电表段码驱动,水瓦斯表段码表、驱动等

    产品型号:VK2C22A/B 产品品牌:永嘉微电/VINKA 封装形式:LQFP52/48.DICE(COB邦定片).COG(邦定玻璃用) 产品年份:新年份 (C21-285) VK2C22A/B概述 ...

  8. #高精度,排列组合、dp#JZOJ 2755 树的计数

    题目 求\(n\)个点直径为\(d\)的标号树个数(多组数据) (\(0\leq d\leq n\leq 50,n>0\)) 分析 首先特判一下\(n==d\)无解,\(d=0\)除非只有一个点 ...

  9. OpenHarmony社区运营报告(2022年9月)

    篇首语 在开放原子开源基金会.OpenAtom OpenHarmony(简称"OpenHarmony")工作委员会.会员及共建单位和开发者的共同努力下,OpenHarmony在技术 ...

  10. Hi3861 通过UART串口协议与其它开发板进行通信

    一.搭建编译环境 1.下载虚拟机VMware和Ubuntu20.0.14 下载 VMware Workstation Pro | CN https://www.vmware.com/cn/produc ...