567567567567
Y dependiendo del API que uses para graficar puedes usar bitmap fonts.
Creas los fonts con un generador tal como:
http://www.angelcode.com/products/bmfont/
Y luego los cargas y los dibujas en 2d uno al lado de otro,
O directamente como en OpenGL
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13
O D3DX 9
http://www.drunkenhyena.com/cgi-bin/view_cpp_article.pl?chapter=3;article=17
Sino otra forma sencilla es cambiar el titulo de la ventana una vez por segundo (excepto que esto no sirve en ventana completa).
Saludos
Cita de: "Pogacha"Sino otra forma sencilla es cambiar el titulo de la ventana una vez por segundo (excepto que esto no sirve en ventana completa).
Y que esto bajaria notablemente el rendimiento del programa dando un valor impreciso de fps reales.
Salu2...
Eso es nuevo para mi.
Por que bajaria el rendimiento el cambiar el titulo de la ventana?
Se ve que el modificar aspectos o propiedades de elementos del GDI como son las ventanas y controles de Windows mientras ejecutas operaciones graficas con otro contexto como Direct3D interfiere en la ejecucion de uno y otro, a mi a veces me producia pequeñas pausas que a lo mejor a simple vista no las aprecias en la escena que renderizas pero si son notables en el numero de fps, lo que puede despistar.
Yo al menos al principio tambien mostraba los fps en el titulo de la ventana de mis pruebas y notaba un bajon considerable, que no exagerado, de fps. Desde entonces los muestro a traves del propio contexto de DirectX con las funciones de texto.
Salu2...
Gracias!
Entonces olvida poner el FPS en el titulo de la ventana.
Yo tambien hacia las pruebas con el titulo de la ventana ya que es lo mas facil y comodo, pero realmente se nota muchisimo, lo mejor para que no se note tanto es cambiar solo el titulo de la ventana cada segundo y ademas si solo ha variado el contado de fps.
Lo que tampoco te recomiendo es usa los dispositivos de contexto del gdi, ya que por las pruebas que hice hace tiempo es incluso peor que lo del titulo de la ventana.
El codigo para mostrar los fps que suelo usar yo es este (realmente puede ser mas sencillo y mas basico):
// fps.h
// Por David Inclán Blanco
// http://www.davidib.com
// Este codigo esta protegido bajo licencia LGPL
#ifndef _v8_Time_FPS
#define _v8_Time_FPS
#include "../type/object.h"
#include "time.h"
namespace v8
{
namespace Time
{
/// <summary>Clase para calcular los FPS</summary>
class FPS : public v8::Type::Object
{
public:
/// <summary>Inicializar el contador de FPS</summary>
void Start()
{
this->fps = v8::Time::GetCurrent<unsigned int>();
this->maxFPS = this->fpsTemp = this->last = 0;
this->minFPS = 999999;
}
/// <summary>Calcular los FPS actuales</summary>
/// <returns>Numero de FPS actuales</returns>
unsigned int Calculate()
{
unsigned int current = v8::Time::GetCurrent<unsigned int>();
if( current - this->last >= 1000 )
{
this->last = current;
this->fps = this->fpsTemp;
this->fpsTemp = 0;
if( this->fps != 0 )
{
if( this->maxFPS < this->fps )
{
this->maxFPS = this->fps;
}
else
if( this->minFPS > this->fps )
{
this->minFPS = this->fps;
}
}
}
else
{
this->fpsTemp++;
}
return this->fps;
}
/// <summary>Obtener los FPS actuales</summary>
/// <returns>FPS actuales</summary>
unsigned int GetFPS()
{
return this->fps;
}
/// <summary>Obtener los FPS maximos</summary>
/// <returns>FPS maximos</returns>
unsigned int GetMaxFPS()
{
return this->maxFPS;
}
/// <summary>Obtener los FPS minimos</summary>
/// <returns>FPS minimos</returns>
unsigned int GetMinFPS()
{
return this->minFPS;
}
private:
/// <summary>FPS actuales</summary>
unsigned int fps;
/// <summary>FPS maximos</summary>
unsigned int maxFPS;
/// <summary>FPS minimos</summary>
unsigned int minFPS;
/// <summary>FPS temporal para calcular los FPS actuales</summary>
unsigned int fpsTemp;
/// <summary>Ultimos tiempo desde la llamada a CalculateFPS</summary>
unsigned int last;
};
}
}
#endif
// time.h
// Por David Inclán Blanco
// http://www.davidib.com
// Este codigo esta protegido bajo licencia LGPL
#ifndef _v8_Time_Time
#define _v8_Time_Time
#include <time.h>
namespace v8
{
namespace Time
{
/// <summary>Obtener el tiempo actual</summary>
/// <param name="TYPE">Tipo de dato en el que obtener el tiempo actual</param>
/// <remarks>1 segundo son 1000 ticks siempre</remarks>
/// <returns>Valor obtenido mediante la funcion clock()</returns>
template <class TYPE> TYPE GetCurrent()
{
#if CLOCKS_PER_SEC == 1000
return (TYPE)clock();
#else
return (TYPE)(clock() * ((TYPE)1000 / (TYPE)CLOCKS_PER_SEC));
#endif
}
}
}
#endif
Lo mejor es que cojas lo que quieras del codigo y lo uses a tu gusto.
Saludos
Si simplemente quieres ver los frames que da: FRAPS.