mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-19 14:38:18 +00:00
fixed the render frame time and cleaned up some more code
This commit is contained in:
parent
8b76105cfa
commit
c1942ca6cb
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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) {}
|
||||
|
|
|
@ -248,7 +248,7 @@ void CHud::RenderFps()
|
|||
if(g_Config.m_ClShowfps)
|
||||
{
|
||||
// calculate avg. fps
|
||||
float FPS = 1.0f / Client()->FrameTime();
|
||||
float FPS = 1.0f / Client()->RenderFrameTime();
|
||||
m_AverageFPS = (m_AverageFPS*(1.0f-(1.0f/m_AverageFPS))) + (FPS*(1.0f/m_AverageFPS));
|
||||
char Buf[512];
|
||||
str_format(Buf, sizeof(Buf), "%d", (int)m_AverageFPS);
|
||||
|
|
|
@ -22,7 +22,6 @@ void CItems::OnReset()
|
|||
|
||||
void CItems::RenderProjectile(const CNetObj_Projectile *pCurrent, int ItemID)
|
||||
{
|
||||
|
||||
// get positions
|
||||
float Curvature = 0;
|
||||
float Speed = 0;
|
||||
|
@ -64,7 +63,6 @@ void CItems::RenderProjectile(const CNetObj_Projectile *pCurrent, int ItemID)
|
|||
if(pCurrent->m_Type == WEAPON_GRENADE)
|
||||
{
|
||||
m_pClient->m_pEffects->SmokeTrail(Pos, Vel*-1);
|
||||
m_pClient->m_pFlow->Add(Pos, Vel*1000*Client()->FrameTime(), 10.0f);
|
||||
|
||||
if(Client()->State() == IClient::STATE_DEMOPLAYBACK)
|
||||
{
|
||||
|
@ -85,7 +83,6 @@ void CItems::RenderProjectile(const CNetObj_Projectile *pCurrent, int ItemID)
|
|||
else
|
||||
{
|
||||
m_pClient->m_pEffects->BulletTrail(Pos);
|
||||
m_pClient->m_pFlow->Add(Pos, Vel*1000*Client()->FrameTime(), 10.0f);
|
||||
|
||||
if(length(Vel) > 0.00001f)
|
||||
Graphics()->QuadsSetRotation(GetAngle(Vel));
|
||||
|
|
Loading…
Reference in a new issue