dotnet C# 通过 Vortice 使用 Direct2D 的 ID2D1CommandList 入门
本文将告诉大家如何通过 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 绘制到画布上
本文所有代码放在 github 和 gitee 上,可以通过以下方式获取整个项目的代码
先创建一个空文件夹,接着使用命令行 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 入门的更多相关文章
- .NET 2.0 参考源码索引
http://www.projky.com/dotnet/2.0/Microsoft/CSharp/csharpcodeprovider.cs.htmlhttp://www.projky.com/do ...
- 在CentOS7 开发与部署 asp.net core app笔记
原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...
- 官宣 MAUI 在.NET Preview 3的最新进展
我们在.NET 6 Preview 3中交付了.NET多平台应用UI的移动和桌面开发的最新进展.此版本添加了Windows平台和WinUI 3,改进了基本应用程序和启动构建器,添加了原生生命周期事件, ...
- Win2D 官方文章系列翻译 - 与 Direct2D 互操作
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-interop-with-direct2d/ Win2D 作为 Direct2D 的上层实现,支持与其进行双向 ...
- DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色
本文将告诉大家如何使用 Vortice 底层库从零开始,从一个控制台项目,开始搭建一个最简单的使用 Direct2D1 的 DirectX 应用.本文属于入门级博客,期望本文能让大家了解 Vortic ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...
- dotNet Core开发环境搭建及简要说明
一.安装 .NET Core SDK 在 Windows 上使用 .NET Core 的最佳途径:使用Visual Studio. 免费下载地址: Visual Studio Community 20 ...
- .NET Core dotnet 命令大全
dotnet 命令大全,让你理解dotnet 命令. 本文将以一个实例串起 dotnet 所有命令,让你玩转dotnet 命令. 本篇文章编写环境为windows 10 ,dotnet 命令同样适用于 ...
随机推荐
- Linux文件查找、三剑客、正则表达式
Linux文件查找 1.find查找概述 为什么要有文件查找,因为很多时候我们可能会忘了某个文件所在的位置,此时就需要通过find来查找. find命令可以根据不同的条件来进行查找文件,例如:文件名称 ...
- django(Ajax、自定义分页器、form组件)
一.Ajax 1 概述 异步提交局部刷新 例子:github注册 动态获取用户名实时的跟后端确认并实时展示到前端(局部刷新) 朝后端发送请求的方式 1.浏览器地址栏直接输入url回车 GET请求 2. ...
- ItemTouchHelper 实现交互动画
目录介绍 01.拖拽需要实现功能 02.几个重要的方法说明 03.简单实现思路 04.拖拽效果上优化 05.完整代码展示 好消息 博客笔记大汇总[16年3月到至今],包括Java基础及深入知识点,An ...
- 【K8S】Kubernetes中暴露外部IP地址来访问集群中的应用
本文是Kubernetes.io官方文档中介绍如何创建暴露外部IP地址的Kubernetes Service 对象. 学习目标 运行Hello World应用程序的五个实例. 创建一个暴露外部IP地址 ...
- 开源鸿蒙(OpenHarmonyOS)代码下载及编译
开源鸿蒙的代码仓在码云上,可以通过以下命令下载源码并编译 本机安装虚拟机 如本地已经安装可以忽略此步 安装指导:https://thoughts.teambition.com/share/614c49 ...
- 从bootstrap源码中学习Sass(一)
可以在github看代码,非常方便:https://github.com/twbs/bootstrap/blob/main/scss/_variables.scss 就是有时候网络差. 基础用法 sc ...
- #错排,高精度#洛谷 3182 [HAOI2016]放棋子
题目 分析 这题目太迷惑人了: 每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列 \(n\) 个棋子也满足每行只有一枚棋子,每列只有一枚棋子 仔细想想会发现求的是错排方案,那也就 ...
- OpenHarmony 3.2 Beta Audio——音频渲染
一.简介 Audio是多媒体子系统中的一个重要模块,其涉及的内容比较多,有音频的渲染.音频的采集.音频的策略管理等.本文主要针对音频渲染功能进行详细地分析,并通过源码中提供的例子,对音频渲染进行流程的 ...
- Go 项目依赖注入wire工具最佳实践介绍与使用
目录 一.引入 二.控制反转与依赖注入 三.为什么需要依赖注入工具 3.1 示例 3.2 依赖注入写法与非依赖注入写法 四.wire 工具介绍与安装 4.1 wire 基本介绍 4.2 安装 五.Wi ...
- Go 语言 Printf 函数和格式化动词详解
Printf() 函数可以使用多种格式化动词对输出进行格式化.下面是可以与所有数据类型一起使用的一些通用格式化动词: 以下动词适用于所有数据类型: 动词 描述 %v 以默认格式打印值 %#v 以 Go ...