- 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();
}
canRender();
incrementFps();
renderFps++;
totalRenderFps++;
renderWorker();
@ -1077,6 +1080,8 @@ void Game::renderWorker() {
// ==================== tick ====================
void Game::tick() {
ProgramState::tick();
tickCount++;
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

View File

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

View File

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

View File

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

View File

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

View File

@ -47,8 +47,41 @@ const int SOUND_THREAD_UPDATE_MILLISECONDS = 25;
// 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() {
Renderer &renderer= Renderer::getInstance();
canRender();
incrementFps();
renderer.clearBuffers();
renderer.reset2d();
renderer.renderMessageBox(program->getMsgBox());

View File

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

View File

@ -55,9 +55,6 @@ MainMenu::MainMenu(Program *program):
state= NULL;
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__);
setState(new MenuStateRoot(program, this));
@ -93,7 +90,9 @@ void MainMenu::render() {
Renderer &renderer= Renderer::getInstance();
CoreData &coreData= CoreData::getInstance();
fps++;
//fps++;
canRender();
incrementFps();
renderer.clearBuffers();
@ -110,18 +109,7 @@ void MainMenu::render() {
state->render();
renderer.renderMouse2d(mouseX, mouseY, mouse2dAnim);
if(renderer.getShowDebugUI() == true) {
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.renderFPSWhenEnabled(lastFps);
renderer.swapBuffers();
}
@ -134,11 +122,6 @@ void MainMenu::update(){
state->update();
}
void MainMenu::tick(){
lastFps= fps;
fps= 0;
}
//event magangement: mouse click
void MainMenu::mouseMove(int x, int y, const MouseState *ms){
mouseX= x; mouseY= y;

View File

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