Skip to content

Commit dcacc9d

Browse files
progress
1 parent 4679110 commit dcacc9d

File tree

7 files changed

+75
-72
lines changed

7 files changed

+75
-72
lines changed

engine/include/tsengine/ecs/ecs.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -534,8 +534,6 @@ TComponent& Registry::getComponent(const Entity entity) const
534534

535535
inline void Registry::addEntityToSystems(const Entity entity)
536536
{
537-
auto var = getTagByEntity(entity);
538-
539537
const auto entityId = entity.getId();
540538

541539
const auto& entityComponentSignature = entityComponentSignatures[entityId];

engine/include/tsengine/utils.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
NOT_COPYABLE(ClassName); \
1515
NOT_MOVEABLE(ClassName);
1616

17-
#define SINGLETON_BODY(ClassName) \
18-
NOT_COPYABLE(ClassName); \
19-
private: ClassName() = default; \
17+
#define SINGLETON_BODY(ClassName) \
18+
NOT_COPYABLE_AND_MOVEABLE(ClassName); \
19+
private: ClassName() = default; \
2020
friend Singleton<ClassName>;
2121

2222
#define STR(x) XSTR(x)

engine/src/core/context.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace ts
99
{
10-
class Context final
10+
class Context final : public Singleton<Context>
1111
{
1212
NOT_COPYABLE_AND_MOVEABLE(Context);
1313

engine/src/core/core.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ int run(Engine* const game) try
7878
player.tag("player");
7979
player.addComponent<ts::TransformComponent>();
8080
player.addComponent<ts::RigidBodyComponent>(2.f);
81+
82+
auto grid = ts::gRegistry.createEntity();
83+
grid.tag("grid");
84+
grid.addComponent<ts::RendererComponent<PipelineType::GRID>>();
85+
8186
// TODO: try to delay it
8287
game->loadLvL();
8388

engine/src/core/renderer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ void Renderer::createRenderer()
206206
createVertexIndexBuffer();
207207

208208
mIndexOffset = AssetStore::Models::getIndexOffset();
209+
210+
initRenderSystem();
209211
}
210212

211213
void Renderer::render(const math::Vec3& cameraPosition, const size_t swapchainImageIndex)

engine/src/core/renderer_process.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void RenderProcess::createRendererProcess(
8888

8989
descriptorBufferInfos.emplace_back(VkDescriptorBufferInfo{
9090
.offset = descriptorBufferInfos.at(1).offset + khronos_utils::align(descriptorBufferInfos.at(1).range, uniformBufferOffsetAlignment),
91-
.range = sizeof(math::Vec3) * gRegistry.getSystem<LightRenderSystem>().getSystemEntities().size()
91+
.range = sizeof(math::Vec3) * gRegistry.getSystem<RenderSystem::Lights>().getSystemEntities().size()
9292
});
9393

9494
if (descriptorBufferInfos.empty())

engine/src/ecs/render_system.hpp

Lines changed: 63 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
namespace ts
1919
{
2020
class Renderer;
21-
class LightRenderSystem;
2221

2322
class RenderSystem : public System
2423
{
@@ -28,32 +27,73 @@ class RenderSystem : public System
2827
{
2928
requireComponent<RendererComponentBase>();
3029

31-
gRegistry.addSystem<LightRenderSystem>();
30+
gRegistry.addSystem<Lights>();
3231
}
3332

3433
void update(const VkCommandBuffer cmdBuf, const VkDescriptorSet descriptorSet)
3534
{
36-
size_t entityIndexforUniformBufferOffset{};
37-
const auto uniformBufferOffset = static_cast<uint32_t>(
38-
khronos_utils::align(
39-
static_cast<VkDeviceSize>(sizeof(decltype(RenderProcess::mIndividualUniformData)::value_type)),
40-
mVkUniformBufferOffsetAlignment) * static_cast<VkDeviceSize>(entityIndexforUniformBufferOffset));
41-
4235
for (const auto entity : getSystemEntities())
4336
{
44-
if (entity.hasComponent<MeshComponent>() && (!entity.hasComponent<RendererComponent<PipelineType::PBR>>()))
37+
size_t entityIndexforUniformBufferOffset{};
38+
const auto uniformBufferOffset = static_cast<uint32_t>(
39+
khronos_utils::align(
40+
static_cast<VkDeviceSize>(sizeof(decltype(RenderProcess::mIndividualUniformData)::value_type)),
41+
mVkUniformBufferOffsetAlignment) * static_cast<VkDeviceSize>(entityIndexforUniformBufferOffset));
42+
43+
vkCmdBindDescriptorSets(
44+
cmdBuf,
45+
VK_PIPELINE_BIND_POINT_GRAPHICS,
46+
mpPipelineLayout,
47+
0,
48+
1,
49+
&descriptorSet,
50+
1,
51+
&uniformBufferOffset);
52+
53+
if (!entity.hasComponent<TransformComponent>())
54+
{
55+
vkCmdPushConstants(cmdBuf,
56+
mpPipelineLayout,
57+
VK_SHADER_STAGE_VERTEX_BIT,
58+
0,
59+
sizeof(math::Vec3),
60+
&entity.getComponent<TransformComponent>().pos);
61+
}
62+
63+
if (entity.hasComponent<MeshComponent>())
4564
{
4665
TS_ASSERT(!entity.hasComponent<RendererComponent<PipelineType::COLOR>>(), "Not implemented yet");
4766

4867
const auto& mesh = entity.getComponent<MeshComponent>();
4968

50-
if (const auto pipe = mpNormalLightingPipeline.lock())
69+
if (entity.hasComponent<RendererComponent<PipelineType::NORMAL_LIGHTING>>())
5170
{
52-
pipe->bind(cmdBuf);
71+
if (const auto pipe = mpNormalLightingPipeline.lock())
72+
{
73+
pipe->bind(cmdBuf);
74+
}
75+
else
76+
{
77+
throw Exception{ "Invalid normal lighting pipeline" };
78+
}
5379
}
54-
else
80+
else if (entity.hasComponent<RendererComponent<PipelineType::PBR>>())
5581
{
56-
throw Exception{"Invalid normal lighting pipeline"};
82+
if (const auto pipe = mpPbrPipeline.lock())
83+
{
84+
pipe->bind(cmdBuf);
85+
}
86+
else
87+
{
88+
throw Exception{ "Invalid pbr pipeline" };
89+
}
90+
91+
vkCmdPushConstants(cmdBuf,
92+
mpPipelineLayout,
93+
VK_SHADER_STAGE_FRAGMENT_BIT,
94+
sizeof(math::Vec3),
95+
sizeof(RendererComponent<PipelineType::PBR>::Material),
96+
&entity.getComponent<RendererComponent<PipelineType::PBR>>().material);
5797
}
5898

5999
vkCmdDrawIndexed(cmdBuf,
@@ -63,24 +103,6 @@ class RenderSystem : public System
63103
0,
64104
0);
65105
}
66-
else if (entity.hasComponent<RendererComponent<PipelineType::PBR>>())
67-
{
68-
if (const auto pipe = mpPbrPipeline.lock())
69-
{
70-
pipe->bind(cmdBuf);
71-
}
72-
else
73-
{
74-
throw Exception{"Invalid pbr pipeline"};
75-
}
76-
77-
vkCmdPushConstants(cmdBuf,
78-
mpPipelineLayout,
79-
VK_SHADER_STAGE_FRAGMENT_BIT,
80-
sizeof(math::Vec3),
81-
sizeof(RendererComponent<PipelineType::PBR>::Material),
82-
&entity.getComponent<RendererComponent<PipelineType::PBR>>().material);
83-
}
84106
else if (entity.hasComponent<RendererComponent<PipelineType::LIGHT>>())
85107
{
86108
if (const auto pipe = mpLightCubePipeline.lock())
@@ -111,47 +133,23 @@ class RenderSystem : public System
111133
{
112134
TS_ERR("Unexpected rendering workflow");
113135
}
114-
115-
if (!entity.hasComponent<RendererComponent<PipelineType::GRID>>())
116-
{
117-
TS_ASSERT(entity.hasComponent<TransformComponent>(), "TransformComponent is missing");
118-
119-
vkCmdPushConstants(cmdBuf,
120-
mpPipelineLayout,
121-
VK_SHADER_STAGE_VERTEX_BIT,
122-
0,
123-
sizeof(math::Vec3),
124-
&entity.getComponent<TransformComponent>().pos);
125-
}
126-
127-
128-
129-
vkCmdBindDescriptorSets(
130-
cmdBuf,
131-
VK_PIPELINE_BIND_POINT_GRAPHICS,
132-
mpPipelineLayout,
133-
0,
134-
1,
135-
&descriptorSet,
136-
1,
137-
&uniformBufferOffset);
138136
}
139137
}
140138

139+
class Lights : public System
140+
{
141+
public:
142+
Lights()
143+
{
144+
requireComponent<RendererComponent<PipelineType::LIGHT>>();
145+
}
146+
147+
};
148+
141149
private:
142150
friend Renderer;
143151
const VkDeviceSize& mVkUniformBufferOffsetAlignment;
144152
std::weak_ptr<Pipeline> mpGridPipeline, mpNormalLightingPipeline, mpPbrPipeline, mpLightCubePipeline;
145153
VkPipelineLayout mpPipelineLayout{};
146154
};
147-
148-
class LightRenderSystem : public System
149-
{
150-
public:
151-
LightRenderSystem()
152-
{
153-
requireComponent<RendererComponent<PipelineType::LIGHT>>();
154-
}
155-
156-
};
157155
}

0 commit comments

Comments
 (0)