C# 是不是本机使用 GPU 进行图形处理?

Posted

技术标签:

【中文标题】C# 是不是本机使用 GPU 进行图形处理?【英文标题】:Does C# natively use GPU for graphics?C# 是否本机使用 GPU 进行图形处理? 【发布时间】:2015-10-11 01:25:51 【问题描述】:

我想以最快的方式绘制大量使用的图形。如果我使用标准 C# 图形回调(es.graphics.drawline),我做得对吗?还是我要使用不同的库?

【问题讨论】:

为什么要投反对票,这个问题不傻? 你使用的是winforms还是wpf? @YvesDaoust 似乎在没有正当理由的情况下进行了很多反对投票,但是如果您阅读了对该问题的第一条评论,那么您会发现有些人只是“那样!” ...meta.stackexchange.com/questions/135/… 也许你可以使用一个库来将 c# 转换为 cuda 检查 this 回答如果你不能直接使用 cuda Graphics 类使用传统的视频驱动程序接口,它已经被 2D 加速了几十年。实际实现它取决于视频驱动程序,现代驱动程序使用 GPU 资源的可能性非零。但这是完全不可见的,在谈论 System.Drawing.Graphics 时,没有程序员会使用这个术语。您需要 DirectX 才能真正利用 GPU 渲染,例如 WPF 或 Modern UI 提供的。 【参考方案1】:

Graphics.DrawLine 是一个 GDI+ 调用。如果您使用 Windows 窗体并使用 System.Drawing 类进行绘图,则您使用的是 GDI+,它不是硬件加速的。要获得硬件加速,您需要使用 WPF 代替 WinForms 或使用 Direct3D/Direct2D 进行绘图。后两者(Direct3D/Direct2D)是基于 COM 的,因此您需要一个 .NET 包装器。 Microsoft 将 Direct3D for .NET 与托管 DirectX 和 XNA 打包在一起。两者(我相信)现在都已弃用。还有更新的 DirectX 库的 third-party wrappers。

编辑:我刚刚从@HansPassant 的评论中得知 GDI+ 是 2D 加速的。我认为这仅适用于 GDI(而不是 GDI+),因为 GDI+ 处理诸如抗锯齿之类的事情(据我所知)2D 硬件没有这样做。但显然我错了。

【讨论】:

只想提一下MonoGame 在 XNA 使用的同一个 API 中封装了 directX 或 OpenGL,但仍在积极维护中, 除此之外,我强烈推荐 SharpDX 作为 DirectX 的托管包装器。

以上是关于C# 是不是本机使用 GPU 进行图形处理?的主要内容,如果未能解决你的问题,请参考以下文章

GPU渲染流程

C# 中的简单游戏,只有本机库

Android图形系统系统篇之HWC

如何使用 GPU 高效地渲染和处理视频流?

-图形处理单元-3.2-GPU管线概览

图形基础 GPU架构背景