Skip to content

Commit 0fdb8f0

Browse files
committed
feat: updating Skirnit and implementing FreyaExtension to easily add freya`s dependency injection
1 parent 4156deb commit 0fdb8f0

File tree

6 files changed

+89
-124
lines changed

6 files changed

+89
-124
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ FetchContent_MakeAvailable(assimp)
3838
FetchContent_Declare(
3939
skirnir
4040
GIT_REPOSITORY "https://github.com/gilmar-sales/Skirnir.git"
41-
GIT_TAG "v0.7.0"
41+
GIT_TAG "v0.9.0"
4242
)
4343
FetchContent_MakeAvailable(skirnir)
4444

Examples/Sofa/Main.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include <Freya/Builders/ApplicationBuilder.hpp>
1+
#include <Freya/Core/AbstractApplication.hpp>
22

33
class MainApp final : public fra::AbstractApplication
44
{
@@ -133,15 +133,16 @@ class MainApp final : public fra::AbstractApplication
133133
int main(int argc, const char** argv)
134134
{
135135
const auto app =
136-
fra::ApplicationBuilder()
137-
.WithOptions([](fra::FreyaOptionsBuilder& freyaOptions) {
138-
freyaOptions.SetTitle("Sofa example")
139-
.SetWidth(1920)
140-
.SetHeight(1080)
141-
.SetVSync(false)
142-
.SetSampleCount(8)
143-
.SetFullscreen(false);
144-
})
136+
skr::ApplicationBuilder()
137+
.AddExtension(fra::FreyaExtension().WithOptions(
138+
[](fra::FreyaOptionsBuilder& freyaOptions) {
139+
freyaOptions.SetTitle("Sofa example")
140+
.SetWidth(1920)
141+
.SetHeight(1080)
142+
.SetVSync(false)
143+
.SetSampleCount(8)
144+
.SetFullscreen(false);
145+
}))
145146
.Build<MainApp>();
146147

147148
app->Run();

src/Freya/Builders/ApplicationBuilder.hpp

Lines changed: 0 additions & 65 deletions
This file was deleted.
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
#pragma once
22

3+
#include "Freya/Core/FreyaExtension.hpp"
34
#include "Freya/Core/Renderer.hpp"
45
#include "Freya/Core/Window.hpp"
56
#include "Freya/Events/EventManager.hpp"
67

78
namespace FREYA_NAMESPACE
89
{
9-
class AbstractApplication
10+
class AbstractApplication : skr::IApplication
1011
{
1112
public:
1213
explicit AbstractApplication(
13-
const Ref<skr::ServiceProvider>& serviceProvider) : mDeltaTime(0)
14+
const Ref<skr::ServiceProvider>& serviceProvider) :
15+
IApplication(serviceProvider), mDeltaTime(0)
1416
{
15-
mServiceProvider = serviceProvider;
16-
mEventManager = mServiceProvider->GetService<EventManager>();
17-
mWindow = mServiceProvider->GetService<Window>();
18-
mRenderer = mServiceProvider->GetService<Renderer>();
17+
mEventManager = mRootServiceProvider->GetService<EventManager>();
18+
mWindow = mRootServiceProvider->GetService<Window>();
19+
mRenderer = mRootServiceProvider->GetService<Renderer>();
1920
}
2021

2122
virtual ~AbstractApplication() = default;
@@ -25,15 +26,14 @@ namespace FREYA_NAMESPACE
2526

2627
virtual void Update() = 0;
2728

28-
virtual void Run();
29+
void Run() override;
2930

3031
protected:
3132
friend class ApplicationBuilder;
3233

33-
float mDeltaTime;
34-
Ref<skr::ServiceProvider> mServiceProvider;
35-
Ref<Window> mWindow;
36-
Ref<Renderer> mRenderer;
37-
Ref<EventManager> mEventManager;
34+
float mDeltaTime;
35+
Ref<Window> mWindow;
36+
Ref<Renderer> mRenderer;
37+
Ref<EventManager> mEventManager;
3838
};
3939
} // namespace FREYA_NAMESPACE
Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
1-
#include "ApplicationBuilder.hpp"
1+
#include "FreyaExtension.hpp"
22

33
namespace FREYA_NAMESPACE
44
{
5-
ApplicationBuilder& ApplicationBuilder::WithOptions(
6-
std::function<void(FreyaOptionsBuilder&)> freyaOptionsBuilderFunc)
7-
{
8-
mFreyaOptionsBuilderFunc = freyaOptionsBuilderFunc;
9-
10-
return *this;
11-
}
125

13-
void ApplicationBuilder::AddServices()
6+
void FreyaExtension::Configure(skr::ServiceCollection& services) const
147
{
15-
16-
mServiceCollection->AddSingleton<FreyaOptions>(
8+
services.AddSingleton<FreyaOptions>(
179
[freyaOptionsBuilderFunc = mFreyaOptionsBuilderFunc](
1810
skr::ServiceProvider& serviceProvider) {
1911
auto freyaOptionsBuilder = FreyaOptionsBuilder();
@@ -26,19 +18,19 @@ namespace FREYA_NAMESPACE
2618
return freyaOptionsBuilder.Build();
2719
});
2820

29-
mServiceCollection->AddTransient<WindowBuilder>();
30-
mServiceCollection->AddTransient<InstanceBuilder>();
31-
mServiceCollection->AddTransient<PhysicalDeviceBuilder>();
32-
mServiceCollection->AddTransient<DeviceBuilder>();
33-
mServiceCollection->AddTransient<SurfaceBuilder>();
34-
mServiceCollection->AddTransient<RenderPassBuilder>();
35-
mServiceCollection->AddTransient<SwapChainBuilder>();
36-
mServiceCollection->AddTransient<ImageBuilder>();
37-
mServiceCollection->AddTransient<RendererBuilder>();
38-
mServiceCollection->AddTransient<ShaderModuleBuilder>();
39-
mServiceCollection->AddTransient<CommandPoolBuilder>();
40-
41-
mServiceCollection->AddSingleton<Instance>(
21+
services.AddTransient<WindowBuilder>();
22+
services.AddTransient<InstanceBuilder>();
23+
services.AddTransient<PhysicalDeviceBuilder>();
24+
services.AddTransient<DeviceBuilder>();
25+
services.AddTransient<SurfaceBuilder>();
26+
services.AddTransient<RenderPassBuilder>();
27+
services.AddTransient<SwapChainBuilder>();
28+
services.AddTransient<ImageBuilder>();
29+
services.AddTransient<RendererBuilder>();
30+
services.AddTransient<ShaderModuleBuilder>();
31+
services.AddTransient<CommandPoolBuilder>();
32+
33+
services.AddSingleton<Instance>(
4234
[](skr::ServiceProvider& serviceProvider) {
4335
auto freyaOptions = serviceProvider.GetService<FreyaOptions>();
4436

@@ -48,23 +40,23 @@ namespace FREYA_NAMESPACE
4840
return instanceBuilder->Build();
4941
});
5042

51-
mServiceCollection->AddSingleton<Surface>(
43+
services.AddSingleton<Surface>(
5244
[](skr::ServiceProvider& serviceProvider) {
5345
auto surfaceBuilder =
5446
serviceProvider.GetService<SurfaceBuilder>();
5547

5648
return surfaceBuilder->Build();
5749
});
5850

59-
mServiceCollection->AddSingleton<PhysicalDevice>(
51+
services.AddSingleton<PhysicalDevice>(
6052
[](skr::ServiceProvider& serviceProvider) {
6153
auto physicalDeviceBuilder =
6254
serviceProvider.GetService<PhysicalDeviceBuilder>();
6355

6456
return physicalDeviceBuilder->Build();
6557
});
6658

67-
mServiceCollection->AddSingleton<Device>(
59+
services.AddSingleton<Device>(
6860
[](skr::ServiceProvider& serviceProvider) {
6961
auto freyaOptions = serviceProvider.GetService<FreyaOptions>();
7062

@@ -74,7 +66,7 @@ namespace FREYA_NAMESPACE
7466
return deviceBuilder->Build();
7567
});
7668

77-
mServiceCollection->AddSingleton<CommandPool>(
69+
services.AddSingleton<CommandPool>(
7870
[](skr::ServiceProvider serviceProvider) {
7971
auto freyaOptions = serviceProvider.GetService<FreyaOptions>();
8072

@@ -83,33 +75,33 @@ namespace FREYA_NAMESPACE
8375
.Build();
8476
});
8577

86-
mServiceCollection->AddTransient<SwapChain>(
78+
services.AddTransient<SwapChain>(
8779
[](skr::ServiceProvider& serviceProvider) {
8880
return serviceProvider.GetService<SwapChainBuilder>()->Build();
8981
});
9082

91-
mServiceCollection->AddSingleton<EventManager>();
92-
mServiceCollection->AddSingleton<MeshPool>();
93-
mServiceCollection->AddSingleton<TexturePool>();
94-
mServiceCollection->AddSingleton<MaterialPool>();
83+
services.AddSingleton<EventManager>();
84+
services.AddSingleton<MeshPool>();
85+
services.AddSingleton<TexturePool>();
86+
services.AddSingleton<MaterialPool>();
9587

96-
mServiceCollection->AddSingleton<Window>(
88+
services.AddSingleton<Window>(
9789
[](skr::ServiceProvider& serviceProvider) {
9890
auto windowBuilder =
9991
serviceProvider.GetService<WindowBuilder>();
10092

10193
return windowBuilder->Build();
10294
});
10395

104-
mServiceCollection->AddSingleton<RenderPass>(
96+
services.AddSingleton<RenderPass>(
10597
[](skr::ServiceProvider& serviceProvider) {
10698
auto renderPassBuilder =
10799
serviceProvider.GetService<RenderPassBuilder>();
108100

109101
return renderPassBuilder->Build();
110102
});
111103

112-
mServiceCollection->AddSingleton<Renderer>(
104+
services.AddSingleton<Renderer>(
113105
[](skr::ServiceProvider& serviceProvider) {
114106
auto freyaOptions = serviceProvider.GetService<FreyaOptions>();
115107

src/Freya/Core/FreyaExtension.hpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include "Skirnir/ApplicationBuilder.hpp"
2+
3+
#include "Freya/Builders/DeviceBuilder.hpp"
4+
#include "Freya/Builders/FreyaOptionsBuilder.hpp"
5+
#include "Freya/Builders/ImageBuilder.hpp"
6+
#include "Freya/Builders/InstanceBuilder.hpp"
7+
#include "Freya/Builders/PhysicalDeviceBuilder.hpp"
8+
#include "Freya/Builders/RenderPassBuilder.hpp"
9+
#include "Freya/Builders/RendererBuilder.hpp"
10+
#include "Freya/Builders/ShaderModuleBuilder.hpp"
11+
#include "Freya/Builders/SurfaceBuilder.hpp"
12+
#include "Freya/Builders/SwapChainBuilder.hpp"
13+
#include "Freya/Builders/WindowBuilder.hpp"
14+
15+
#include "Freya/Asset/MaterialPool.hpp"
16+
#include "Freya/Asset/MeshPool.hpp"
17+
#include "Freya/Asset/TexturePool.hpp"
18+
19+
namespace FREYA_NAMESPACE
20+
{
21+
class FreyaExtension : public skr::IExtension
22+
{
23+
public:
24+
void Configure(skr::ServiceCollection& services) const override;
25+
26+
FreyaExtension& WithOptions(
27+
std::function<void(FreyaOptionsBuilder&)> freyaOptionsBuilderFunc)
28+
{
29+
mFreyaOptionsBuilderFunc = freyaOptionsBuilderFunc;
30+
31+
return *this;
32+
}
33+
34+
private:
35+
std::function<void(FreyaOptionsBuilder&)> mFreyaOptionsBuilderFunc;
36+
};
37+
} // namespace FREYA_NAMESPACE

0 commit comments

Comments
 (0)