Skip to content

Commit 8d4a03c

Browse files
committed
Editor : Add Step By Step rendering
1 parent 3e6d4db commit 8d4a03c

File tree

8 files changed

+285
-132
lines changed

8 files changed

+285
-132
lines changed

.vscode/raycasting-engine.code-workspace

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,5 +285,6 @@
285285
"C_Cpp_Runner.showCompilationTime": false,
286286
"C_Cpp_Runner.useLinkTimeOptimization": false,
287287
"C_Cpp_Runner.msvcSecureNoWarnings": false,
288+
"dotnet.defaultSolution": "disable",
288289
}
289290
}

ressources/imgui.ini

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ Size=400,400
99
Collapsed=0
1010

1111
[Window][Camera]
12-
Pos=1290,380
13-
Size=430,326
12+
Pos=1290,17
13+
Size=430,116
1414
Collapsed=0
15-
DockId=0x00000006,0
15+
DockId=0x00000003,1
1616

1717
[Window][3D View]
1818
Pos=0,17
@@ -27,16 +27,16 @@ Collapsed=0
2727
DockId=0x00000004,1
2828

2929
[Window][Rendering]
30-
Pos=1290,708
31-
Size=430,172
30+
Pos=1290,135
31+
Size=430,745
3232
Collapsed=0
3333
DockId=0x00000004,0
3434

3535
[Window][Sectors]
3636
Pos=1290,17
37-
Size=430,361
37+
Size=430,116
3838
Collapsed=0
39-
DockId=0x00000005,0
39+
DockId=0x00000003,0
4040

4141
[Window][World Editor]
4242
Pos=0,17
@@ -45,11 +45,9 @@ Collapsed=0
4545
DockId=0x00000001,1
4646

4747
[Docking][Data]
48-
DockSpace ID=0x7C6B3D9B Window=0xA87D555D Pos=0,17 Size=1720,863 Split=X Selected=0x8180B457
49-
DockNode ID=0x00000001 Parent=0x7C6B3D9B SizeRef=1288,863 CentralNode=1 Selected=0x8180B457
50-
DockNode ID=0x00000002 Parent=0x7C6B3D9B SizeRef=430,863 Split=Y Selected=0xB788DBD5
51-
DockNode ID=0x00000003 Parent=0x00000002 SizeRef=430,689 Split=Y Selected=0xDD05356B
52-
DockNode ID=0x00000005 Parent=0x00000003 SizeRef=430,361 Selected=0xDD05356B
53-
DockNode ID=0x00000006 Parent=0x00000003 SizeRef=430,326 Selected=0x0545BD69
54-
DockNode ID=0x00000004 Parent=0x00000002 SizeRef=430,172 Selected=0x5B3C8097
48+
DockSpace ID=0x7C6B3D9B Window=0xA87D555D Pos=0,17 Size=1720,863 Split=X Selected=0x8180B457
49+
DockNode ID=0x00000001 Parent=0x7C6B3D9B SizeRef=1288,863 CentralNode=1 Selected=0xF981308D
50+
DockNode ID=0x00000002 Parent=0x7C6B3D9B SizeRef=430,863 Split=Y Selected=0xB788DBD5
51+
DockNode ID=0x00000003 Parent=0x00000002 SizeRef=430,116 Selected=0xDD05356B
52+
DockNode ID=0x00000004 Parent=0x00000002 SizeRef=430,745 Selected=0x5B3C8097
5553

src/Editor/RenderingOrchestrator.hpp

Lines changed: 106 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <imgui.h>
4+
#include <vector>
45

56
#include "RaycastingCameraViewport.hpp"
67

@@ -13,18 +14,90 @@ class RenderingOrchestrator
1314

1415
void Render(World &world, RaycastingCamera &cam)
1516
{
17+
auto& renderTexture = cameraViewport.GetRenderTexture();
18+
1619
if(play)
1720
{
18-
RasterizeWorldInTexture(cameraViewport.GetRenderTexture(), world, cam);
21+
InitilizeFrame(world, cam);
22+
23+
if(rasterizer.IsRenderIterationRemains())
24+
{
25+
OneRenderItr(true);
26+
}
27+
28+
while(rasterizer.IsRenderIterationRemains())
29+
{
30+
OneRenderItr(false);
31+
}
1932
}
20-
else
33+
else if(stepByStepNewFrame)
2134
{
22-
RenderStepByStep();
35+
stepByStepNewFrame = false;
36+
InitilizeFrame(world, cam);
37+
OneRenderItr(true);
2338
}
2439
}
25-
void RenderStepByStep()
40+
41+
void InitilizeFrame(World &world, RaycastingCamera &cam)
2642
{
27-
/// ...
43+
auto& renderTexture = cameraViewport.GetRenderTexture();
44+
rasterizer.Reset(renderTexture.texture.width, renderTexture.texture.height, world, cam);
45+
46+
if(rasterizingItrsTextures.size() > 0)
47+
{
48+
int width = rasterizingItrsTextures[0].texture.width;
49+
int height = rasterizingItrsTextures[0].texture.height;
50+
51+
if(renderTexture.texture.width != width || renderTexture.texture.height != height)
52+
{
53+
for(RenderTexture2D& texture : rasterizingItrsTextures)
54+
{
55+
UnloadRenderTexture(texture);
56+
texture = { 0 };
57+
}
58+
}
59+
}
60+
61+
if(rasterizingItrsTextures.size() != cam.maxRenderItr)
62+
{
63+
rasterizingItrsTextures.resize(cam.maxRenderItr, { 0 });
64+
}
65+
}
66+
67+
void OneRenderItr(bool firstItr)
68+
{
69+
if(rasterizer.IsRenderIterationRemains())
70+
{
71+
auto& renderTexture = cameraViewport.GetRenderTexture();
72+
73+
BeginTextureMode(renderTexture);
74+
75+
if(firstItr)
76+
{
77+
ClearBackground(MY_BLACK);
78+
}
79+
80+
rasterizer.RenderIteration();
81+
EndTextureMode();
82+
83+
auto& ctx = rasterizer.GetContext();
84+
assert(rasterizingItrsTextures.size() >= ctx.currentRenderItr);
85+
86+
auto& texture = rasterizingItrsTextures.at(ctx.currentRenderItr - 1);
87+
88+
if(texture.id == 0)
89+
{
90+
texture = LoadRenderTexture(renderTexture.texture.width, renderTexture.texture.height);
91+
}
92+
93+
BeginTextureMode(texture);
94+
DrawTexture(renderTexture.texture, 0, 0, WHITE);
95+
EndTextureMode();
96+
}
97+
else
98+
{
99+
stepByStepNewFrame = true;
100+
}
28101
}
29102

30103
void DrawGUI()
@@ -39,23 +112,46 @@ class RenderingOrchestrator
39112
if(ImGui::Button("Pause"))
40113
{
41114
play = false;
115+
stepByStepNewFrame = true;
116+
}
117+
ImGui::SameLine();
118+
if(ImGui::Button("> Step") && !play)
119+
{
120+
OneRenderItr(stepByStepNewFrame);
42121
}
43122
ImGui::SameLine();
44123
if(ImGui::Button(">> Step") && !play)
45124
{
46-
125+
47126
}
48127

49-
// ***
50-
// Display renderStack step by step
51-
// ***
128+
{
129+
auto& ctx = rasterizer.GetContext();
130+
131+
for(size_t i = 0; auto& texture : rasterizingItrsTextures)
132+
{
133+
if(texture.id != 0 && i < ctx.currentRenderItr)
134+
{
135+
ImGui::Text("Iteration - %d", i);
136+
rlImGuiImageRenderTextureFitWidth(&texture);
137+
}
138+
139+
++i;
140+
}
141+
}
52142

53143
ImGui::End();
54144
}
55145

56146
private:
147+
RaycastingCameraViewport& cameraViewport;
148+
149+
// Step By step
57150
bool play = true;
151+
bool stepByStepNewFrame = false;
58152

59-
RaycastingCameraViewport& cameraViewport;
153+
WorldRasterizer rasterizer;
154+
155+
std::vector<RenderTexture> rasterizingItrsTextures;
60156
};
61157

0 commit comments

Comments
 (0)