4
4
#include < vector>
5
5
6
6
#include " RaycastingCameraViewport.hpp"
7
+ #include " Utils/DrawingHelper.hpp"
7
8
8
9
class RenderingOrchestrator
9
10
{
@@ -18,23 +19,17 @@ class RenderingOrchestrator
18
19
19
20
if (play)
20
21
{
21
- InitilizeFrame (world, cam);
22
-
23
- if (rasterizer.IsRenderIterationRemains ())
22
+ AllRenderItr (world, cam);
23
+ }
24
+ else
25
+ {
26
+ switch (invokeEvent)
24
27
{
25
- OneRenderItr (true );
28
+ case StepInto: OneRenderItr (world, cam); break ;
29
+ case StepOver: AllRenderItr (world, cam); break ;
26
30
}
27
31
28
- while (rasterizer.IsRenderIterationRemains ())
29
- {
30
- OneRenderItr (false );
31
- }
32
- }
33
- else if (stepByStepNewFrame)
34
- {
35
- stepByStepNewFrame = false ;
36
- InitilizeFrame (world, cam);
37
- OneRenderItr (true );
32
+ invokeEvent = None;
38
33
}
39
34
}
40
35
@@ -64,67 +59,75 @@ class RenderingOrchestrator
64
59
}
65
60
}
66
61
67
- void OneRenderItr ( bool firstItr )
62
+ void AllRenderItr (World &world, RaycastingCamera &cam )
68
63
{
69
- if (rasterizer. IsRenderIterationRemains ())
64
+ do
70
65
{
71
- auto & renderTexture = cameraViewport.GetRenderTexture ();
72
-
73
- BeginTextureMode (renderTexture);
74
-
75
- if (firstItr)
76
- {
77
- ClearBackground (MY_BLACK);
78
- }
66
+ OneRenderItr (world, cam);
67
+ } while (rasterizer.IsRenderIterationRemains ());
68
+ }
79
69
80
- rasterizer.RenderIteration ();
81
- EndTextureMode ();
70
+ void OneRenderItr (World &world, RaycastingCamera &cam)
71
+ {
72
+ if (!rasterizer.IsRenderIterationRemains ())
73
+ {
74
+ InitilizeFrame (world, cam);
75
+ }
82
76
83
- auto & ctx = rasterizer.GetContext ();
84
- assert (rasterizingItrsTextures.size () >= ctx.currentRenderItr );
77
+ assert (rasterizer.IsRenderIterationRemains ());
85
78
86
- auto & texture = rasterizingItrsTextures.at (ctx.currentRenderItr - 1 );
79
+ auto & renderTexture = cameraViewport.GetRenderTexture ();
80
+ auto & ctx = rasterizer.GetContext ();
81
+
82
+ BeginTextureMode (renderTexture);
87
83
88
- if (texture. id == 0 )
84
+ if (ctx. currentRenderItr == 0 )
89
85
{
90
- texture = LoadRenderTexture (renderTexture. texture . width , renderTexture. texture . height );
86
+ ClearBackground (MY_BLACK );
91
87
}
92
88
93
- BeginTextureMode (texture);
94
- DrawTexture (renderTexture.texture , 0 , 0 , WHITE);
95
- EndTextureMode ();
96
- }
97
- else
89
+ rasterizer.RenderIteration ();
90
+
91
+ EndTextureMode ();
92
+
93
+ assert (rasterizingItrsTextures.size () >= ctx.currentRenderItr );
94
+ assert (ctx.currentRenderItr > 0 );
95
+
96
+ auto & texture = rasterizingItrsTextures.at (ctx.currentRenderItr - 1 );
97
+
98
+ if (texture.id == 0 )
98
99
{
99
- stepByStepNewFrame = true ;
100
+ texture = LoadRenderTexture (renderTexture. texture . width , renderTexture. texture . height ) ;
100
101
}
102
+
103
+ BeginTextureMode (texture);
104
+ DrawTextureFlippedY (renderTexture.texture , 0 , 0 , WHITE);
105
+ EndTextureMode ();
101
106
}
102
107
103
108
void DrawGUI ()
104
109
{
105
110
ImGui::Begin (" Rendering" );
106
111
107
- if (ImGui::Button (" Play" ))
112
+ constexpr const char * LabelPlay = " Play" ;
113
+ constexpr const char * LabelPause = " Pause" ;
114
+
115
+ if (ImGui::Button (!play ? LabelPlay : LabelPause))
108
116
{
109
- play = true ;
117
+ play = !play ;
110
118
}
111
119
ImGui::SameLine ();
112
- if (ImGui::Button (" Pause" ))
113
- {
114
- play = false ;
115
- stepByStepNewFrame = true ;
116
- }
117
- ImGui::SameLine ();
118
120
if (ImGui::Button (" > Step" ) && !play)
119
121
{
120
- OneRenderItr (stepByStepNewFrame) ;
122
+ invokeEvent = StepInto ;
121
123
}
122
124
ImGui::SameLine ();
123
125
if (ImGui::Button (" >> Step" ) && !play)
124
126
{
125
-
127
+ invokeEvent = StepOver;
126
128
}
127
129
130
+ // Render Iterations UI
128
131
{
129
132
auto & ctx = rasterizer.GetContext ();
130
133
@@ -145,13 +148,11 @@ class RenderingOrchestrator
145
148
146
149
private:
147
150
RaycastingCameraViewport& cameraViewport;
148
-
149
- // Step By step
150
- bool play = true ;
151
- bool stepByStepNewFrame = false ;
152
-
153
151
WorldRasterizer rasterizer;
154
152
153
+ bool play = true ;
154
+ enum InvokeEvent { None, StepInto, StepOver };
155
+ InvokeEvent invokeEvent { None };
155
156
std::vector<RenderTexture> rasterizingItrsTextures;
156
157
};
157
158
0 commit comments