Browse Source

Minor refactoring

Panagiotis Christopoulos Charitos 2 days ago
parent
commit
b24fef430e

+ 24 - 5
AnKi/Core/App.cpp

@@ -112,7 +112,7 @@ void* App::statsAllocCallback(void* userData, void* ptr, PtrSize size, [[maybe_u
 	return out;
 }
 
-App::App(CString appName, AllocAlignedCallback allocCb, void* allocCbUserData)
+App::App(CString appName, U32 argc, Char** argv, AllocAlignedCallback allocCb, void* allocCbUserData)
 {
 	m_originalAllocCallback = allocCb;
 	m_originalAllocUserData = allocCbUserData;
@@ -136,6 +136,14 @@ App::App(CString appName, AllocAlignedCallback allocCb, void* allocCbUserData)
 		appName = "UnnamedApp";
 	}
 	m_appName = appName;
+
+	if(argc > 1 && argv)
+	{
+		if(CVarSet::getSingleton().setFromCommandLineArguments(argc - 1, argv + 1))
+		{
+			ANKI_CORE_LOGE("Error setting command line arguments");
+		}
+	}
 }
 
 App::~App()
@@ -183,7 +191,6 @@ void App::cleanup()
 Error App::init()
 {
 	StatsSet::getSingleton().initFromMainThread();
-	Logger::getSingleton().enableVerbosity(g_cvarCoreVerboseLog);
 
 	if(g_cvarCoreShowEditor)
 	{
@@ -192,8 +199,6 @@ Error App::init()
 
 	ANKI_CHECK(initDirs());
 
-	ANKI_CORE_LOGI("Initializing application. Build config: %s", kAnKiBuildConfigString);
-
 // Check SIMD support
 #if ANKI_SIMD_SSE && ANKI_COMPILER_GCC_COMPATIBLE
 	if(!__builtin_cpu_supports("sse4.2"))
@@ -376,6 +381,8 @@ Error App::initDirs()
 
 Error App::mainLoop()
 {
+	ANKI_CORE_LOGI("Starting application. Build config: %s", kAnKiBuildConfigString);
+
 	// Initialize the application
 	Error err = Error::kNone;
 	if((err = userPreInit()))
@@ -384,6 +391,16 @@ Error App::mainLoop()
 		return err;
 	}
 
+	Logger::getSingleton().enableVerbosity(g_cvarCoreVerboseLog);
+
+	ANKI_CORE_LOGV("CVar values before initializing the subsystems");
+	CVarSet::getSingleton().iterateCVars([](CVar& cvar) {
+		Array<Char, 256> str;
+		cvar.toString(str);
+		ANKI_CORE_LOGV("\t%s", str.getBegin());
+		return FunctorContinue::kContinue;
+	});
+
 	if((err = init()))
 	{
 		ANKI_CORE_LOGE("App initialization failed. Shutting down");
@@ -444,7 +461,9 @@ Error App::mainLoop()
 			GrManager::getSingleton().beginFrame();
 
 			GpuSceneMicroPatcher::getSingleton().beginPatching();
-			ANKI_CHECK(userMainLoop(quit, crntTime - prevUpdateTime));
+			Bool userQuit = false;
+			ANKI_CHECK(userMainLoop(userQuit, crntTime - prevUpdateTime));
+			quit = quit || userQuit;
 
 			SceneGraph::getSingleton().update(prevUpdateTime, crntTime);
 			GpuSceneMicroPatcher::getSingleton().endPatching();

+ 1 - 1
AnKi/Core/App.h

@@ -35,7 +35,7 @@ ANKI_SVAR(CpuTotalTime, StatCategory::kTime, "CPU total", StatFlag::kMilisecond
 class App
 {
 public:
-	App(CString applicationName, AllocAlignedCallback allocCb = allocAligned, void* allocCbUserData = nullptr);
+	App(CString applicationName, U32 argc, Char** argv, AllocAlignedCallback allocCb = allocAligned, void* allocCbUserData = nullptr);
 
 	virtual ~App();
 

+ 1 - 0
AnKi/Core/Common.h

@@ -17,6 +17,7 @@ namespace anki {
 #define ANKI_CORE_LOGE(...) ANKI_LOG("CORE", kError, __VA_ARGS__)
 #define ANKI_CORE_LOGW(...) ANKI_LOG("CORE", kWarning, __VA_ARGS__)
 #define ANKI_CORE_LOGF(...) ANKI_LOG("CORE", kFatal, __VA_ARGS__)
+#define ANKI_CORE_LOGV(...) ANKI_LOG("CORE", kVerbose, __VA_ARGS__)
 
 class CoreMemoryPool : public HeapMemoryPool, public MakeSingleton<CoreMemoryPool>
 {

+ 39 - 16
AnKi/Util/CVarSet.h

@@ -12,13 +12,10 @@
 
 namespace anki {
 
-/// @addtogroup util_other
-/// @{
-
-/// Define a global CVAR.
+// Define a global CVAR.
 #define ANKI_CVAR(type, namespace, name, ...) inline type g_cvar##namespace##name(ANKI_STRINGIZE(namespace) "." ANKI_STRINGIZE(name), __VA_ARGS__);
 
-/// Same as ANKI_CVAR but you can define 2 namespaces.
+// Same as ANKI_CVAR but you can define 2 namespaces.
 #define ANKI_CVAR2(type, namespaceA, namespaceB, name, ...) \
 	inline type g_cvar##namespaceA##namespaceB##name(ANKI_STRINGIZE(namespaceA) "." ANKI_STRINGIZE(namespaceB) "." ANKI_STRINGIZE(name), __VA_ARGS__);
 
@@ -34,7 +31,7 @@ enum class CVarValueType : U32
 	kNumericF64
 };
 
-/// ConfigSet variable base.
+// ConfigSet variable base.
 class CVar : public IntrusiveListEnabled<CVar>
 {
 	friend class CVarSet;
@@ -54,6 +51,8 @@ public:
 		return m_type;
 	}
 
+	virtual void toString(WeakArray<Char> str) = 0;
+
 protected:
 	CString m_name;
 	CString m_descr;
@@ -80,14 +79,14 @@ private:
 	void registerSelf();
 };
 
-/// Numeric config variable.
+// Numeric config variable.
 template<typename TNumber>
 class NumericCVar : public CVar
 {
 public:
 	using CheckValueCallback = Bool (*)(TNumber);
 
-	/// Initialize using a custom callback the checks the correctness of the value.
+	// Initialize using a custom callback the checks the correctness of the value.
 	NumericCVar(CString name, TNumber defaultVal, CheckValueCallback checkValueCallback, CString descr = CString())
 		: CVar(getCVarType(), name, descr)
 		, m_value(defaultVal)
@@ -97,7 +96,7 @@ public:
 		ANKI_ASSERT(checkValueCallback(defaultVal));
 	}
 
-	/// Initialize using a min max range.
+	// Initialize using a min max range.
 	NumericCVar(CString name, TNumber defaultVal, TNumber min = getMinNumericLimit<TNumber>(), TNumber max = getMaxNumericLimit<TNumber>(),
 				CString descr = CString())
 		: CVar(getCVarType(), name, descr)
@@ -148,6 +147,18 @@ private:
 	CheckValueCallback m_checkValueCallback = nullptr;
 
 	static CVarValueType getCVarType();
+
+	void toString(WeakArray<Char> str) final
+	{
+		if constexpr(std::is_integral_v<TNumber>)
+		{
+			std::snprintf(str.getBegin(), str.getSize(), "%s %" PRIu64, getName().cstr(), U64(m_value));
+		}
+		else
+		{
+			std::snprintf(str.getBegin(), str.getSize(), "%s %f", getName().cstr(), m_value);
+		}
+	}
 };
 
 #define ANKI_CVAR_NUMERIC_TYPE(type) \
@@ -165,7 +176,7 @@ ANKI_CVAR_NUMERIC_TYPE(F32)
 ANKI_CVAR_NUMERIC_TYPE(F64)
 #undef ANKI_CVAR_NUMERIC_TYPE
 
-/// String config variable.
+// String config variable.
 class StringCVar : public CVar
 {
 public:
@@ -212,9 +223,14 @@ public:
 
 private:
 	Char* m_str;
+
+	void toString(WeakArray<Char> str) final
+	{
+		std::snprintf(str.getBegin(), str.getSize(), "%s %s", getName().cstr(), m_str);
+	}
 };
 
-/// Boolean config variable.
+// Boolean config variable.
 class BoolCVar : public CVar
 {
 public:
@@ -238,9 +254,14 @@ public:
 
 private:
 	Bool m_val;
+
+	void toString(WeakArray<Char> str) final
+	{
+		std::snprintf(str.getBegin(), str.getSize(), "%s %d", getName().cstr(), m_val);
+	}
 };
 
-/// Access all configuration variables.
+// Access all configuration variables.
 class CVarSet : public MakeSingletonLazyInit<CVarSet>
 {
 	friend class CVar;
@@ -271,15 +292,18 @@ public:
 	Error setMultiple(ConstWeakArray<const Char*> arr);
 
 	template<typename TFunc>
-	void iterateCVars(TFunc func)
+	FunctorContinue iterateCVars(TFunc func)
 	{
+		FunctorContinue cont = FunctorContinue::kContinue;
 		for(CVar& cvar : m_cvars)
 		{
-			if(func(cvar) == FunctorContinue::kStop)
+			cont = func(cvar);
+			if(cont == FunctorContinue::kStop)
 			{
-				return;
+				break;
 			}
 		}
+		return cont;
 	}
 
 private:
@@ -295,6 +319,5 @@ inline void CVar::registerSelf()
 {
 	CVarSet::getSingleton().registerCVar(this);
 }
-/// @}
 
 } // end namespace anki

+ 0 - 2
Samples/Common/SampleApp.cpp

@@ -26,8 +26,6 @@ Error SampleApp::userPreInit()
 	}
 #endif
 
-	ANKI_CHECK(CVarSet::getSingleton().setFromCommandLineArguments(m_argc - 1, m_argv + 1));
-
 	return Error::kNone;
 }
 

+ 1 - 6
Samples/Common/SampleApp.h

@@ -12,13 +12,8 @@ namespace anki {
 class SampleApp : public App
 {
 public:
-	U32 m_argc = 0;
-	Char** m_argv = nullptr;
-
 	SampleApp(U32 argc, Char** argv, CString appName)
-		: App(appName)
-		, m_argc(argc)
-		, m_argv(argv)
+		: App(appName, argc, argv)
 	{
 	}
 

+ 13 - 125
Sandbox/Main.cpp

@@ -10,74 +10,30 @@ using namespace anki;
 class MyApp : public App
 {
 public:
-	Bool m_profile = false;
-	U32 m_argc = 0;
-	Char** m_argv = nullptr;
-
 	MyApp(U32 argc, Char** argv)
-		: App("Sandbox")
-		, m_argc(argc)
-		, m_argv(argv)
+		: App("Sandbox", argc, argv)
 	{
 	}
 
-	Error userPreInit() override;
-	Error userPostInit() override;
 	Error userMainLoop(Bool& quit, Second elapsedTime) override;
 };
 
-Error MyApp::userPreInit()
-{
-	ANKI_CHECK(CVarSet::getSingleton().setFromCommandLineArguments(m_argc - 1, m_argv + 1));
-	return Error::kNone;
-}
-
-Error MyApp::userPostInit()
-{
-	if(getenv("PROFILE"))
-	{
-		m_profile = true;
-		g_cvarCoreTargetFps = 240;
-#if ANKI_TRACING_ENABLED
-		g_cvarCoreTracingEnabled = true;
-#endif
-	}
-
-	return Error::kNone;
-}
-
 Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 {
 	quit = false;
 
 	SceneGraph& scene = SceneGraph::getSingleton();
 	Input& in = Input::getSingleton();
-	Renderer& renderer = Renderer::getSingleton();
 
-	if(in.getKey(KeyCode::kEscape) > 0)
+	if(scene.isPaused())
 	{
-		quit = true;
+		// Editor running
 		return Error::kNone;
 	}
 
 	// move the camera
 	static SceneNode* mover = &scene.getActiveCameraNode();
 
-	if(in.getKey(KeyCode::k1) > 0)
-	{
-		mover = &scene.getActiveCameraNode();
-	}
-	if(in.getKey(KeyCode::k2) > 0)
-	{
-		mover = &scene.findSceneNode("Point.018_Orientation");
-	}
-
-	if(in.getKey(KeyCode::kL) == 1)
-	{
-		const Vec3 origin = mover->getWorldTransform().getOrigin().xyz;
-		mover->setLocalOrigin(origin + Vec3(0, 15, 0));
-	}
-
 #if ANKI_TRACING_ENABLED
 	if(in.getKey(KeyCode::kF11) == 1)
 	{
@@ -94,34 +50,29 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 
 	if(in.getMouseButton(MouseButton::kRight) > 0 || in.hasTouchDevice())
 	{
-		constexpr F32 ROTATE_ANGLE = toRad(2.5f);
-		constexpr F32 MOUSE_SENSITIVITY = 5.0f;
+		constexpr F32 kRotateAngle = toRad(2.5f);
+		constexpr F32 kMouseSensitivity = 5.0f;
 
 		in.hideMouseCursor(true);
 
-		if(in.getKey(KeyCode::k1) == 1)
-		{
-			mover = &scene.getActiveCameraNode();
-		}
-
 		if(in.getKey(KeyCode::kUp) > 0)
 		{
-			mover->rotateLocalX(ROTATE_ANGLE);
+			mover->rotateLocalX(kRotateAngle);
 		}
 
 		if(in.getKey(KeyCode::kDown) > 0)
 		{
-			mover->rotateLocalX(-ROTATE_ANGLE);
+			mover->rotateLocalX(-kRotateAngle);
 		}
 
 		if(in.getKey(KeyCode::kLeft) > 0)
 		{
-			mover->rotateLocalY(ROTATE_ANGLE);
+			mover->rotateLocalY(kRotateAngle);
 		}
 
 		if(in.getKey(KeyCode::kRight) > 0)
 		{
-			mover->rotateLocalY(-ROTATE_ANGLE);
+			mover->rotateLocalY(-kRotateAngle);
 		}
 
 		static F32 moveDistance = 0.1f;
@@ -172,9 +123,9 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 		if(velocity != Vec2(0.0))
 		{
 			Euler angles(mover->getLocalRotation().getRotationPart());
-			angles.x += velocity.y * toRad(360.0f) * F32(elapsedTime) * MOUSE_SENSITIVITY;
+			angles.x += velocity.y * toRad(360.0f) * F32(elapsedTime) * kMouseSensitivity;
 			angles.x = clamp(angles.x, toRad(-90.0f), toRad(90.0f)); // Avoid cycle in Y axis
-			angles.y += -velocity.x * toRad(360.0f) * F32(elapsedTime) * MOUSE_SENSITIVITY;
+			angles.y += -velocity.x * toRad(360.0f) * F32(elapsedTime) * kMouseSensitivity;
 			angles.z = 0.0f;
 			mover->setLocalRotation(Mat3(angles));
 		}
@@ -202,9 +153,9 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 			velocity *= 0.3f;
 
 			Euler angles(mover->getLocalRotation().getRotationPart());
-			angles.x += velocity.y * toRad(360.0f) * F32(elapsedTime) * MOUSE_SENSITIVITY;
+			angles.x += velocity.y * toRad(360.0f) * F32(elapsedTime) * kMouseSensitivity;
 			angles.x = clamp(angles.x, toRad(-90.0f), toRad(90.0f)); // Avoid cycle in Y axis
-			angles.y += -velocity.x * toRad(360.0f) * F32(elapsedTime) * MOUSE_SENSITIVITY;
+			angles.y += -velocity.x * toRad(360.0f) * F32(elapsedTime) * kMouseSensitivity;
 			angles.z = 0.0f;
 			mover->setLocalRotation(Mat3(angles));
 		}
@@ -240,74 +191,11 @@ Error MyApp::userMainLoop(Bool& quit, Second elapsedTime)
 		in.hideMouseCursor(false);
 	}
 
-	if(in.getKey(KeyCode::kY) == 1)
-	{
-		renderer.setCurrentDebugRenderTarget(
-			(renderer.getCurrentDebugRenderTarget() == "IndirectDiffuseClipmapsTest") ? "" : "IndirectDiffuseClipmapsTest");
-		// g_shadowMappingPcssCVar = !g_shadowMappingPcssCVar;
-	}
-
-	if(in.getKey(KeyCode::kU) == 1)
-	{
-		renderer.setCurrentDebugRenderTarget((renderer.getCurrentDebugRenderTarget() == "Reflections") ? "" : "Reflections");
-	}
-
-	if(in.getKey(KeyCode::kI) == 1)
-	{
-		renderer.setCurrentDebugRenderTarget((renderer.getCurrentDebugRenderTarget() == "IndirectDiffuse") ? "" : "IndirectDiffuse");
-	}
-
-	if(in.getKey(KeyCode::kO) == 1)
-	{
-		renderer.setCurrentDebugRenderTarget((renderer.getCurrentDebugRenderTarget() == "RtMaterialFetchDbg") ? "" : "RtMaterialFetchDbg");
-	}
-
-	/*if(in.getKey(KeyCode::J) == 1)
-	{
-		renderer.setCurrentDebugRenderTarget((renderer.getCurrentDebugRenderTarget() == "MotionVectorsHistoryLength")
-												 ? ""
-												 : "MotionVectorsHistoryLength");
-	}*/
-
-	if(in.getKey(KeyCode::kP) == 1)
-	{
-		static U32 idx = 3;
-		++idx;
-		idx %= 4;
-		if(idx == 0)
-		{
-			renderer.setCurrentDebugRenderTarget("IndirectDiffuseVrsSri");
-		}
-		else if(idx == 1)
-		{
-			renderer.setCurrentDebugRenderTarget("VrsSriDownscaled");
-		}
-		else if(idx == 2)
-		{
-			renderer.setCurrentDebugRenderTarget("VrsSri");
-		}
-		else
-		{
-			renderer.setCurrentDebugRenderTarget("");
-		}
-	}
-
-	if(in.getKey(KeyCode::kJ) == 1)
-	{
-		g_cvarGrVrs = !g_cvarGrVrs;
-	}
-
 	if(in.getEvent(InputEvent::kWindowClosed))
 	{
 		quit = true;
 	}
 
-	if(m_profile && GlobalFrameIndex::getSingleton().m_value == 1000)
-	{
-		quit = true;
-		return Error::kNone;
-	}
-
 	return Error::kNone;
 }
 

+ 1 - 7
Tools/Editor/EditorMain.cpp

@@ -10,15 +10,10 @@ using namespace anki;
 class MyApp : public App
 {
 public:
-	U32 m_argc = 0;
-	Char** m_argv = nullptr;
-
 	String m_sceneLuaFname;
 
 	MyApp(U32 argc, Char** argv)
-		: App("AnKiEditor")
-		, m_argc(argc)
-		, m_argv(argv)
+		: App("AnKiEditor", argc, argv)
 	{
 	}
 
@@ -28,7 +23,6 @@ public:
 		g_cvarWindowMaximized = true;
 		g_cvarWindowBorderless = true;
 		g_cvarCoreShowEditor = true;
-		ANKI_CHECK(CVarSet::getSingleton().setFromCommandLineArguments(m_argc - 1, m_argv + 1));
 
 		return Error::kNone;
 	}

+ 23 - 18
Tools/Image/ImageViewerMain.cpp

@@ -49,27 +49,18 @@ private:
 class MyApp : public App
 {
 public:
-	U32 m_argc = 0;
-	Char** m_argv = nullptr;
+	const Char* m_imageFilename;
 
-	MyApp(U32 argc, Char** argv)
-		: App("ImageViewer")
-		, m_argc(argc)
-		, m_argv(argv)
+	MyApp(U32 argc, Char** argv, const Char* imageFilename)
+		: App("ImageViewer", argc, argv)
+		, m_imageFilename(imageFilename)
 	{
 	}
 
 	Error userPreInit() override
 	{
-		if(m_argc < 2)
-		{
-			ANKI_LOGE("Wrong number of arguments");
-			return Error::kUserData;
-		}
-
 		g_cvarWindowFullscreen = 0;
 		g_cvarRsrcDataPaths = ANKI_SOURCE_DIRECTORY;
-		ANKI_CHECK(CVarSet::getSingleton().setFromCommandLineArguments(m_argc - 2, m_argv + 2));
 
 		return Error::kNone;
 	}
@@ -78,11 +69,11 @@ public:
 	{
 		// Load the texture
 		ImageResourcePtr image;
-		ANKI_CHECK(ResourceManager::getSingleton().loadResource(m_argv[1], image, false));
+		ANKI_CHECK(ResourceManager::getSingleton().loadResource(m_imageFilename, image, false));
 
 		// Change window name
 		String title;
-		title.sprintf("%s %u x %u Mips %u Format %s", m_argv[1], image->getTexture().getWidth(), image->getTexture().getHeight(),
+		title.sprintf("%s %u x %u Mips %u Format %s", m_imageFilename, image->getTexture().getWidth(), image->getTexture().getHeight(),
 					  image->getTexture().getMipmapCount(), getFormatInfo(image->getTexture().getFormat()).m_name);
 		NativeWindow::getSingleton().setWindowTitle(title);
 
@@ -108,18 +99,32 @@ public:
 ANKI_MAIN_FUNCTION(myMain)
 int myMain(int argc, char* argv[])
 {
-	MyApp* app = new MyApp(argc, argv);
+	if(argc < 2)
+	{
+		ANKI_LOGE("Wrong number of arguments");
+		return 1;
+	}
+
+	Array<Char*, 32> args;
+	U32 argCount = 0;
+	args[argCount++] = argv[0];
+	for(I32 i = 2; i < argc; ++i)
+	{
+		args[argCount++] = argv[i];
+	}
+
+	MyApp* app = new MyApp(argCount, args.getBegin(), argv[1]);
 	const Error err = app->mainLoop();
 	delete app;
 
 	if(err)
 	{
 		ANKI_LOGE("Error reported. Bye!!");
+		return 1;
 	}
 	else
 	{
 		ANKI_LOGI("Bye!!");
+		return 0;
 	}
-
-	return 0;
 }