2014-03-30 108 views
4

我想了解使用SDL 2.0的整个2D加速渲染过程。
所以我的问题是哪个将是最有效的方式在屏幕上画圈和为什么SDL加速渲染

的一些方法是:

  • 首先创建一个软件表面,然后绘制表面上进行必要的像素,然后创建一个纹理的是表面的,最后复制的纹理渲染目标。

  • 也是另一种实现是使用多次以画圆的SDL_RenderDrawLine.And我觉得这是它在SDL正在实施方式2.0 GFX

或者有更有效的方式做到所有这些?

如果我想手动绘制其他形状,可能无法使用SDL提供的2D渲染API(使用绘制线或矩形)轻松渲染该问题。

回答

1

以圈子为例,这是一个相当复杂的问题,它更多地基于您希望实现的视觉质量,这将推动性能。如果你很乐意使用60行代码,这些代码几乎可以无缝地工作在小的形状上,但是如果按比例放大将会看起来并不像一个圆圈,性能可能会更好(取决于用户的硬件)。请注意,SDL_RenderDrawLines对许多行来说要快得多,因为它避免了大量用于呈现调用的上下文切换。

但是,如果您需要一个非常准确的圆与数千行来获得一个很好的近似,它将更快地简单地使用位图和缩放和blit它。这也会给你一个“平滑”的感觉。

在我个人看来,我不认为硬件加速渲染API有一些特殊用途,比如图形渲染和可能非常简单的GUI绘图。对于更复杂的任何事情,我通常会使用基于位图的绘图。

关于第二部分,它又取决于你需要绘制的任何弧的精度。如果你可以很容易地将形状近似成几十行,它将会很快,否则像素方法会更好。

+0

当我们使用线条绘制方法在屏幕上绘制圆时,我们是不是通过只绘制水平线来实现它? 因此,对于一个高度为600像素的圆圈而言,无论您想绘制多少精度,都不会有600个线条图(其中一些实际上很多也可以绘制为矩形)。 我认为准确性的问题来自于当你决定在哪里画线和结束时(总是在水平轴上)。 与表面同样的逻辑。 –

+0

@LanPac啊,我还没有意识到你一直指的是无纹理的实心圆圈。我曾以为你指的是空心的。但是,如果是这种情况,那么性能方面的差别就会很小。唯一的区别将是效果,位图将允许您使用平滑或亚像素渲染实现反锯齿外观,线条绘制更清晰,性能会有所不同。 – Vality

+0

感谢您的回复。 通常位图会更快。 但我的问题是,我想在运行时绘制各种形状。(没有使用位图) –