topical media & game development
graphic-directx-game-09-ColoredCubeDemo-GfxStats.cpp / cpp
//=============================================================================
// GfxStats.cpp by Frank Luna (C) 2005 All Rights Reserved.
//=============================================================================
include <d3dUtil.h>
include <d3dApp.h>
include <GfxStats.h>
include <tchar.h>
GfxStats::GfxStats()
: mFont(0), mFPS(0.0f), mMilliSecPerFrame(0.0f), mNumTris(0), mNumVertices(0)
{
D3DXFONT_DESC fontDesc;
fontDesc.Height = 18;
fontDesc.Width = 0;
fontDesc.Weight = 0;
fontDesc.MipLevels = 1;
fontDesc.Italic = false;
fontDesc.CharSet = DEFAULT_CHARSET;
fontDesc.OutputPrecision = OUT_DEFAULT_PRECIS;
fontDesc.Quality = DEFAULT_QUALITY;
fontDesc.PitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
_tcscpy(fontDesc.FaceName, _T("Times New Roman"));
HR(D3DXCreateFontIndirect(gd3dDevice, &fontDesc, &mFont));
}
GfxStats::~GfxStats()
{
ReleaseCOM(mFont);
}
void GfxStats::onLostDevice()
{
HR(mFont->OnLostDevice());
}
void GfxStats::onResetDevice()
{
HR(mFont->OnResetDevice());
}
void GfxStats::addVertices(DWORD n)
{
mNumVertices += n;
}
void GfxStats::subVertices(DWORD n)
{
mNumVertices -= n;
}
void GfxStats::addTriangles(DWORD n)
{
mNumTris += n;
}
void GfxStats::subTriangles(DWORD n)
{
mNumTris -= n;
}
void GfxStats::setTriCount(DWORD n)
{
mNumTris = n;
}
void GfxStats::setVertexCount(DWORD n)
{
mNumVertices = n;
}
void GfxStats::update(float dt)
{
// Make static so that their values persist accross function calls.
static float numFrames = 0.0f;
static float timeElapsed = 0.0f;
// Increment the frame count.
numFrames += 1.0f;
// Accumulate how much time has passed.
timeElapsed += dt;
// Has one second passed?--we compute the frame statistics once
// per second. Note that the time between frames can vary so
// these stats are averages over a second.
if( timeElapsed >= 1.0f )
{
// Frames Per Second = numFrames / timeElapsed,
// but timeElapsed approx. equals 1.0, so
// frames per second = numFrames.
mFPS = numFrames;
// Average time, in miliseconds, it took to render a single frame.
mMilliSecPerFrame = 1000.0f / mFPS;
// Reset time counter and frame count to prepare for computing
// the average stats over the next second.
timeElapsed = 0.0f;
numFrames = 0.0f;
}
}
void GfxStats::display()
{
// Make static so memory is not allocated every frame.
static char buffer[256];
sprintf(buffer, "Frames Per Second = %.2f\n"
"Milliseconds Per Frame = %.4f\n"
"Triangle Count = \%d\n"
"Vertex Count = \%d", mFPS, mMilliSecPerFrame, mNumTris, mNumVertices);
RECT R = {5, 5, 0, 0};
HR(mFont->DrawText(0, buffer, -1, &R, DT_NOCLIP, D3DCOLOR_XRGB(0,0,0)));
}
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.