66 const std::string &shaderFrontendName,
const std::string &shaderIRName)
68 std::shared_ptr<IWindow> windowPlugin =
nullptr;
69 std::shared_ptr<IRenderer> rendererPlugin =
nullptr;
70 std::shared_ptr<IShaderIR> shaderIRPlugin =
nullptr;
71 std::vector<std::function<std::shared_ptr<IShaderFrontend>()>> shaderFactories;
75 if (
const auto renderer = std::dynamic_pointer_cast<IRenderer>(plugin))
77 if (renderer->getName() == rendererName)
79 rendererPlugin = renderer;
82 if (
const auto window = std::dynamic_pointer_cast<IWindow>(plugin))
84 if (window->getName() == windowName)
86 windowPlugin = window;
89 if (
const auto shader = std::dynamic_pointer_cast<IShaderFrontend>(plugin))
91 if (shader->getName() == shaderFrontendName)
93 shaderFactories.emplace_back([shader]() {
return shader; });
96 if (
const auto shaderIR = std::dynamic_pointer_cast<IShaderIR>(plugin))
98 if (shaderIR->getName() == shaderIRName)
100 shaderIRPlugin = shaderIR;
104 if (windowPlugin ==
nullptr)
108 if (rendererPlugin ==
nullptr)
112 if (shaderFactories.empty())
116 m_engine = std::make_unique<Engine>(
117 m_appConfig.engineConfig, []() { return nullptr; }, []() { return nullptr; },
118 [rendererPlugin]() { return rendererPlugin; }, [shaderIRPlugin]() { return shaderIRPlugin; }, shaderFactories,
119 [windowPlugin]() { return windowPlugin; });
124 -0.5f, -0.5f, -0.5f, 1, 0, 0, 0.5f, -0.5f, -0.5f, 0, 1, 0, 0.5f, 0.5f, -0.5f, 0, 0, 1,
125 0.5f, 0.5f, -0.5f, 0, 0, 1, -0.5f, 0.5f, -0.5f, 1, 1, 0, -0.5f, -0.5f, -0.5f, 1, 0, 0,
127 -0.5f, -0.5f, 0.5f, 1, 0, 1, 0.5f, -0.5f, 0.5f, 0, 1, 1, 0.5f, 0.5f, 0.5f, 1, 1, 1,
128 0.5f, 0.5f, 0.5f, 1, 1, 1, -0.5f, 0.5f, 0.5f, 0, 0, 0, -0.5f, -0.5f, 0.5f, 1, 0, 1,
130 -0.5f, 0.5f, 0.5f, 1, 0, 0, -0.5f, 0.5f, -0.5f, 0, 1, 0, -0.5f, -0.5f, -0.5f, 0, 0, 1,
131 -0.5f, -0.5f, -0.5f, 0, 0, 1, -0.5f, -0.5f, 0.5f, 1, 1, 0, -0.5f, 0.5f, 0.5f, 1, 0, 0,
133 0.5f, 0.5f, 0.5f, 1, 0, 1, 0.5f, 0.5f, -0.5f, 0, 1, 1, 0.5f, -0.5f, -0.5f, 1, 1, 1,
134 0.5f, -0.5f, -0.5f, 1, 1, 1, 0.5f, -0.5f, 0.5f, 0, 0, 0, 0.5f, 0.5f, 0.5f, 1, 0, 1,
136 -0.5f, -0.5f, -0.5f, 1, 0, 0, 0.5f, -0.5f, -0.5f, 0, 1, 0, 0.5f, -0.5f, 0.5f, 0, 0, 1,
137 0.5f, -0.5f, 0.5f, 0, 0, 1, -0.5f, -0.5f, 0.5f, 1, 1, 0, -0.5f, -0.5f, -0.5f, 1, 0, 0,
139 -0.5f, 0.5f, -0.5f, 1, 0, 1, 0.5f, 0.5f, -0.5f, 0, 1, 1, 0.5f, 0.5f, 0.5f, 1, 1, 1,
140 0.5f, 0.5f, 0.5f, 1, 1, 1, -0.5f, 0.5f, 0.5f, 0, 0, 0, -0.5f, 0.5f, -0.5f, 1, 0, 1};
169 std::array<float, 10> fpsBuffer{};
173 while (!m_engine->getWindow()->shouldClose())
176 glm::vec3 moveDir(0.0F);
177 glm::vec2 lookDir(0.0F);
178 m_engine->getWindow()->pollEvents();
179 while (m_engine->getWindow()->pollEvent(e))
183 m_keyState[e.key.key] =
true;
187 m_keyState[e.key.key] =
false;
208 if (glm::length(lookDir) > 0.0F)
210 lookDir *= m_engine->getCamera()->getLookSpeed() * m_engine->getClock()->getDeltaSeconds();
211 m_engine->getCamera()->rotate(lookDir.x, lookDir.y, 1.0F);
214 glm::vec3 forward = glm::normalize(
215 glm::vec3(m_engine->getCamera()->getDirection().x, 0.0F, m_engine->getCamera()->getDirection().z));
216 glm::vec3 right = glm::normalize(glm::cross(forward, glm::vec3(0.0F, 1.0F, 0.0F)));
235 if (glm::length(moveDir) > 0.0F)
237 moveDir = glm::normalize(moveDir);
238 m_engine->getCamera()->move(moveDir, m_engine->getClock()->getDeltaSeconds());
243 m_engine->getCamera()->move(glm::vec3(0.0F, -1.0F, 0.0F), m_engine->getClock()->getDeltaSeconds());
247 m_engine->getCamera()->move(glm::vec3(0.0F, 1.0F, 0.0F), m_engine->getClock()->getDeltaSeconds());
250 m_engine->update(fpsBuffer, fpsIndex);