WPF 使用 Composition API 做高性能渲染

wpf 中,许多开发者会遇到渲染性能的问题。尽管 wpf 的渲染性能比浏览器渲染要高出不少,但仍然无法满足游戏级别的渲染需求。wpf 使用的 directx 版本仅优化到 9 级别,与 directx 9 的性能相当。鉴于开发者的需求,微软推出了现代渲染方法——composition api,这是一个 ui 应用的里程碑技术。

目前,这个技术还处于最小可用版本阶段,但已经可以尝试使用。

首先,需要将系统更新到 1803 或更高版本。如果您想成为 Windows 开发者,则需要确保系统是最新的。

接着,下载并安装 Visual Studio 2019 的最新版本,并安装 .NET Core 3.0 的预览版。

官方下载链接:Visual Studio 2019 和 .NET Core

下载运行代码,可以从 GitHub 官方仓库 https://www.php.cn/link/508cb643c0ea0e2f6451bba7aa5cfb64 获取最新代码,并尝试编译运行。

打开

dotnetWPFHelloComposition

目录中的解决方案,确保使用 Visual Studio 2019 打开。

通过 NuGet 还原两个库:Microsoft.Windows.SDK.Contracts,这是一个包含桌面使用的 Windows Runtime API 的库,以及 System.Numerics.Vectors,用于支持向量计算。

HelloComposition 是一个最简单的项目,可以通过这个项目了解使用方法。

由于这个项目目前仍处于预览阶段,建议使用命令行进行编译。我在开始时发现这个项目使用的是旧版的 csproj 格式,并且无法直接在 Visual Studio 2019 中编译成功。因此,我将项目格式更新为新格式,通过命令行还原并编译后,就可以在 Visual Studio 2019 中进行调试。

修改方法是用以下代码替换 HelloComposition.csproj 文件,并删除

HelloCompositionPropertiesAssemblyInfo.cs

文件:

      WinExe    netcoreapp3.0    true              10.0.17763.144-preview              4.5.0      

如果不想自己修改 csproj 文件,可以下载我修改后的版本,并通过命令行进行还原和编译:

# 进入 HelloComposition.sln 所在的文件夹dotnet restore # 如果还原失败,可以参考我收集的各种公有 NuGet 源:https://walterlv.com/post/public-nuget-sources.htmldotnet build

如果编译成功,就可以在 Visual Studio 2019 中点击运行调试。如果编译失败,欢迎加入 .NET 职业技术学院交流群。

运行后可以看到以下图片:

WPF 使用 Composition API 做高性能渲染

项目主要代码是如何编写的呢?

主要代码集中在 CompositionHostControl 这个普通的 UserControl 控件中。在控件加载时,将其内容,即一个名为 CompositionHostElement 的 Border 的内容,修改为 CompositionHost 的方法。

CompositionHost 是一个自定义的 HwndHost 方法,通过 HwndHost 可以指定为 Host 一个句柄,从而让 WPF 使用两种不同的渲染方法。

在 CompositionHost 中创建了一个新窗口,并使用 HwndHost 将其显示在 WPF 窗口之上。因此,使用 CompositionHost 的控件将显示在其他任何 WPF 控件的上面,在 CompositionHost 控件的 Bounds 范围内,不能使用其他 WPF 控件。这与在 WPF 中使用其他渲染方法的窗口类似,也是在 WPF 中使用 WinForms 或 UWP 控件的技术。

CompositionHost 的主要代码是 InitComposition 方法,在这里通过黑科技方法创建了 Composition。由于我不了解这些黑科技,所以就跳过了。

跳过这个类后,其余代码非常简单,可以看到方法接口与 UWP 类似。在

CompositionHostControl_Loaded

方法中返回了 Compositor 字段,其使用方式与 UWP 相同。

private void CompositionHostControl_Loaded(object sender, RoutedEventArgs e){    // 如果用户更改了屏幕的 DPI 缩放设置,CompositionHostControl 将重新加载。    // 如果已经设置过,则不重复设置。    if (compositionHost is null)    {        currentDpi = VisualTreeHelper.GetDpi(this);        compositionHost = new CompositionHost(CompositionHostElement.ActualHeight, CompositionHostElement.ActualWidth);        // 手动高亮,下面的代码将 CompositionHostElement 这个 Border 的内容修改为 CompositionHost 这个 HwndHost,通过 Host 一个窗口的方法        CompositionHostElement.Child = compositionHost;        // 手动高亮,下面的代码返回 Compositor 字段        compositor = compositionHost.Compositor;        // 手动高亮,下面的代码返回 ContainerVisual 字段        containerVisual = compositor.CreateContainerVisual();        compositionHost.Child = containerVisual;    }}

在点击按钮时,创建一个 SpriteVisual 并加入到 ContainerVisual 中,然后进行 Vector3KeyFrameAnimation 动画。

这里的代码接口与 UWP 相同,因此不再详细介绍如何使用。

通过 HwndHost 方法获取一个窗口的句柄并不是直接在 WPF 中使用 Composition,而是在创建一个窗口时使用 Composition,因为 WPF 的渲染与 Composition 的渲染不同。

由于使用了这种技术,会存在一些问题,下面将详细介绍。

通过 COM 等方法调用额外的系统相关接口,如果只是创建一个空白窗口,是无法直接使用 Composition API 的,需要使用一些黑科技,这些代码都在

CompositionHost

中。由于我也看不懂,所以就跳过了。

如果想了解更多,请参考 Using the Visual Layer with WPF。

将 Visual Layer 的内容封装在 WPF 的用户控件中,CompositionHostControl 这个用户控件使用了封装的 Visual Layer,其内部代码与 UWP 相同。

如何使用可以参考 UWP 的 Visual Layer 文档。

预览代码中主要用到的类有三个:

CompositionHost:连接 WPF 的渲染和 UWP 的 Visual Layer,也是这个项目的主要代码。官方建议直接复制这个类中的代码,参考 Create an HwndHost derived class to host composition elements。CompositionHostControl:使用封装后的方法,简单介绍如何添加 Visual 和动画。主窗口:里面放了一个按钮和 CompositionHostControl,代码非常简单。

尽管可以在 WPF 中使用 Composition API 制作出美观的界面,但由于主要技术是通过 HwndHost 方法,这种方法尚未正式使用,因此存在以下不足:

特效依赖于 Win2d,但目前 Win2d 尚未支持桌面的 NuGet 库,需要编译源代码。不过很快就可以通过 NuGet 直接使用。如果需要交互命中测试,需要在代码中计算 Visual Layer 的 Bounds。与在 UWP 中通过 XAML 的方法简单绑定对应的命中测试相比,这并不简单。不过很快就会有封装的方法。目前的 Visual Layer 尚未支持渲染文本,但可以通过 SharpDX 的方法渲染,很快就可以原生支持。由于使用的是 Host 技术,不能在 DPI 修改时自动缩放,需要编写大量代码进行适配。

如果上述几个问题都可以解决,那么下面的问题就是原理上的问题。由于使用了 HwndHost 方法,使用了两种渲染方法,在使用 UWP 渲染方法的范围内,窗口的最上层将无法放置任何 WPF 的像素,同时也存在焦点等问题。

以上就是WPF 使用 Composition API 做高性能渲染的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/175594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 04:50:29
下一篇 2025年11月1日 04:52:29

相关推荐

  • 全球十大比特币交易平台最新排行榜

    在数字货币的浪潮中,比特币交易平台扮演着至关重要的角色,它们为全球用户提供了买卖、存储和管理比特币的渠道。随着加密货币市场的不断发展和成熟,交易平台的选择也日益多样化。一个安全、稳定、功能齐全且用户体验良好的交易平台,对于投资者而言至关重要。本文将为您揭示当前全球排名前列的十大比特币交易平台,并对其…

    2025年12月10日 好文分享
    000
  • 7 月伊始,以太坊已跑赢比特币,山寨币季真的来了?

    是,以太坊领涨或预示山寨币季开启,但尚未全面爆发。1. ETF预期升温、生态复苏和质押率上升推动ETH上涨;2. BTC dominance下降、板块轮动初现及流动性改善构成潜在信号;3. 风险包括比特币虹吸效应、监管不确定性和资金量能不足;4. 结论认为需BTC dominance持续下降、ETH…

    2025年12月10日
    000
  • 币安app在哪下载 币安app下载官网

    币安作为全球知名的数字资产服务平台,其移动应用程序(app)为用户提供了随时随地进行交易和管理资产的便利。为了保障您的账户和资金安全,强烈建议您仅通过官方渠道获取应用程序。 币安官方app: 币安官网直达: 如何安全下载币安App 获取币安App最安全、最可靠的途径是访问其官方网站。这是防止下载到任…

    2025年12月10日
    000
  • 以太坊重回区间高位,突破 2800 美元或点燃山寨币季

    以太坊强势突破2800美元,标志着山寨币季或将全面爆发;1.技术面与资金面共振,ETH日线突破头肩底形态,活跃地址与巨鲸持仓上升,衍生品市场做多情绪浓厚;2.山寨币跟涨效应显现,ETH/BTC汇率逼近0.06关键位,84%前50大山寨币周线收阳,OP、ARB、RNDR、FET等涨幅超30%;3.生态…

    2025年12月10日
    000
  • 币安官网安全进入 币安新版本下载安装

    安全访问币安官方网站的核心方法 网络钓鱼和诈骗网站是数字资产安全的主要威胁。为了保护您的资产,请务必通过正确和安全的方式访问币安官网。 币安官网直达: 币安官方app: 1. 手动输入与书签收藏 访问币安最安全的方式,是手动在浏览器地址栏中输入官方网址。首次确认访问的是真实官网后,立即将其添加到您的…

    2025年12月10日
    000
  • 必安交易平台官方App如何下载 官网下载必安App的详细指引

    必安交易平台是一款在全球范围内广受欢迎的数字资产交易服务应用,为用户提供安全、稳定、便捷的交易体验。它支持多种主流数字资产的交易,并提供丰富的金融工具和衍生品服务。本文将为您提供必安官方app的下载链接和详细的安装指引,您只需点击本文中提供的下载链接,即可轻松获取官方正版应用。 官网App下载步骤 …

    2025年12月10日
    000
  • btc交易正规网站有哪些?2025正规BTC交易平台网站排行榜

    随着数字资产市场的不断成熟,选择一个安全、可靠的比特币(BTC)交易平台对于保障用户资产与交易体验至关重要。面对市场上众多的交易网站,用户需要从安全性、流动性、交易费用以及用户服务等多个维度进行综合评估。本文旨在梳理和介绍一些备受认可的BTC交易网站,并提供一份2025年的参考排行榜,帮助用户做出更…

    2025年12月10日
    000
  • 币圈新手入门指南之首次购买加密货币

    首次购买加密货币需构建合规认知、风险防御与操作框架:1.选择持有香港证监会牌照或与传统券商合作的合规平台,确保资产隔离与反洗钱机制;2.资金配置遵循分散原则,启动资金不超可投资资产10%,采用70%主流币+30%山寨币的杠铃策略,通过合规法币通道入金并远离场外交易陷阱;3.完成KYC认证并启用双重验…

    2025年12月10日
    000
  • 币圈新手入门之避坑指南

    币圈新手避坑需从平台选择、资金管理、骗局识别、策略构建和认知升级五方面入手:1.选择持有香港证监会牌照等合规平台并验证流动性与链上透明度;2.遵循分散配置、小额试错原则,通过合规法币通道入金,避免场外交易陷阱;3.识别资金盘的庞氏特征、社交工程的情感诱导和虚假平台的技术漏洞;4.建立动态止损机制,利…

    2025年12月10日
    000
  • 虚拟货币排名前十的主流币

    当前主流虚拟货币前十名为比特币、以太坊、泰达币、币安币、瑞波币、索拉纳、卡尔达诺、狗狗币、波卡和雪崩协议,它们凭借各自的技术优势和应用场景在市场中占据重要地位,其中比特币作为“数字黄金”具有开创性地位,以太坊通过智能合约推动了DeFi和NFT发展,泰达币作为稳定币提供市场流动性,币安币依托币安生态具…

    2025年12月10日 好文分享
    000
  • Ethena财库策略:稳定币第三帝国的崛起

    目录 双币系统大逃杀真实采用仍未发生结语 2023 年 8 月,makerdao 生态借贷协议 spark 给出 $dai 8% 的年化收益,随后孙割分批进入,累计投入 23 万枚 $steth,最高占 spark 存款量 15% 以上,逼得 makerdao 紧急提案,把利率下调到 5%。 Mak…

    2025年12月10日
    000
  • 波场币TRX行情走势图实时查看app 24小时价格走势k线今天

    波场币(TRX)是基于波场(TRON)协议发行的原生加密货币,TRON致力于构建一个去中心化的全球内容娱乐生态系统,旨在让用户自由地发布、存储和拥有数据。 波场币当前实时价格:根据最新数据,trx币价格为每枚0.3473美元(价格可能因市场波动而变化,具体以app内显示为准),市值约$31.14b。…

    2025年12月10日
    000
  • 比特币BTC今日价格行情 比特币24小时实时汇率K线历史走势图

    比特币(BTC),作为加密货币世界的开创者和无可争议的王者,早已不仅仅是一种数字资产,更是一种席卷全球的金融现象。它以其去中心化、总量恒定的特性,被誉为“数字黄金”,吸引了无数追求前沿技术和资产增值的投资者。 为了方便您快速进入数字货币的世界,本文将为您提供官方App的直接下载通道。您只需点击文中提…

    2025年12月10日
    000
  • 稳定币十大交易平台app下载

    稳定币交易平台在全球范围内扮演着重要角色,为用户提供高效、低风险的交易环境。随着市场需求的增长,越来越多的平台开始支持稳定币交易,但选择一家安全、流动性高的平台至关重要。以下是当前市场上十大稳定币交易平台的排名及特点介绍。 1. Binance 全球最大的加密货币交易平台之一,支持多种稳定币交易对,…

    2025年12月10日 好文分享
    000
  • 香港加密监管新突破!6个合规代币或迎爆发式增长

    香港加密货币监管迎来历史性突破,持牌交易所正式向零售投资者开放,这意味着普通用户可以合法合规地交易主流加密资产。这一政策为市场注入了强大的合规动力,本文将为您盘点首批最有可能受益于香港新规、有望迎来爆发式增长的6大潜力代币。 2025主流比特币交易所: 欧易okx:   币安binance:   火…

    好文分享 2025年12月10日
    000
  • 以太坊今日价格行情在哪里能看到?以太坊实时行情网站推荐

    随着以太坊生态的持续扩展,越来越多用户希望能随时掌握eth价格走势。查看实时行情不但能帮助了解币价变动,还能辅助判断买入与卖出的时机。下面推荐几个主流中文行情网站,适合日常查阅以太坊价格。 交易平台同步行情也值得参考 主流交易所平台App提供同步更新的以太坊实时价格,适合随时随地查看行情。 币安官网…

    2025年12月10日 好文分享
    000
  • 什么是算法稳定币?其价格稳定机制如何?与传统稳定币的区别在哪里?

    1、算法稳定币通过供应调节、智能合约控制、代币激励和预言机数据实现价格锚定1美元的稳定机制;2、主要支持平台包括欧意OKX 、Binance必安、火必HTX和Gate.io大门,分别提供交易流动性与新兴项目入口;3、与传统稳定币相比,其抵押方式为算法而非法币储备,去中心化程度更高,稳定性受市场情绪影…

    2025年12月10日
    000
  • 通过黄金交叉解析比特币走势图表,比特币会再创新高吗?

    目录 什么是黄金交叉,为何它在加密货币中如此重要?比特币图表解析:黄金交叉与150K美元的路径潜在交易设置更宏观的视角:宏观趋势推动牛市预期使用黄金交叉进行比特币价格预测的关键考量常见问题:黄金交叉与比特币价格前景1. 黄金交叉是什么?2. 比特币上次形成黄金交叉是什么时候?3. 黄金交叉是否保证价…

    2025年12月10日 好文分享
    000
  • 狗狗币今日价格行情在哪里能看到?狗狗币实时行情网站推荐

    狗狗币(doge)因其社区氛围和流通活跃度受到不少用户关注,想要了解它的实时价格和走势,选择更新及时、界面友好的行情网站非常重要。以下是几大适合新手使用的狗狗币行情平台推荐。 推荐使用的狗狗币实时行情网站 1、非小号 进入首页即可搜索狗狗币,查看当前价格、涨跌幅、换手率等关键数据,界面清晰,适合初学…

    2025年12月10日 好文分享
    000
  • 莱特币LTC今日价格行情在哪里能看到?莱特币LTC实时行情网站推荐

    莱特币(ltc)作为较早上线的主流加密币种之一,行情波动一直备受关注。想要快速获取其价格变动,推荐使用支持中文、更新及时的行情网站进行查看。以下为适合新手和进阶用户的莱特币实时行情平台推荐。 适合查看莱特币价格的网站推荐 1、非小号 首页即可搜索“莱特币”或“LTC”,查看当前价格、24小时涨跌、交…

    2025年12月10日 好文分享
    000

发表回复

登录后才能评论
关注微信