前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dotnet C# 通过 Vortice 使用 Direct2D 的 ID2D1CommandList 入门

dotnet C# 通过 Vortice 使用 Direct2D 的 ID2D1CommandList 入门

作者头像
林德熙
发布2023-06-06 15:36:23
2030
发布2023-06-06 15:36:23
举报
文章被收录于专栏:林德熙的博客

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

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

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

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

代码语言:javascript
复制
        ID2D1CommandList CreateCommandList()
        {
            ...
        }

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

代码语言:javascript
复制
            ID2D1CommandList commandList = renderTarget.CreateCommandList();

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

代码语言:javascript
复制
            var originTarget = renderTarget.Target;
            ID2D1CommandList commandList = renderTarget.CreateCommandList();
            renderTarget.Target = commandList;

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

代码语言:javascript
复制
            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 设置回原先的对象

代码语言:javascript
复制
            commandList.Close();

            renderTarget.Target = originTarget;

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

代码语言:javascript
复制
                // 开始绘制逻辑
                renderTarget.BeginDraw();

                // 清空画布
                renderTarget.Clear(new Color4(0xFF, 0xFF, 0xFF));

                using ID2D1CommandList commandList = CreateCommandList();
                ID2D1Image image = commandList;

                renderTarget.DrawImage(image);

                renderTarget.EndDraw();

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

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

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

代码语言:javascript
复制
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 08dae017fae148b8eb014a08296ac2f81da218d7

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

代码语言:javascript
复制
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 08dae017fae148b8eb014a08296ac2f81da218d7

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档