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 命令同样适用于 ...
随机推荐
- HTML(html结构、标签导读 、路径))
HTML第一天 我们接下来是进行的网页开发网页的相关概念: 什么是网页? 什么是HTML? 网页的形成? 一 什么是网页: 1.网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内 ...
- Web Audio API 第2章 完美的播放时机控制
Web Audio API 第2章 完美的播放时机控制 相较于 标签, Web Audio API 拥有低延迟精确定时模型. 低延时对于游戏或交互式应用来说非常重要,因为交互操作时要快速响应给用户的听 ...
- C#调用HTTP POST请求上传图片
public static string UploadImage(string uploadUrl, string imgPath, string fileparameter = "file ...
- windows 远程桌面 复制粘贴 无效
rdpclip.exe进程没有运行或运行异常. rdpclip 是让rdp协议(远程桌面协议)可以通过远程复制文件的,如果你使用rdp(3389)远程连接别人或者被别人连接,通常这个进程都会启动,他的 ...
- KingbaseESV8R6表空间与数据库,模式,表的关系
自定义表空间的作用 使用多个表空间可以更灵活地执行数据库操作.当数据库具有多个表空间时,您可以: 1.将用户数据与系统表数据分开存储在不同性能的存储上,以减少I/O争用. 2.将一个应用程序的数据与另 ...
- .NET 8使用日志功能以及自定义日志提供程序
.NET 8使用日志功能以及自定义日志提供程序 日志级别 下表列出了 LogLevel 值.方便的 Log{LogLevel} 扩展方法以及建议的用法: 展开表 LogLevel "值&qu ...
- 【中秋国庆不断更】OpenHarmony多态样式stateStyles使用场景
@Styles和@Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式.这就是我们本章要介绍的内容stateStyles(又称为:多态样式). ...
- OpenHarmony集成OCR三方库实现文字提取
1. 简介 Tesseract(Apache 2.0 License)是一个可以进行图像OCR识别的C++库,可以跨平台运行 .本样例基于Tesseract库进行适配,使其可以运行在OpenAtom ...
- DevEco Device Tool 助力OpenHarmony设备开发
DevEco Device Tool 为设备开发者提供一站式的开发环境和资源获取通道,实现了从芯片模板工程创建.到开发资源挑选定制,再到快速编码.轻小型系统调试调优.烧录环节的全流程覆盖,帮助开发者实 ...
- Docker 12 Dockerfile
简介 Dockerfile 是用来构建 Docker 镜像的文件,可以理解为命令参数脚本. Dockerfile 是面向开发的,想要打包项目,就要编写 Dockerfile 文件. 由于 Docker ...