2014-03-30 105 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

感謝您的回覆。 通常位圖會更快。 但我的問題是,我想在運行時繪製各種形狀。(沒有使用位圖) –