- added a FPS cap (at 800 fps we will sleep for 1 millisecond) to avoid pinning the cpu for hardware that has fps which is too good. Also user can toggle fps view on any screen now

This commit is contained in:
Mark Vejvoda
2011-07-01 02:50:20 +00:00
parent 68e3ad8036
commit ec15c81d12
10 changed files with 94 additions and 39 deletions

View File

@@ -1051,6 +1051,9 @@ void Game::render() {
this->restoreToStartXY(); this->restoreToStartXY();
} }
canRender();
incrementFps();
renderFps++; renderFps++;
totalRenderFps++; totalRenderFps++;
renderWorker(); renderWorker();
@@ -1077,6 +1080,8 @@ void Game::renderWorker() {
// ==================== tick ==================== // ==================== tick ====================
void Game::tick() { void Game::tick() {
ProgramState::tick();
tickCount++; tickCount++;
if(avgUpdateFps == -1) { if(avgUpdateFps == -1) {

View File

@@ -6003,4 +6003,20 @@ void Renderer::cycleShowDebugUILevel() {
} }
} }
void Renderer::renderFPSWhenEnabled(int lastFps) {
if(getShowDebugUI() == true) {
CoreData &coreData= CoreData::getInstance();
if(Renderer::renderText3DEnabled) {
renderText3D(
"FPS: " + intToStr(lastFps),
coreData.getMenuFontNormal3D(), Vec3f(1.f), 10, 10, false);
}
else {
renderText(
"FPS: " + intToStr(lastFps),
coreData.getMenuFontNormal(), Vec3f(1.f), 10, 10, false);
}
}
}
}}//end namespace }}//end namespace

View File

@@ -376,6 +376,8 @@ public:
void beginRenderToTexture(Texture2D **renderToTexture); void beginRenderToTexture(Texture2D **renderToTexture);
void endRenderToTexture(Texture2D **renderToTexture); void endRenderToTexture(Texture2D **renderToTexture);
void renderFPSWhenEnabled(int lastFps);
//components //components
void renderLabel(GraphicLabel *label); void renderLabel(GraphicLabel *label);
void renderLabel(GraphicLabel *label,const Vec3f *color); void renderLabel(GraphicLabel *label,const Vec3f *color);

View File

@@ -80,24 +80,29 @@ void BattleEnd::update() {
void BattleEnd::render() { void BattleEnd::render() {
Renderer &renderer= Renderer::getInstance(); Renderer &renderer= Renderer::getInstance();
CoreData &coreData= CoreData::getInstance();
canRender();
incrementFps();
if(renderToTexture != NULL) { if(renderToTexture != NULL) {
//printf("Rendering from texture!\n"); //printf("Rendering from texture!\n");
renderer.clearBuffers(); renderer.clearBuffers();
renderer.reset2d(); renderer.reset3dMenu();
renderer.clearZBuffer();
renderer.renderBackground(renderToTexture); renderer.renderBackground(renderToTexture);
renderer.reset2d();
renderer.renderButton(&buttonExit); renderer.renderButton(&buttonExit);
//exit message box //exit message box
if(mainMessageBox.getEnabled()){ if(mainMessageBox.getEnabled() && mainMessageBox.getVisible()) {
renderer.renderMessageBox(&mainMessageBox); renderer.renderMessageBox(&mainMessageBox);
} }
renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim);
renderer.swapBuffers();
} }
else { else {
//printf("Rendering to texture!\n"); //printf("Rendering to texture!\n");
@@ -118,6 +123,8 @@ void BattleEnd::render() {
Lang &lang= Lang::getInstance(); Lang &lang= Lang::getInstance();
renderer.clearBuffers(); renderer.clearBuffers();
renderer.reset3dMenu();
renderer.clearZBuffer();
renderer.reset2d(); renderer.reset2d();
renderer.renderBackground(CoreData::getInstance().getBackgroundTexture()); renderer.renderBackground(CoreData::getInstance().getBackgroundTexture());
@@ -388,9 +395,11 @@ void BattleEnd::render() {
} }
renderer.endRenderToTexture(&renderToTexture); renderer.endRenderToTexture(&renderToTexture);
renderer.swapBuffers();
} }
renderer.renderFPSWhenEnabled(lastFps);
renderer.swapBuffers();
} }
void BattleEnd::keyDown(char key){ void BattleEnd::keyDown(char key){

View File

@@ -45,6 +45,7 @@ public:
virtual void keyDown(char key); virtual void keyDown(char key);
virtual void mouseDownLeft(int x, int y); virtual void mouseDownLeft(int x, int y);
virtual void mouseMove(int x, int y, const MouseState *ms); virtual void mouseMove(int x, int y, const MouseState *ms);
//virtual void tick();
}; };
}}//end namespace }}//end namespace

View File

@@ -106,7 +106,10 @@ void Intro::update(){
void Intro::render() { void Intro::render() {
Renderer &renderer= Renderer::getInstance(); Renderer &renderer= Renderer::getInstance();
int difTime; int difTime=0;
canRender();
incrementFps();
renderer.reset2d(); renderer.reset2d();
renderer.clearBuffers(); renderer.clearBuffers();
@@ -152,6 +155,8 @@ void Intro::render() {
if(this->forceMouseRender == true) renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f); if(this->forceMouseRender == true) renderer.renderMouse2d(mouseX, mouseY, mouse2d, 0.f);
renderer.renderFPSWhenEnabled(lastFps);
renderer.swapBuffers(); renderer.swapBuffers();
} }

View File

@@ -47,8 +47,41 @@ const int SOUND_THREAD_UPDATE_MILLISECONDS = 25;
// class Program::CrashProgramState // class Program::CrashProgramState
// ===================================================== // =====================================================
ProgramState::ProgramState(Program *program) {
this->program= program;
this->forceMouseRender = false;
this->mouseX = 0;
this->mouseY = 0;
this->mouse2dAnim = 0;
this->fps= 0;
this->lastFps= 0;
}
void ProgramState::incrementFps() {
fps++;
}
void ProgramState::tick() {
lastFps= fps;
fps= 0;
}
bool ProgramState::canRender(bool sleepIfCannotRender) {
if(lastFps > 800) {
if(sleepIfCannotRender == true) {
sleep(1);
}
return false;
}
return true;
}
void ProgramState::render() { void ProgramState::render() {
Renderer &renderer= Renderer::getInstance(); Renderer &renderer= Renderer::getInstance();
canRender();
incrementFps();
renderer.clearBuffers(); renderer.clearBuffers();
renderer.reset2d(); renderer.reset2d();
renderer.renderMessageBox(program->getMsgBox()); renderer.renderMessageBox(program->getMsgBox());

View File

@@ -55,22 +55,22 @@ protected:
int startY; int startY;
bool forceMouseRender; bool forceMouseRender;
public: int fps;
ProgramState(Program *program) { int lastFps;
this->program= program;
this->forceMouseRender = false;
this->mouseX = 0;
this->mouseY = 0;
this->mouse2dAnim = 0;
} public:
ProgramState(Program *program);
virtual ~ProgramState(){}; virtual ~ProgramState(){};
int getFps() const { return fps; }
int getLastFps() const { return lastFps; }
//virtual void render()=0; //virtual void render()=0;
virtual bool canRender(bool sleepIfCannotRender=true);
virtual void render(); virtual void render();
virtual void update(); virtual void update();
virtual void updateCamera(){}; virtual void updateCamera(){};
virtual void tick(){}; virtual void tick();
virtual void init(){}; virtual void init(){};
virtual void load(){}; virtual void load(){};
virtual void end(){}; virtual void end(){};
@@ -96,6 +96,9 @@ public:
virtual Program * getProgram() { return program; } virtual Program * getProgram() { return program; }
virtual void setForceMouseRender(bool value) { forceMouseRender=value;} virtual void setForceMouseRender(bool value) { forceMouseRender=value;}
virtual void consoleAddLine(string line) { }; virtual void consoleAddLine(string line) { };
protected:
virtual void incrementFps();
}; };
// =============================== // ===============================

View File

@@ -55,9 +55,6 @@ MainMenu::MainMenu(Program *program):
state= NULL; state= NULL;
this->program= program; this->program= program;
fps= 0;
lastFps= 0;
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__); if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s %d]\n",__FILE__,__FUNCTION__,__LINE__);
setState(new MenuStateRoot(program, this)); setState(new MenuStateRoot(program, this));
@@ -93,7 +90,9 @@ void MainMenu::render() {
Renderer &renderer= Renderer::getInstance(); Renderer &renderer= Renderer::getInstance();
CoreData &coreData= CoreData::getInstance(); CoreData &coreData= CoreData::getInstance();
fps++; //fps++;
canRender();
incrementFps();
renderer.clearBuffers(); renderer.clearBuffers();
@@ -110,18 +109,7 @@ void MainMenu::render() {
state->render(); state->render();
renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim); renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim);
if(renderer.getShowDebugUI() == true) { renderer.renderFPSWhenEnabled(lastFps);
if(Renderer::renderText3DEnabled) {
renderer.renderText3D(
"FPS: " + intToStr(lastFps),
coreData.getMenuFontNormal3D(), Vec3f(1.f), 10, 10, false);
}
else {
renderer.renderText(
"FPS: " + intToStr(lastFps),
coreData.getMenuFontNormal(), Vec3f(1.f), 10, 10, false);
}
}
renderer.swapBuffers(); renderer.swapBuffers();
} }
@@ -134,11 +122,6 @@ void MainMenu::update(){
state->update(); state->update();
} }
void MainMenu::tick(){
lastFps= fps;
fps= 0;
}
//event magangement: mouse click //event magangement: mouse click
void MainMenu::mouseMove(int x, int y, const MouseState *ms){ void MainMenu::mouseMove(int x, int y, const MouseState *ms){
mouseX= x; mouseY= y; mouseX= x; mouseY= y;

View File

@@ -85,7 +85,6 @@ private:
//shared //shared
int mouseX, mouseY; int mouseX, mouseY;
int mouse2dAnim; int mouse2dAnim;
int fps, lastFps;
public: public:
MainMenu(Program *program); MainMenu(Program *program);
@@ -96,7 +95,6 @@ public:
virtual void render(); virtual void render();
virtual void update(); virtual void update();
virtual void tick();
virtual void init(); virtual void init();
virtual void mouseMove(int x, int y, const MouseState *mouseState); virtual void mouseMove(int x, int y, const MouseState *mouseState);
virtual void mouseDownLeft(int x, int y); virtual void mouseDownLeft(int x, int y);