2
0
Эх сурвалжийг харах

Fixing counters, fixing particles, adding performance options

Panagiotis Christopoulos Charitos 11 жил өмнө
parent
commit
99e90277d8

+ 3 - 2
include/anki/core/Counters.h

@@ -36,7 +36,8 @@ enum class Counter
 class CountersManager
 {
 public:
-	CountersManager();
+	CountersManager(HeapAllocator<U8>& alloc, const CString& cacheDir);
+
 	~CountersManager();
 
 	void increaseCounter(Counter counter, F64 val);
@@ -64,7 +65,7 @@ private:
 };
 
 /// The singleton of the counters manager
-typedef Singleton<CountersManager> CountersManagerSingleton;
+typedef SingletonInit<CountersManager> CountersManagerSingleton;
 
 // Macros that encapsulate the functionaly
 

+ 1 - 1
include/anki/gl/GlCommon.h

@@ -28,7 +28,7 @@
 #	error "See file"
 #endif
 
-#define ANKI_QUEUE_DISABLE_ASYNC 1
+#define ANKI_QUEUE_DISABLE_ASYNC 0
 
 namespace anki {
 

+ 1 - 0
include/anki/resource/ResourcePointer.inl.h

@@ -56,6 +56,7 @@ void ResourcePointer<T, TResourceManager>::load(
 					*resources);
 
 				U allocsCountBefore = pool.getAllocationsCount();
+				(void)allocsCountBefore;
 
 				m_cb->m_resource.load(newFname.toCString(), init);
 

+ 1 - 0
shaders/BsCommonFrag.glsl

@@ -64,6 +64,7 @@ void particleSoftTextureAlpha(in sampler2D depthMap, in sampler2D tex,
 
 	vec4 color = texture(tex, gl_PointCoord);
 	color.a *= alpha * softalpha;
+
 	writeGBuffer(color);
 }
 #endif

+ 19 - 7
src/core/App.cpp

@@ -109,8 +109,10 @@ void App::cleanup()
 }
 
 //==============================================================================
-void App::init(const ConfigSet& config)
+void App::init(const ConfigSet& config_)
 {
+	ConfigSet config = config_;
+
 	initDirs();
 
 	// Logger
@@ -138,6 +140,10 @@ void App::init(const ConfigSet& config)
 
 	m_timerTick = 1.0 / 60.0; // in sec. 1.0 / period
 
+#if ANKI_ENABLE_COUNTERS
+	CountersManagerSingleton::init(m_heapAlloc, m_settingsDir.toCString());
+#endif
+
 	// Window
 	NativeWindow::Initializer nwinit;
 	nwinit.m_width = config.get("width");
@@ -146,7 +152,7 @@ void App::init(const ConfigSet& config)
 	nwinit.m_minorVersion = config.get("glminor");
 	nwinit.m_depthBits = 0;
 	nwinit.m_stencilBits = 0;
-	nwinit.m_fullscreenDesktopRez = config.get("fullscreen");
+	nwinit.m_fullscreenDesktopRez = config.get("fullscreenDesktopResolution");
 	nwinit.m_debugContext = ANKI_DEBUG;
 	m_window = m_heapAlloc.newInstance<NativeWindow>(nwinit, m_heapAlloc);	
 	m_ctx = m_window->getCurrentContext();
@@ -179,6 +185,12 @@ void App::init(const ConfigSet& config)
 	m_resources = m_heapAlloc.newInstance<ResourceManager>(rinit);
 
 	// Renderer
+	if(nwinit.m_fullscreenDesktopRez)
+	{
+		config.set("width", m_window->getWidth());
+		config.set("height", m_window->getHeight());
+	}
+
 	m_renderer = m_heapAlloc.newInstance<MainRenderer>(
 		m_threadpool,
 		m_resources,
@@ -219,14 +231,14 @@ void App::initDirs()
 #if ANKI_OS != ANKI_OS_ANDROID
 	// Settings path
 	String home = getHomeDirectory(m_heapAlloc);
-	String settingsDir = home + "/.anki";
-	if(!directoryExists(settingsDir.toCString()))
+	m_settingsDir = home + "/.anki";
+	if(!directoryExists(m_settingsDir.toCString()))
 	{
-		createDirectory(settingsDir.toCString());
+		createDirectory(m_settingsDir.toCString());
 	}
 
 	// Cache
-	m_cacheDir = settingsDir + "/cache";
+	m_cacheDir = m_settingsDir + "/cache";
 	if(directoryExists(m_cacheDir.toCString()))
 	{
 		removeDirectory(m_cacheDir.toCString());
@@ -287,7 +299,7 @@ void App::mainLoop(UserMainLoopCallback callback, void* userData)
 
 		// Sleep
 		timer.stop();
-		if(timer.getElapsedTime() < getTimerTick())
+		if(timer.getElapsedTime() < m_timerTick)
 		{
 			HighRezTimer::sleep(getTimerTick() - timer.getElapsedTime());
 		}

+ 1 - 1
src/core/Config.cpp

@@ -88,7 +88,7 @@ Config::Config()
 	//
 	newOption("glminor", 4);
 	newOption("glmajor", 4);
-	newOption("fullscreen", false);
+	newOption("fullscreenDesktopResolution", false);
 }
 
 //==============================================================================

+ 7 - 3
src/core/Counters.cpp

@@ -52,7 +52,11 @@ static const Array<CounterInfo, (U)Counter::COUNT> cinfo = {{
 #define MAX_NAME "24"
 
 //==============================================================================
-CountersManager::CountersManager()
+CountersManager::CountersManager(
+	HeapAllocator<U8>& alloc, const CString& cacheDir)
+:	m_perframeValues(alloc),
+	m_perrunValues(alloc),
+	m_counterTimes(alloc)
 {
 	m_perframeValues.resize((U)Counter::COUNT, 0);
 	m_perrunValues.resize((U)Counter::COUNT, 0);
@@ -60,7 +64,7 @@ CountersManager::CountersManager()
 
 	// Open and write the headers to the files
 	m_perframeFile.open(
-		(AppSingleton::get().getSettingsPath() + "/frame_counters.csv").c_str(), 
+		(String(cacheDir, alloc) + "/frame_counters.csv").toCString(),
 		File::OpenFlag::WRITE);
 
 	m_perframeFile.writeText("FRAME");
@@ -75,7 +79,7 @@ CountersManager::CountersManager()
 
 	// Open and write the headers to the other file
 	m_perrunFile.open(
-		(AppSingleton::get().getSettingsPath() + "/run_counters.csv").c_str(), 
+		(String(cacheDir, alloc) + "/run_counters.csv").toCString(),
 		File::OpenFlag::WRITE);
 
 	U i = 0;

+ 2 - 0
src/gl/GlState.cpp

@@ -129,6 +129,8 @@ void GlState::init()
 	}
 #endif
 
+	glEnable(GL_PROGRAM_POINT_SIZE);
+
 	// Buffer offset alignment
 	GLint64 alignment;
 	glGetInteger64v(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &alignment);

+ 20 - 7
testapp/Main.cpp

@@ -36,6 +36,7 @@ App* app;
 ModelNode* horse;
 PerspectiveCamera* cam;
 
+
 //==============================================================================
 void init()
 {
@@ -47,6 +48,11 @@ void init()
 
 	scene.setAmbientColor(Vec4(0.1, 0.05, 0.05, 0.0) * 3);
 
+	if(getenv("PROFILE"))
+	{
+		app->setTimerTick(0.0);
+	}
+
 #if 0
 	painter = new UiPainter(Vec2(AppSingleton::get().getWindowWidth(),
 		AppSingleton::get().getWindowHeight()));
@@ -65,7 +71,7 @@ void init()
 	scene.setActiveCamera(cam);
 
 	// lights
-#if 0
+#if 1
 	Vec3 lpos(-24.0, 0.1, -10.0);
 	for(int i = 0; i < 50; i++)
 	{
@@ -79,7 +85,7 @@ void init()
 				randFloat(6.0) - 2.0, randFloat(6.0) - 2.0, 0.0));
 			point->setSpecularColor(Vec4(randFloat(6.0) - 3.0, 
 				randFloat(6.0) - 3.0, randFloat(6.0) - 3.0, 0.0));
-			point->setLocalOrigin(lpos);
+			point->setLocalOrigin(lpos.xyz0());
 
 			lpos.z() += 2.0;
 		}
@@ -89,12 +95,12 @@ void init()
 	}
 #endif
 
-#if 0
+#if 1
 	SpotLight* spot = scene.newSceneNode<SpotLight>("spot0");
 	spot->setOuterAngle(toRad(45.0));
 	spot->setInnerAngle(toRad(15.0));
-	spot->setLocalTransform(Transform(Vec3(8.27936, 5.86285, 1.85526),
-		Mat3(Quat(-0.125117, 0.620465, 0.154831, 0.758544)), 1.0));
+	spot->setLocalTransform(Transform(Vec4(8.27936, 5.86285, 1.85526, 0.0),
+		Mat3x4(Quat(-0.125117, 0.620465, 0.154831, 0.758544)), 1.0));
 	spot->setDiffuseColor(Vec4(1.0));
 	spot->setSpecularColor(Vec4(-1.0));
 	spot->setDistance(30.0);
@@ -104,8 +110,8 @@ void init()
 	spot = scene.newSceneNode<SpotLight>("spot1");
 	spot->setOuterAngle(toRad(45.0));
 	spot->setInnerAngle(toRad(15.0));
-	spot->setLocalTransform(Transform(Vec3(5.3, 4.3, 3.0),
-		Mat3::getIdentity(), 1.0));
+	spot->setLocalTransform(Transform(Vec4(5.3, 4.3, 3.0, 0.0),
+		Mat3x4::getIdentity(), 1.0));
 	spot->setDiffuseColor(Vec4(3.0, 0.0, 0.0, 0.0));
 	spot->setSpecularColor(Vec4(3.0, 3.0, 0.0, 0.0));
 	spot->setDistance(30.0);
@@ -452,6 +458,11 @@ end)");
 
 	//execStdinScpripts();
 
+	if(getenv("PROFILE") && getGlobTimestamp() == 2000)
+	{
+		return 1;
+	}
+
 	return 0;
 }
 
@@ -495,6 +506,8 @@ void initSubsystems(int argc, char* argv[])
 	config.set("tilesXCount", 16);
 	config.set("tilesYCount", 16);
 
+	config.set("fullscreenDesktopResolution", true);
+
 	app = new App(config, allocAligned, nullptr);
 
 	// Input