fix: some tests failing due to repeated glfwInit/glfwTerminate
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
ab44e4da0a
commit
961111c5da
1 changed files with 37 additions and 5 deletions
|
@ -5,6 +5,41 @@
|
||||||
|
|
||||||
namespace lt::surface {
|
namespace lt::surface {
|
||||||
|
|
||||||
|
// This class is to ensure glfwInit/glfwTerminate is called only once and exactly when needed during
|
||||||
|
// entire application runtime
|
||||||
|
class GlfwSingleton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
[[nodiscard]] static auto get() -> GlfwSingleton &
|
||||||
|
{
|
||||||
|
static auto instance = GlfwSingleton {};
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
GlfwSingleton(GlfwSingleton &&) = delete;
|
||||||
|
|
||||||
|
GlfwSingleton(const GlfwSingleton &) = delete;
|
||||||
|
|
||||||
|
auto operator=(GlfwSingleton &&) -> GlfwSingleton & = delete;
|
||||||
|
|
||||||
|
auto operator=(const GlfwSingleton &) -> GlfwSingleton & = delete;
|
||||||
|
|
||||||
|
private:
|
||||||
|
GlfwSingleton()
|
||||||
|
{
|
||||||
|
log_inf("Initializing glfw...");
|
||||||
|
ensure(glfwInit(), "Failed to initialize 'glfw'");
|
||||||
|
log_inf("...Finished");
|
||||||
|
}
|
||||||
|
|
||||||
|
~GlfwSingleton()
|
||||||
|
{
|
||||||
|
log_inf("Terminating glfw...");
|
||||||
|
glfwTerminate();
|
||||||
|
log_inf("...Finished");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void glfw_error_callbac(int32_t code, const char *description)
|
void glfw_error_callbac(int32_t code, const char *description)
|
||||||
{
|
{
|
||||||
log_err("GLFW ERROR: {} -> {}", code, description);
|
log_err("GLFW ERROR: {} -> {}", code, description);
|
||||||
|
@ -97,13 +132,12 @@ void bind_glfw_events(GLFWwindow *handle)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_glfw() {};
|
|
||||||
|
|
||||||
System::System(Ref<ecs::Registry> registry): m_registry(std::move(registry))
|
System::System(Ref<ecs::Registry> registry): m_registry(std::move(registry))
|
||||||
{
|
{
|
||||||
glfwSetErrorCallback(&glfw_error_callbac);
|
glfwSetErrorCallback(&glfw_error_callbac);
|
||||||
ensure(glfwInit(), "Failed to initialize 'glfw'");
|
|
||||||
|
|
||||||
|
// will call `glfwInit()` only the first time
|
||||||
|
auto &glfw_instance = GlfwSingleton::get();
|
||||||
ensure(m_registry, "Failed to initialize surface system: null registry");
|
ensure(m_registry, "Failed to initialize surface system: null registry");
|
||||||
|
|
||||||
ensure(
|
ensure(
|
||||||
|
@ -142,8 +176,6 @@ System::~System()
|
||||||
m_registry->view<SurfaceComponent>().each([&](const entt::entity entity, SurfaceComponent &) {
|
m_registry->view<SurfaceComponent>().each([&](const entt::entity entity, SurfaceComponent &) {
|
||||||
m_registry->get_entt_registry().remove<SurfaceComponent>(entity);
|
m_registry->get_entt_registry().remove<SurfaceComponent>(entity);
|
||||||
});
|
});
|
||||||
|
|
||||||
glfwTerminate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void System::on_surface_construct(entt::registry ®istry, entt::entity entity)
|
void System::on_surface_construct(entt::registry ®istry, entt::entity entity)
|
||||||
|
|
Loading…
Add table
Reference in a new issue