File tree Expand file tree Collapse file tree 3 files changed +34
-5
lines changed
Expand file tree Collapse file tree 3 files changed +34
-5
lines changed Original file line number Diff line number Diff line change @@ -321,17 +321,22 @@ extension ECSContext {
321321 return shouldRender
322322 }
323323
324- func updateRendering ( into view : GameView , deltaTime : Float ) {
324+ func beginRendering ( ) {
325325 if let performance = performance {
326326 performance. startRenderingSystems ( )
327327 }
328-
328+ }
329+
330+ func updateRendering( into view: GameView , deltaTime: Float , for phase: RenderingSystem . Phase ) {
329331 for system in self . renderingSystems {
332+ guard type ( of: system) . phase == phase else { continue }
330333 self . performance? . beginStatForSystem ( system)
331334 system. willRender ( into: view, withTimePassed: deltaTime, context: self )
332335 self . performance? . endCurrentStatistic ( )
333336 }
334-
337+ }
338+
339+ func endRendering( ) {
335340 if let performance = performance {
336341 performance. endRenderingSystems ( )
337342 performance. finalizeRenderingSystemsFrameTime ( )
Original file line number Diff line number Diff line change 8383
8484 }
8585
86+
87+ /**
88+ The major sort order for rendering systems.
89+
90+ The phase value decides what layer this systems content will be drawn relative to it's owning GameView
91+ */
92+ open class var phase : Phase {
93+ return . afterGameView
94+ }
95+
8696 /**
8797 Provide a sorting order to ensure this system is processed at the right time.
8898
96106 return . dontCare
97107 }
98108}
109+
110+ extension RenderingSystem {
111+ public enum Phase : UInt {
112+ /// Draws before the GameView, resulting in content below
113+ case beforeGameView
114+ /// Draws after the GameView, resulting in content ontop
115+ case afterGameView
99116 }
100117}
101118
Original file line number Diff line number Diff line change @@ -58,12 +58,19 @@ public final class GameView: View {
5858 }
5959
6060 if let gameViewController {
61- let highPrecisionDeltaTime = self . deltaTimeHelper . getDeltaTime ( )
61+ gameViewController . context . beginRendering ( )
6262
63+ let highPrecisionDeltaTime = self . deltaTimeHelper. getDeltaTime ( )
6364 let deltaTime = Float ( highPrecisionDeltaTime)
6465
65- gameViewController. context. updateRendering ( into: self , deltaTime: deltaTime)
66+ // Draw below content
67+ gameViewController. context. updateRendering ( into: self , deltaTime: deltaTime, for: . beforeGameView)
68+ // Draw GameView
6669 gameViewController. render ( context: gameViewController. context, into: self , withTimePassed: deltaTime)
70+ // Draw above content
71+ gameViewController. context. updateRendering ( into: self , deltaTime: deltaTime, for: . afterGameView)
72+
73+ gameViewController. context. endRendering ( )
6774
6875 if mode == . offScreen {
6976 canvas. insert (
You can’t perform that action at this time.
0 commit comments