我正在創建基於SDL2庫的簡單遊戲渲染引擎。我的設計看起來類似於這個ASCII圖。SDL2:渲染引擎設計
DrawTarget RenderTarget
| |
| |
+---> Window <---+
DrawTarget
是適合於SDL_Surface blitting的繪圖目標的抽象類。 RenderTarget
是適合SDL_Texture渲染目標的抽象類。 Window
是派生類,管理SDL_Window,SDL_Renderer和所有繪製和繪製函數。
Renderable
| | |
| | |
| | +-> Player
| | ^
| | |
| +----> Animation
| ^
| |
+-------> Texture
Renderable
是一切,它可以渲染到屏幕或其他RenderTarget。 Texture
是SDL_Texture實現。紋理不應該知道自己的位置。 Animation
有一個私人紋理成員,允許設置動畫幀。動畫本身不應該知道渲染的位置。 Player
有私人動畫成員。玩家應該知道當前的位置。
在這個時候,我有一個SDL_Renderer
每個窗口,並通過它所有紋理,動畫等紋理與SDL_Renderer
知識回報在屏幕上。但我不認爲始終調用Texture-> draw(x,y)是有效的並且緩存友好。
我喜歡SFML呈現的方式。所有可渲染對象都有draw
方法,它只調用窗口的繪製方法。我想實施類似的系統。
這將破壞我的需求一些Renderable對象知道他們的渲染位置,有些不會。
例如class Player不應該有render(x, y)
方法,因爲它知道它的位置。另一方面,Texture類不應該有render(void)
方法,因爲它沒有它的位置。
我的問題如下:如何設計SDL2合適的渲染引擎儘可能少的開銷?
我認爲你的問題太寬泛了,你想在這裏解決什麼具體問題? – paulm
你可以讓對象畫自己,或者渲染器畫對象。我會建議後者根據經驗。您可以將弱指針存儲到容器中的可繪製對象,並在需要時讓渲染器遍歷它。 – OMGtechy
@paulm我想創建通用的渲染引擎,它應該能夠渲染位置(播放器)或沒有位置(紋理,動畫)的對象。 – Lorin