77 lines
1.5 KiB
C++
77 lines
1.5 KiB
C++
|
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
||
|
// This file is part of the "Irrlicht Engine".
|
||
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
||
|
|
||
|
#include "CFPSCounter.h"
|
||
|
#include "irrMath.h"
|
||
|
|
||
|
namespace irr
|
||
|
{
|
||
|
namespace video
|
||
|
{
|
||
|
|
||
|
|
||
|
CFPSCounter::CFPSCounter()
|
||
|
: FPS(60), Primitive(0), StartTime(0), FramesCounted(0),
|
||
|
PrimitivesCounted(0), PrimitiveAverage(0), PrimitiveTotal(0)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
//! returns current fps
|
||
|
s32 CFPSCounter::getFPS() const
|
||
|
{
|
||
|
return FPS;
|
||
|
}
|
||
|
|
||
|
|
||
|
//! returns current primitive count
|
||
|
u32 CFPSCounter::getPrimitive() const
|
||
|
{
|
||
|
return Primitive;
|
||
|
}
|
||
|
|
||
|
|
||
|
//! returns average primitive count of last period
|
||
|
u32 CFPSCounter::getPrimitiveAverage() const
|
||
|
{
|
||
|
return PrimitiveAverage;
|
||
|
}
|
||
|
|
||
|
|
||
|
//! returns accumulated primitive count since start
|
||
|
u32 CFPSCounter::getPrimitiveTotal() const
|
||
|
{
|
||
|
return PrimitiveTotal;
|
||
|
}
|
||
|
|
||
|
|
||
|
//! to be called every frame
|
||
|
void CFPSCounter::registerFrame(u32 now, u32 primitivesDrawn)
|
||
|
{
|
||
|
++FramesCounted;
|
||
|
PrimitiveTotal += primitivesDrawn;
|
||
|
PrimitivesCounted += primitivesDrawn;
|
||
|
Primitive = primitivesDrawn;
|
||
|
|
||
|
const u32 milliseconds = now - StartTime;
|
||
|
|
||
|
if (milliseconds >= 1500 )
|
||
|
{
|
||
|
const f32 invMilli = core::reciprocal ( (f32) milliseconds );
|
||
|
|
||
|
FPS = core::ceil32 ( ( 1000 * FramesCounted ) * invMilli );
|
||
|
PrimitiveAverage = core::ceil32 ( ( 1000 * PrimitivesCounted ) * invMilli );
|
||
|
|
||
|
FramesCounted = 0;
|
||
|
PrimitivesCounted = 0;
|
||
|
StartTime = now;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
} // end namespace video
|
||
|
} // end namespace irr
|
||
|
|