gpt4 book ai didi

graphics - Skia 或 Direct2D 如何使用 GPU 渲染线或多边形?

转载 作者:行者123 更新时间:2023-12-05 04:44:37 32 4
gpt4 key购买 nike

这是一道理解二维矢量图GPU加速渲染原理的题。

使用 Skia 或 Direct2D,您可以绘制例如圆角矩形,贝塞尔曲线,多边形,还有一些效果,比如模糊。

Skia/Direct2D 提供基于 CPU 和 GPU 的渲染。

对于 CPU 渲染,我或多或少可以想象呈现一个圆角矩形。我已经见过很多不同的线条渲染算法。

但是对于 GPU,我没有太多线索。

  • 圆角矩形是由三角形组成的吗?
  • 圆角矩形是否完全由野生像素着色器绘制?

是否有一些基本示例可以向我展示这些东西如何工作的基本原理?

(可能,解决方案也可以在 Skia 的源代码中找到,但我担心它会太复杂/通用,以至于像我这样的菜鸟不会理解任何东西。)

最佳答案

在 direct2d 的情况下,没有源代码,但由于它在引擎盖下使用 d3d10/11,所以很容易看到它在幕后使用 Renderdoc 做了什么。

基本上,d2d 倾向于通过尝试将任何几何类型放入单个缓冲区来最小化绘制调用,而 skia 则根据形状类型具有一些专用着色器集。

因此,例如,如果您绘制一条贝塞尔曲线路径,Skia 将在可能的情况下尝试使用曲面分割着色器(如果您之前渲染的元素是矩形,则需要一个新的绘制调用),因为您更改了管道状态。

另一方面,D2D 倾向于在 CPU 上分割,并推送到某个顶点缓冲区,并且仅当您更改画笔类型时才切换绘制调用(如果您从一种纯色画笔更改为另一种,它可以保持相同的着色器,所以它不会切换),或者当缓冲区已满,或者如果您从形状切换到文本(因为它随后需要发送纹理图集)。

请注意,当分割贝塞尔曲线路径时,D2D 在使生成的几何体非自相交方面做了非常出色的工作(因此即使在一些复杂的自相交路径上,alpha 混合也能正常工作)。

在圆角矩形的情况下,它做同样的事情,只是镶嵌成三角形。

这允许它在很大程度上减少绘制调用,并允许在非 msaa 表面上进行抗锯齿(这是在网格级别完成的,带有一些带 alpha 的小三角形)。它的缺点是它没有使用太多的硬件功能,并且发出的几何图形可能非常高,即使对于看似简单的形状也是如此。

由于 d2d 更喜欢使用三角形带或三角形列表,因此在绘制简单的三角形列表时它可以做一些非常有趣的事情。

对于文本,d2d 使用实例化并为每个字符绘制一个实例化的四边形,它也擅长对这些进行批处理,因此如果您连续多次调用某些绘制文本函数,它会尝试将其合并为一个调用,如下所示好吧。

关于graphics - Skia 或 Direct2D 如何使用 GPU 渲染线或多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69329652/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com