about summary refs log tree commit diff
path: root/src/engine
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2012-01-01 13:38:46 +0100
committerMagnus Auvinen <magnus.auvinen@gmail.com>2012-01-01 13:38:46 +0100
commitc1942ca6cbafb605e3ebc8e8cfabf982144f388f (patch)
treebbec7885b34053d3075c0997498f9eab49a25b77 /src/engine
parent8b76105cfa70e74b76e38ed2a867e806bba8e0ff (diff)
downloadzcatch-c1942ca6cbafb605e3ebc8e8cfabf982144f388f.tar.gz
zcatch-c1942ca6cbafb605e3ebc8e8cfabf982144f388f.zip
fixed the render frame time and cleaned up some more code
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/client.h4
-rw-r--r--src/engine/client/client.cpp60
-rw-r--r--src/engine/client/client.h9
-rw-r--r--src/engine/client/graphics_threaded.cpp132
-rw-r--r--src/engine/client/graphics_threaded.h10
5 files changed, 53 insertions, 162 deletions
diff --git a/src/engine/client.h b/src/engine/client.h
index 966e8f61..e9076b76 100644
--- a/src/engine/client.h
+++ b/src/engine/client.h
@@ -23,7 +23,7 @@ protected:
 	float m_PredIntraTick;
 
 	float m_LocalTime;
-	float m_FrameTime;
+	float m_RenderFrameTime;
 
 	int m_GameTickSpeed;
 public:
@@ -68,7 +68,7 @@ public:
 	inline int GameTickSpeed() const { return m_GameTickSpeed; }
 
 	// other time access
-	inline float FrameTime() const { return m_FrameTime; }
+	inline float RenderFrameTime() const { return m_RenderFrameTime; }
 	inline float LocalTime() const { return m_LocalTime; }
 
 	// actions
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index b54b9084..b7244db4 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -244,10 +244,11 @@ CClient::CClient() : m_DemoPlayer(&m_SnapshotDelta), m_DemoRecorder(&m_SnapshotD
 	m_pMap = 0;
 	m_pConsole = 0;
 
-	m_FrameTime = 0.0001f;
-	m_FrameTimeLow = 1.0f;
-	m_FrameTimeHigh = 0.0f;
-	m_Frames = 0;
+	m_RenderFrameTime = 0.0001f;
+	m_RenderFrameTimeLow = 1.0f;
+	m_RenderFrameTimeHigh = 0.0f;
+	m_RenderFrames = 0;
+	m_LastRenderTime = time_get();
 
 	m_GameTickSpeed = SERVER_TICK_SPEED;
 
@@ -681,13 +682,13 @@ void CClient::DebugRender()
 		udp = 8
 		total = 42
 	*/
-	FrameTimeAvg = FrameTimeAvg*0.9f + m_FrameTime*0.1f;
+	FrameTimeAvg = FrameTimeAvg*0.9f + m_RenderFrameTime*0.1f;
 	str_format(aBuffer, sizeof(aBuffer), "ticks: %8d %8d mem %dk %d gfxmem: %dk fps: %3d",
 		m_CurGameTick, m_PredTick,
 		mem_stats()->allocated/1024,
 		mem_stats()->total_allocations,
 		Graphics()->MemoryUsage()/1024,
-		(int)(1.0f/FrameTimeAvg));
+		(int)(1.0f/FrameTimeAvg + 0.5f));
 	Graphics()->QuadsText(2, 2, 16, 1,1,1,1, aBuffer);
 
 
@@ -1691,9 +1692,6 @@ void CClient::InitInterfaces()
 
 void CClient::Run()
 {
-	int64 ReportTime = time_get();
-	int64 ReportInterval = time_freq()*1;
-
 	m_LocalStartTime = time_get();
 	m_SnapshotParts = 0;
 
@@ -1772,9 +1770,6 @@ void CClient::Run()
 
 	while (1)
 	{
-		int64 FrameStartTime = time_get();
-		m_Frames++;
-
 		//
 		VersionUpdate();
 
@@ -1866,9 +1861,22 @@ void CClient::Run()
 			
 			if(!g_Config.m_GfxAsyncRender || m_pGraphics->IsIdle())
 			{
+				m_RenderFrames++;
+
+				// update frametime
+				int64 Now = time_get();
+				m_RenderFrameTime = (Now - m_LastRenderTime) / (float)time_freq();
+				if(m_RenderFrameTime < m_RenderFrameTimeLow)
+					m_RenderFrameTimeLow = m_RenderFrameTime;
+				if(m_RenderFrameTime > m_RenderFrameTimeHigh)
+					m_RenderFrameTimeHigh = m_RenderFrameTime;
+				m_FpsGraph.Add(1.0f/m_RenderFrameTime, 1,1,1);
+
+				m_LastRenderTime = Now;
+
 				if(g_Config.m_DbgStress)
 				{
-					if((m_Frames%10) == 0)
+					if((m_RenderFrames%10) == 0)
 					{
 						Render();
 						m_pGraphics->Swap();
@@ -1879,6 +1887,9 @@ void CClient::Run()
 					Render();
 					m_pGraphics->Swap();
 				}
+				
+
+
 			}
 		}
 
@@ -1900,32 +1911,25 @@ void CClient::Run()
 			g_Config.m_DbgHitch = 0;
 		}
 
+		/*
 		if(ReportTime < time_get())
 		{
 			if(0 && g_Config.m_Debug)
 			{
 				dbg_msg("client/report", "fps=%.02f (%.02f %.02f) netstate=%d",
 					m_Frames/(float)(ReportInterval/time_freq()),
-					1.0f/m_FrameTimeHigh,
-					1.0f/m_FrameTimeLow,
+					1.0f/m_RenderFrameTimeHigh,
+					1.0f/m_RenderFrameTimeLow,
 					m_NetClient.State());
 			}
-			m_FrameTimeLow = 1;
-			m_FrameTimeHigh = 0;
-			m_Frames = 0;
+			m_RenderFrameTimeLow = 1;
+			m_RenderFrameTimeHigh = 0;
+			m_RenderFrames = 0;
 			ReportTime += ReportInterval;
-		}
-
-		// update frametime
-		m_FrameTime = (time_get()-FrameStartTime)/(float)time_freq();
-		if(m_FrameTime < m_FrameTimeLow)
-			m_FrameTimeLow = m_FrameTime;
-		if(m_FrameTime > m_FrameTimeHigh)
-			m_FrameTimeHigh = m_FrameTime;
+		}*/
 
+		// update local time
 		m_LocalTime = (time_get()-m_LocalStartTime)/(float)time_freq();
-
-		m_FpsGraph.Add(1.0f/m_FrameTime, 1,1,1);
 	}
 
 	GameClient()->OnShutdown();
diff --git a/src/engine/client/client.h b/src/engine/client/client.h
index 83553eb4..1849830c 100644
--- a/src/engine/client/client.h
+++ b/src/engine/client/client.h
@@ -84,9 +84,12 @@ class CClient : public IClient, public CDemoPlayer::IListner
 	int64 m_LocalStartTime;
 
 	int m_DebugFont;
-	float m_FrameTimeLow;
-	float m_FrameTimeHigh;
-	int m_Frames;
+	
+	int64 m_LastRenderTime;
+	float m_RenderFrameTimeLow;
+	float m_RenderFrameTimeHigh;
+	int m_RenderFrames;
+
 	NETADDR m_ServerAddress;
 	int m_WindowMustRefocus;
 	int m_SnapCrcErrors;
diff --git a/src/engine/client/graphics_threaded.cpp b/src/engine/client/graphics_threaded.cpp
index febb3b28..694ecc71 100644
--- a/src/engine/client/graphics_threaded.cpp
+++ b/src/engine/client/graphics_threaded.cpp
@@ -230,130 +230,6 @@ class CCommandProcessorFragment_SDL
 	// SDL stuff
 	SDL_Surface *m_pScreenSurface;
 	bool m_SystemInited;
-	/*
-	int TryInit()
-	{
-		const SDL_VideoInfo *pInfo = SDL_GetVideoInfo();
-		SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
-
-		// set flags
-		int Flags = SDL_OPENGL;
-		if(g_Config.m_DbgResizable)
-			Flags |= SDL_RESIZABLE;
-
-		if(pInfo->hw_available) // ignore_convention
-			Flags |= SDL_HWSURFACE;
-		else
-			Flags |= SDL_SWSURFACE;
-
-		if(pInfo->blit_hw) // ignore_convention
-			Flags |= SDL_HWACCEL;
-
-		if(g_Config.m_GfxFullscreen)
-			Flags |= SDL_FULLSCREEN;
-
-		// set gl attributes
-		if(g_Config.m_GfxFsaaSamples)
-		{
-			SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
-			SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, g_Config.m_GfxFsaaSamples);
-		}
-		else
-		{
-			SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
-			SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
-		}
-
-		SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
-		SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, g_Config.m_GfxVsync);
-
-		// set caption
-		SDL_WM_SetCaption("Teeworlds", "Teeworlds");
-
-		// create window
-		m_pScreenSurface = SDL_SetVideoMode(g_Config.m_GfxScreenWidth, g_Config.m_GfxScreenHeight, 0, Flags);
-		if(m_pScreenSurface == NULL)
-		{
-			dbg_msg("gfx", "unable to set video mode: %s", SDL_GetError());
-			return -1;
-		}
-
-		return 0;
-	}
-
-
-	int InitWindow()
-	{
-		if(TryInit() == 0)
-			return 0;
-
-		// try disabling fsaa
-		while(g_Config.m_GfxFsaaSamples)
-		{
-			g_Config.m_GfxFsaaSamples--;
-
-			if(g_Config.m_GfxFsaaSamples)
-				dbg_msg("gfx", "lowering FSAA to %d and trying again", g_Config.m_GfxFsaaSamples);
-			else
-				dbg_msg("gfx", "disabling FSAA and trying again");
-
-			if(TryInit() == 0)
-				return 0;
-		}
-
-		// try lowering the resolution
-		if(g_Config.m_GfxScreenWidth != 640 || g_Config.m_GfxScreenHeight != 480)
-		{
-			dbg_msg("gfx", "setting resolution to 640x480 and trying again");
-			g_Config.m_GfxScreenWidth = 640;
-			g_Config.m_GfxScreenHeight = 480;
-
-			if(TryInit() == 0)
-				return 0;
-		}
-
-		dbg_msg("gfx", "out of ideas. failed to init graphics");
-
-		return -1;
-	}
-
-	int Init()
-	{
-		{
-			int Systems = SDL_INIT_VIDEO;
-
-			if(g_Config.m_SndEnable)
-				Systems |= SDL_INIT_AUDIO;
-
-			if(g_Config.m_ClEventthread)
-				Systems |= SDL_INIT_EVENTTHREAD;
-
-			if(SDL_Init(Systems) < 0)
-			{
-				dbg_msg("gfx", "unable to init SDL: %s", SDL_GetError());
-				return -1;
-			}
-		}
-
-
-		if(InitWindow() != 0)
-			return -1;
-
-		SDL_ShowCursor(0);
-
-		// set some default settings
-		glEnable(GL_BLEND);
-		glDisable(GL_CULL_FACE);
-		glDisable(GL_DEPTH_TEST);
-		glMatrixMode(GL_MODELVIEW);
-		glLoadIdentity();
-
-		glAlphaFunc(GL_GREATER, 0);
-		glEnable(GL_ALPHA_TEST);
-		glDepthMask(0);
-
-		return 0;
-	}*/
 
 	void Cmd_Init(const CCommandBuffer::SCommand_Init *pCommand)
 	{
@@ -445,14 +321,11 @@ class CCommandProcessorFragment_SDL
 			dbg_msg("gfx", "unable to set video mode: %s", SDL_GetError());
 			*pCommand->m_pResult = -1;
 		}
-
-				
-		//*pCommand->m_pResult = Init();
 	}
 
 	void Cmd_Shutdown(const CCommandBuffer::SCommand_Shutdown *pCommand)
 	{
-
+		SDL_Quit();
 	}
 
 	void Cmd_Swap(const CCommandBuffer::SCommand_Swap *pCommand)
@@ -1312,7 +1185,8 @@ bool CGraphics_Threaded::Init()
 void CGraphics_Threaded::Shutdown()
 {
 	// TODO: SDL, is this correct?
-	SDL_Quit();
+
+	//
 }
 
 void CGraphics_Threaded::Minimize()
diff --git a/src/engine/client/graphics_threaded.h b/src/engine/client/graphics_threaded.h
index 54455d6d..1ea84ea9 100644
--- a/src/engine/client/graphics_threaded.h
+++ b/src/engine/client/graphics_threaded.h
@@ -78,6 +78,9 @@ public:
 
 		// swap
 		CMD_SWAP,
+
+		//
+		CMD_SCREENSHOT,
 	};
 
 	enum
@@ -192,6 +195,13 @@ public:
 		SVertex *m_pVertices;
 	};
 
+	struct SCommand_Screenshot : public SCommand
+	{
+		SCommand_Screenshot() : SCommand(CMD_SCREENSHOT) {}
+
+		CImageInfo *m_pImage; // processor will fill this out
+	};
+
 	struct SCommand_Swap : public SCommand
 	{
 		SCommand_Swap() : SCommand(CMD_SWAP) {}