我试图了解使用SDL 2.0的整个2D加速渲染过程 所以我的问题是在屏幕上绘制圆圈的最有效方法是什么?为什么?
有些方法是:
首先创建一个软件表面,然后在该表面上绘制必要的像素,然后从该表面创建一个纹理,最后将该纹理复制到渲染目标。
另外一种实现方法是使用SDL_RenderDrawLine多次绘制一个圆圈。我认为这是在SDL 2.0 gfx中实现的方式
或者有更有效的方法来完成所有这些工作?
如果我想手动绘制其他形状,可能更难以使用SDL提供的2D渲染API(使用绘制线或矩形)来渲染其他形状。
答案 0 :(得分:1)
以圆圈为例,这是一个相当复杂的问题,它更多地基于您希望实现的视觉质量,这将提高性能。如果您愿意使用60条线条,那么绘制大量的短线将根据您希望得到的圆圈的接近程度而有很大差异,这些线条几乎可以无缝地对小形状起作用,但如果按比例放大则看起来不是一个圆圈,性能可能会更好(取决于用户的硬件)。另请注意,对于许多行,SDL_RenderDrawLines会快得多,因为它避免了大量用于渲染调用的上下文切换。
但是,如果你需要一个非常精确的数千行的圆来获得一个很好的近似,那么简单地使用一个位图并缩放和blit就会更快。这也会让你更顺畅。感觉到这个圈子。
在我个人看来,我不认为硬件加速渲染API在某些特殊用途之外有很多用途,例如图形渲染和可能非常简单的GUI绘图。对于任何更复杂的东西,我通常会使用基于位图的绘图。
关于第二部分,它还取决于您需要绘制的任何弧的精度。如果你可以很容易地将形状近似为几十行,那么它会很快,否则像素方法会更好。