Browse Source

Refactor singletons a bit

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
4d16b046ee

+ 8 - 4
AnKi/Config.h.cmake

@@ -248,7 +248,8 @@ inline int __builtin_ctzll(unsigned long long x)
 
 
 // Define the main() function.
 // Define the main() function.
 namespace anki {
 namespace anki {
-void preMainInit();
+void preMain();
+void postMain();
 }
 }
 #if ANKI_OS_ANDROID
 #if ANKI_OS_ANDROID
 extern "C" {
 extern "C" {
@@ -267,20 +268,23 @@ void cleanupGetAndroidCommandLineArguments(void* ptr);
 	extern "C" void android_main(android_app* app) \
 	extern "C" void android_main(android_app* app) \
 	{ \
 	{ \
 		anki::g_androidApp = app; \
 		anki::g_androidApp = app; \
-		preMainInit(); \
+		preMain(); \
 		char** argv; \
 		char** argv; \
 		int argc; \
 		int argc; \
 		void* cleanupToken = anki::getAndroidCommandLineArguments(argc, argv); \
 		void* cleanupToken = anki::getAndroidCommandLineArguments(argc, argv); \
 		myMain(argc, argv); \
 		myMain(argc, argv); \
 		anki::cleanupGetAndroidCommandLineArguments(cleanupToken); \
 		anki::cleanupGetAndroidCommandLineArguments(cleanupToken); \
+		postMain(); \
 	}
 	}
 #else
 #else
 #	define ANKI_MAIN_FUNCTION(myMain) \
 #	define ANKI_MAIN_FUNCTION(myMain) \
 	int myMain(int argc, char* argv[]); \
 	int myMain(int argc, char* argv[]); \
 	int main(int argc, char* argv[]) \
 	int main(int argc, char* argv[]) \
 	{ \
 	{ \
-		preMainInit(); \
-		return myMain(argc, argv); \
+		preMain(); \
+		const int exitCode = myMain(argc, argv); \
+		postMain(); \
+		return exitCode; \
 	}
 	}
 #endif
 #endif
 /// @}
 /// @}

+ 2 - 2
AnKi/Core/App.cpp

@@ -174,7 +174,7 @@ Error App::init(ConfigSet* config, AllocAlignedCallback allocCb, void* allocCbUs
 
 
 Error App::initInternal(AllocAlignedCallback allocCb, void* allocCbUserData)
 Error App::initInternal(AllocAlignedCallback allocCb, void* allocCbUserData)
 {
 {
-	LoggerSingleton::get().enableVerbosity(m_config->getCoreVerboseLog());
+	Logger::getSingleton().enableVerbosity(m_config->getCoreVerboseLog());
 
 
 	setSignalHandlers();
 	setSignalHandlers();
 
 
@@ -514,7 +514,7 @@ Error App::mainLoop()
 			TexturePtr presentableTex = m_gr->acquireNextPresentableTexture();
 			TexturePtr presentableTex = m_gr->acquireNextPresentableTexture();
 			m_renderer->setStatsEnabled(m_config->getCoreDisplayStats() > 0 || benchmarkMode
 			m_renderer->setStatsEnabled(m_config->getCoreDisplayStats() > 0 || benchmarkMode
 #if ANKI_ENABLE_TRACE
 #if ANKI_ENABLE_TRACE
-										|| TracerSingleton::get().getEnabled()
+										|| Tracer::getSingleton().getEnabled()
 #endif
 #endif
 			);
 			);
 			ANKI_CHECK(m_renderer->render(rqueue, presentableTex));
 			ANKI_CHECK(m_renderer->render(rqueue, presentableTex));

+ 4 - 4
AnKi/Core/CoreTracer.cpp

@@ -101,7 +101,7 @@ CoreTracer::~CoreTracer()
 	m_counterNames.destroy(*m_pool);
 	m_counterNames.destroy(*m_pool);
 
 
 	// Destroy the tracer
 	// Destroy the tracer
-	TracerSingleton::destroy();
+	Tracer::freeSingleton();
 }
 }
 
 
 Error CoreTracer::init(HeapMemoryPool* pool, CString directory)
 Error CoreTracer::init(HeapMemoryPool* pool, CString directory)
@@ -109,9 +109,9 @@ Error CoreTracer::init(HeapMemoryPool* pool, CString directory)
 	ANKI_ASSERT(pool);
 	ANKI_ASSERT(pool);
 	m_pool = pool;
 	m_pool = pool;
 
 
-	TracerSingleton::init(m_pool);
+	Tracer::allocateSingleton(m_pool);
 	const Bool enableTracer = getenv("ANKI_CORE_TRACER_ENABLED") && getenv("ANKI_CORE_TRACER_ENABLED")[0] == '1';
 	const Bool enableTracer = getenv("ANKI_CORE_TRACER_ENABLED") && getenv("ANKI_CORE_TRACER_ENABLED")[0] == '1';
-	TracerSingleton::get().setEnabled(enableTracer);
+	Tracer::getSingleton().setEnabled(enableTracer);
 	ANKI_CORE_LOGI("Tracing is %s from the beginning", (enableTracer) ? "enabled" : "disabled");
 	ANKI_CORE_LOGI("Tracing is %s from the beginning", (enableTracer) ? "enabled" : "disabled");
 
 
 	m_thread.start(this, [](ThreadCallbackInfo& info) -> Error {
 	m_thread.start(this, [](ThreadCallbackInfo& info) -> Error {
@@ -305,7 +305,7 @@ void CoreTracer::flushFrame(U64 frame)
 	ctx.m_frame = frame;
 	ctx.m_frame = frame;
 	ctx.m_self = this;
 	ctx.m_self = this;
 
 
-	TracerSingleton::get().flush(
+	Tracer::getSingleton().flush(
 		[](void* ud, ThreadId tid, ConstWeakArray<TracerEvent> events, ConstWeakArray<TracerCounter> counters) {
 		[](void* ud, ThreadId tid, ConstWeakArray<TracerEvent> events, ConstWeakArray<TracerCounter> counters) {
 			Ctx& ctx = *static_cast<Ctx*>(ud);
 			Ctx& ctx = *static_cast<Ctx*>(ud);
 			CoreTracer& self = *ctx.m_self;
 			CoreTracer& self = *ctx.m_self;

+ 2 - 2
AnKi/Core/DeveloperConsole.cpp

@@ -9,7 +9,7 @@ namespace anki {
 
 
 DeveloperConsole::~DeveloperConsole()
 DeveloperConsole::~DeveloperConsole()
 {
 {
-	LoggerSingleton::get().removeMessageHandler(this, loggerCallback);
+	Logger::getSingleton().removeMessageHandler(this, loggerCallback);
 
 
 	while(!m_logItems.isEmpty())
 	while(!m_logItems.isEmpty())
 	{
 	{
@@ -28,7 +28,7 @@ Error DeveloperConsole::init(ScriptManager* scriptManager)
 	ANKI_CHECK(m_manager->newInstance(m_font, "EngineAssets/UbuntuMonoRegular.ttf", Array<U32, 1>{16}));
 	ANKI_CHECK(m_manager->newInstance(m_font, "EngineAssets/UbuntuMonoRegular.ttf", Array<U32, 1>{16}));
 
 
 	// Add a new callback to the logger
 	// Add a new callback to the logger
-	LoggerSingleton::get().addMessageHandler(this, loggerCallback);
+	Logger::getSingleton().addMessageHandler(this, loggerCallback);
 
 
 	ANKI_CHECK(m_scriptEnv.init(scriptManager));
 	ANKI_CHECK(m_scriptEnv.init(scriptManager));
 
 

+ 1 - 0
AnKi/Util/Common.h

@@ -13,5 +13,6 @@ namespace anki {
 #define ANKI_UTIL_LOGE(...) ANKI_LOG("UTIL", kError, __VA_ARGS__)
 #define ANKI_UTIL_LOGE(...) ANKI_LOG("UTIL", kError, __VA_ARGS__)
 #define ANKI_UTIL_LOGW(...) ANKI_LOG("UTIL", kWarning, __VA_ARGS__)
 #define ANKI_UTIL_LOGW(...) ANKI_LOG("UTIL", kWarning, __VA_ARGS__)
 #define ANKI_UTIL_LOGF(...) ANKI_LOG("UTIL", kFatal, __VA_ARGS__)
 #define ANKI_UTIL_LOGF(...) ANKI_LOG("UTIL", kFatal, __VA_ARGS__)
+#define ANKI_UTIL_LOGV(...) ANKI_LOG("UTIL", kVerbose, __VA_ARGS__)
 
 
 } // end namespace anki
 } // end namespace anki

+ 1 - 1
AnKi/Util/Logger.cpp

@@ -69,7 +69,7 @@ void Logger::write(const Char* file, int line, const Char* func, const Char* sub
 				   const Char* threadName, const Char* msg)
 				   const Char* threadName, const Char* msg)
 {
 {
 	// Note: m_verbosityEnabled is not accessed in a thread-safe way. It doesn't really matter though
 	// Note: m_verbosityEnabled is not accessed in a thread-safe way. It doesn't really matter though
-	if(type == LoggerMessageType::kVerbose && !m_verbosityEnabled)
+	if(type == LoggerMessageType::kVerbose && !m_verbosityEnabled) [[likely]]
 	{
 	{
 		return;
 		return;
 	}
 	}

+ 10 - 21
AnKi/Util/Logger.h

@@ -51,14 +51,12 @@ using LoggerMessageHandlerCallback = void (*)(void*, const LoggerMessageInfo& in
 /// thread safe.
 /// thread safe.
 /// To add a new signal:
 /// To add a new signal:
 /// @code logger.addMessageHandler((void*)obj, &function) @endcode
 /// @code logger.addMessageHandler((void*)obj, &function) @endcode
-class Logger
+class Logger : public MakeSingleton<Logger>
 {
 {
-public:
-	/// Initialize the logger and add the default message handler
-	Logger();
-
-	~Logger();
+	template<typename>
+	friend class MakeSingleton;
 
 
+public:
 	/// Add a new message handler.
 	/// Add a new message handler.
 	void addMessageHandler(void* data, LoggerMessageHandlerCallback callback);
 	void addMessageHandler(void* data, LoggerMessageHandlerCallback callback);
 
 
@@ -89,18 +87,6 @@ private:
 	public:
 	public:
 		void* m_data = nullptr;
 		void* m_data = nullptr;
 		LoggerMessageHandlerCallback m_callback = nullptr;
 		LoggerMessageHandlerCallback m_callback = nullptr;
-
-		Handler() = default;
-
-		Handler(const Handler&) = default;
-
-		Handler(void* data, LoggerMessageHandlerCallback callback)
-			: m_data(data)
-			, m_callback(callback)
-		{
-		}
-
-		Handler& operator=(const Handler&) = default;
 	};
 	};
 
 
 	Mutex m_mutex; ///< For thread safety
 	Mutex m_mutex; ///< For thread safety
@@ -108,16 +94,19 @@ private:
 	U32 m_handlersCount = 0;
 	U32 m_handlersCount = 0;
 	Bool m_verbosityEnabled = false;
 	Bool m_verbosityEnabled = false;
 
 
+	/// Initialize the logger and add the default message handler
+	Logger();
+
+	~Logger();
+
 	static void defaultSystemMessageHandler(void*, const LoggerMessageInfo& info);
 	static void defaultSystemMessageHandler(void*, const LoggerMessageInfo& info);
 	static void fileMessageHandler(void* file, const LoggerMessageInfo& info);
 	static void fileMessageHandler(void* file, const LoggerMessageInfo& info);
 };
 };
 
 
-using LoggerSingleton = Singleton<Logger>;
-
 #define ANKI_LOG(subsystem_, t, ...) \
 #define ANKI_LOG(subsystem_, t, ...) \
 	do \
 	do \
 	{ \
 	{ \
-		LoggerSingleton::get().writeFormated(ANKI_FILE, __LINE__, ANKI_FUNC, subsystem_, LoggerMessageType::t, \
+		Logger::getSingleton().writeFormated(ANKI_FILE, __LINE__, ANKI_FUNC, subsystem_, LoggerMessageType::t, \
 											 Thread::getCurrentThreadName(), __VA_ARGS__); \
 											 Thread::getCurrentThreadName(), __VA_ARGS__); \
 	} while(false)
 	} while(false)
 /// @}
 /// @}

+ 13 - 150
AnKi/Util/Singleton.h

@@ -5,8 +5,7 @@
 
 
 #pragma once
 #pragma once
 
 
-#include <AnKi/Util/Assert.h>
-#include <AnKi/Util/Thread.h>
+#include <AnKi/Util/StdTypes.h>
 #include <utility>
 #include <utility>
 
 
 namespace anki {
 namespace anki {
@@ -14,173 +13,37 @@ namespace anki {
 /// @addtogroup util_patterns
 /// @addtogroup util_patterns
 /// @{
 /// @{
 
 
-/// This template makes a class singleton
+/// If class inherits that it will become a singleton.
 template<typename T>
 template<typename T>
-class Singleton
+class MakeSingleton
 {
 {
 public:
 public:
-	using Value = T;
-
-	// Non copyable
-	Singleton(const Singleton&) = delete;
-	Singleton& operator=(const Singleton&) = delete;
-
-	// Non constructable
-	Singleton() = delete;
-	~Singleton() = delete;
-
-	/// Get instance
-	static Value& get()
+	static T& getSingleton()
 	{
 	{
-		return *(m_instance ? m_instance : (m_instance = new Value));
+		return *m_global;
 	}
 	}
 
 
-	/// Cleanup
-	static void destroy()
-	{
-		if(m_instance)
-		{
-			delete m_instance;
-		}
-	}
-
-private:
-	static Value* m_instance;
-};
-
-template<typename T>
-typename Singleton<T>::Value* Singleton<T>::m_instance = nullptr;
-
-/// This template makes a class with a destructor with arguments singleton
-template<typename T>
-class SingletonInit
-{
-public:
-	using Value = T;
-
-	// Non copyable
-	SingletonInit(const SingletonInit&) = delete;
-	SingletonInit& operator=(const SingletonInit&) = delete;
-
-	// Non constructable
-	SingletonInit() = delete;
-	~SingletonInit() = delete;
-
-	/// Init the singleton
 	template<typename... TArgs>
 	template<typename... TArgs>
-	static void init(TArgs... args)
-	{
-		ANKI_ASSERT(m_instance == nullptr);
-		m_instance = new Value(std::forward<TArgs>(args)...);
-	}
-
-	/// Get instance
-	static Value& get()
-	{
-		ANKI_ASSERT(m_instance != nullptr);
-		return *m_instance;
-	}
-
-	/// Cleanup
-	static void destroy()
+	static void allocateSingleton(TArgs&&... args)
 	{
 	{
-		if(m_instance)
+		if(m_global == nullptr)
 		{
 		{
-			delete m_instance;
+			m_global = new T(std::forward<TArgs>(args)...);
 		}
 		}
 	}
 	}
 
 
-	static Bool isInitialized()
+	static void freeSingleton()
 	{
 	{
-		return m_instance != nullptr;
+		delete m_global;
+		m_global = nullptr;
 	}
 	}
 
 
 private:
 private:
-	static Value* m_instance;
+	static T* m_global;
 };
 };
 
 
 template<typename T>
 template<typename T>
-typename SingletonInit<T>::Value* SingletonInit<T>::m_instance = nullptr;
-
-/// This template makes a class singleton with thread local instance
-template<typename T>
-class SingletonThreadLocal
-{
-public:
-	using Value = T;
-
-	// Non copyable
-	SingletonThreadLocal(const SingletonThreadLocal&) = delete;
-	SingletonThreadLocal& operator=(const SingletonThreadLocal&) = delete;
-
-	// Non constructable
-	SingletonThreadLocal() = delete;
-	~SingletonThreadLocal() = delete;
-
-	/// Get instance
-	static Value& get()
-	{
-		return *(m_instance ? m_instance : (m_instance = new Value));
-	}
-
-	/// Cleanup
-	void destroy()
-	{
-		if(m_instance)
-		{
-			delete m_instance;
-		}
-	}
-
-private:
-	static thread_local Value* m_instance;
-};
-
-template<typename T>
-thread_local typename SingletonThreadLocal<T>::Value* SingletonThreadLocal<T>::m_instance = nullptr;
-
-/// This template makes a class with a destructor with arguments singleton
-template<typename T>
-class SingletonThreadsafe
-{
-public:
-	using Value = T;
-
-	// Non copyable
-	SingletonThreadsafe(const SingletonThreadsafe&) = delete;
-	SingletonThreadsafe& operator=(const SingletonThreadsafe&) = delete;
-
-	// Non constructable
-	SingletonThreadsafe() = delete;
-	~SingletonThreadsafe() = delete;
-
-	/// Get instance
-	static Value& get()
-	{
-		LockGuard<Mutex> lock(m_mtx);
-		return *(m_instance ? m_instance : (m_instance = new Value));
-	}
-
-	/// Cleanup
-	static void destroy()
-	{
-		LockGuard<Mutex> lock(m_mtx);
-		if(m_instance)
-		{
-			delete m_instance;
-		}
-	}
-
-private:
-	static Value* m_instance;
-	static Mutex m_mtx;
-};
-
-template<typename T>
-typename SingletonThreadsafe<T>::Value* SingletonThreadsafe<T>::m_instance = nullptr;
-
-template<typename T>
-Mutex SingletonThreadsafe<T>::m_mtx;
+T* MakeSingleton<T>::m_global = nullptr;
 /// @}
 /// @}
 
 
 } // end namespace anki
 } // end namespace anki

+ 11 - 1
AnKi/Util/System.cpp

@@ -212,9 +212,19 @@ void cleanupGetAndroidCommandLineArguments(void* ptr)
 }
 }
 #endif
 #endif
 
 
-void preMainInit()
+// The 1st thing that executes before main
+void preMain()
 {
 {
+	Logger::allocateSingleton();
+	ANKI_UTIL_LOGV("Pre main executed. This should be the 1st message");
 	Thread::setCurrentThreadName("Main");
 	Thread::setCurrentThreadName("Main");
 }
 }
 
 
+// The last thing that executes after main
+void postMain()
+{
+	ANKI_UTIL_LOGV("Post main executed. This should be the last message");
+	Logger::freeSingleton();
+}
+
 } // end namespace anki
 } // end namespace anki

+ 14 - 14
AnKi/Util/Tracer.h

@@ -58,18 +58,14 @@ using TracerFlushCallback = void (*)(void* userData, ThreadId tid, ConstWeakArra
 									 ConstWeakArray<TracerCounter> counters);
 									 ConstWeakArray<TracerCounter> counters);
 
 
 /// Tracer.
 /// Tracer.
-class Tracer
+class Tracer : public MakeSingleton<Tracer>
 {
 {
-public:
-	Tracer(BaseMemoryPool* pool)
-		: m_pool(pool)
-	{
-	}
+	template<typename>
+	friend class MakeSingleton;
 
 
+public:
 	Tracer(const Tracer&) = delete; // Non-copyable
 	Tracer(const Tracer&) = delete; // Non-copyable
 
 
-	~Tracer();
-
 	Tracer& operator=(const Tracer&) = delete; // Non-copyable
 	Tracer& operator=(const Tracer&) = delete; // Non-copyable
 
 
 	/// Begin a new event.
 	/// Begin a new event.
@@ -117,6 +113,13 @@ private:
 
 
 	Bool m_enabled = false;
 	Bool m_enabled = false;
 
 
+	Tracer(BaseMemoryPool* pool)
+		: m_pool(pool)
+	{
+	}
+
+	~Tracer();
+
 	/// Get the thread local ThreadLocal structure.
 	/// Get the thread local ThreadLocal structure.
 	/// @note Thread-safe.
 	/// @note Thread-safe.
 	ThreadLocal& getThreadLocal();
 	ThreadLocal& getThreadLocal();
@@ -125,16 +128,13 @@ private:
 	Chunk& getOrCreateChunk(ThreadLocal& tlocal);
 	Chunk& getOrCreateChunk(ThreadLocal& tlocal);
 };
 };
 
 
-/// The global tracer.
-using TracerSingleton = SingletonInit<Tracer>;
-
 /// Scoped tracer event.
 /// Scoped tracer event.
 class TracerScopedEvent
 class TracerScopedEvent
 {
 {
 public:
 public:
 	TracerScopedEvent(const char* name)
 	TracerScopedEvent(const char* name)
 		: m_name(name)
 		: m_name(name)
-		, m_tracer(&TracerSingleton::get())
+		, m_tracer(&Tracer::getSingleton())
 	{
 	{
 		m_handle = m_tracer->beginEvent();
 		m_handle = m_tracer->beginEvent();
 	}
 	}
@@ -153,9 +153,9 @@ private:
 #if ANKI_ENABLE_TRACE
 #if ANKI_ENABLE_TRACE
 #	define ANKI_TRACE_SCOPED_EVENT(name_) TracerScopedEvent _tse##name_(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)))
 #	define ANKI_TRACE_SCOPED_EVENT(name_) TracerScopedEvent _tse##name_(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)))
 #	define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) \
 #	define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) \
-		TracerSingleton::get().addCustomEvent(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)), start_, duration_)
+		Tracer::getSingleton().addCustomEvent(ANKI_STRINGIZE(ANKI_CONCATENATE(t, name_)), start_, duration_)
 #	define ANKI_TRACE_INC_COUNTER(name_, val_) \
 #	define ANKI_TRACE_INC_COUNTER(name_, val_) \
-		TracerSingleton::get().incrementCounter(ANKI_STRINGIZE(ANKI_CONCATENATE(c, name_)), val_)
+		Tracer::getSingleton().incrementCounter(ANKI_STRINGIZE(ANKI_CONCATENATE(c, name_)), val_)
 #else
 #else
 #	define ANKI_TRACE_SCOPED_EVENT(name_) ((void)0)
 #	define ANKI_TRACE_SCOPED_EVENT(name_) ((void)0)
 #	define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) ((void)0)
 #	define ANKI_TRACE_CUSTOM_EVENT(name_, start_, duration_) ((void)0)

+ 1 - 1
Samples/Common/SampleApp.cpp

@@ -247,7 +247,7 @@ Error SampleApp::userMainLoop(Bool& quit, Second elapsedTime)
 
 
 		if(in.getKey(KeyCode::kF12) == 1 && ANKI_ENABLE_TRACE)
 		if(in.getKey(KeyCode::kF12) == 1 && ANKI_ENABLE_TRACE)
 		{
 		{
-			TracerSingleton::get().setEnabled(!TracerSingleton::get().getEnabled());
+			Tracer::getSingleton().setEnabled(!Tracer::getSingleton().getEnabled());
 		}
 		}
 
 
 		const Vec2 velocity = in.getMousePosition() - mousePosOn1stClick;
 		const Vec2 velocity = in.getMousePosition() - mousePosOn1stClick;

+ 3 - 3
Sandbox/Main.cpp

@@ -53,7 +53,7 @@ Error MyApp::init(int argc, char* argv[])
 	{
 	{
 		m_profile = true;
 		m_profile = true;
 		m_config.setCoreTargetFps(240);
 		m_config.setCoreTargetFps(240);
-		TracerSingleton::get().setEnabled(true);
+		Tracer::getSingleton().setEnabled(true);
 	}
 	}
 
 
 	// Load scene
 	// Load scene
@@ -159,7 +159,7 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 
 
 	if(in.getKey(KeyCode::kF11) == 1)
 	if(in.getKey(KeyCode::kF11) == 1)
 	{
 	{
-		TracerSingleton::get().setEnabled(!TracerSingleton::get().getEnabled());
+		Tracer::getSingleton().setEnabled(!Tracer::getSingleton().getEnabled());
 	}
 	}
 
 
 #if !PLAYER
 #if !PLAYER
@@ -273,7 +273,7 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 
 
 		if(in.getKey(KeyCode::kF12) == 1 && ANKI_ENABLE_TRACE)
 		if(in.getKey(KeyCode::kF12) == 1 && ANKI_ENABLE_TRACE)
 		{
 		{
-			TracerSingleton::get().setEnabled(!TracerSingleton::get().getEnabled());
+			Tracer::getSingleton().setEnabled(!Tracer::getSingleton().getEnabled());
 		}
 		}
 
 
 		const Vec2 velocity = in.getMousePosition() - mousePosOn1stClick;
 		const Vec2 velocity = in.getMousePosition() - mousePosOn1stClick;

+ 0 - 5
Tests/Main.cpp

@@ -13,13 +13,8 @@ int myMain(int argc, char** argv)
 {
 {
 	HeapAllocator<U8> alloc(allocAligned, nullptr);
 	HeapAllocator<U8> alloc(allocAligned, nullptr);
 
 
-	// Call a few singletons to avoid memory leak confusion
-	LoggerSingleton::get();
-
 	int exitcode = getTesterSingleton().run(argc, argv);
 	int exitcode = getTesterSingleton().run(argc, argv);
 
 
-	LoggerSingleton::destroy();
-
 	deleteTesterSingleton();
 	deleteTesterSingleton();
 
 
 	return exitcode;
 	return exitcode;

+ 1 - 1
Tests/Util/Tracer.cpp

@@ -14,7 +14,7 @@ ANKI_TEST(Util, Tracer)
 	HeapMemoryPool alloc(allocAligned, nullptr);
 	HeapMemoryPool alloc(allocAligned, nullptr);
 	CoreTracer tracer;
 	CoreTracer tracer;
 	ANKI_TEST_EXPECT_NO_ERR(tracer.init(&alloc, "./"));
 	ANKI_TEST_EXPECT_NO_ERR(tracer.init(&alloc, "./"));
-	TracerSingleton::get().setEnabled(true);
+	Tracer::getSingleton().setEnabled(true);
 
 
 	// 1st frame
 	// 1st frame
 	tracer.flushFrame(0);
 	tracer.flushFrame(0);

+ 1 - 1
Tools/GltfImporter/Main.cpp

@@ -77,7 +77,7 @@ static Error parseCommandLineArgs(int argc, char** argv, CmdLineArgs& info)
 		}
 		}
 		else if(strcmp(argv[i], "-v") == 0)
 		else if(strcmp(argv[i], "-v") == 0)
 		{
 		{
-			LoggerSingleton::get().enableVerbosity(true);
+			Logger::getSingleton().enableVerbosity(true);
 		}
 		}
 		else if(strcmp(argv[i], "-rpath") == 0)
 		else if(strcmp(argv[i], "-rpath") == 0)
 		{
 		{

+ 1 - 1
Tools/Image/ImageImporterMain.cpp

@@ -195,7 +195,7 @@ static Error parseCommandLineArgs(int argc, char** argv, ImageImporterConfig& co
 		}
 		}
 		else if(CString(argv[i]) == "-v")
 		else if(CString(argv[i]) == "-v")
 		{
 		{
-			LoggerSingleton::get().enableVerbosity(true);
+			Logger::getSingleton().enableVerbosity(true);
 		}
 		}
 		else if(CString(argv[i]) == "-to-linear")
 		else if(CString(argv[i]) == "-to-linear")
 		{
 		{