Added a ResetStatsState so that the stats are always

reset even if the developer has overridden simpleUpdate().
As long Application's stateManager is run, the stats will
get reset no matter how many views there are or if they
are disabled or not.


git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9213 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
PSp..om 13 years ago
parent 54471475fe
commit dde5d0a510
  1. 4
      engine/src/core/com/jme3/app/Application.java
  2. 60
      engine/src/core/com/jme3/app/ResetStatsState.java
  3. 7
      engine/src/core/com/jme3/app/SimpleApplication.java
  4. 2
      engine/src/core/com/jme3/app/StatsView.java

@ -290,6 +290,10 @@ public class Application implements SystemListener {
private void initStateManager(){
stateManager = new AppStateManager(this);
// Always register a ResetStatsState to make sure
// that the stats are cleared every frame
stateManager.attach(new ResetStatsState());
}
/**

@ -0,0 +1,60 @@
/*
* Copyright (c) 2009-2012 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.app;
import com.jme3.app.state.AbstractAppState;
import com.jme3.renderer.RenderManager;
/**
* Resets (clearFrame()) the render's stats object every frame
* during AppState.render(). This state is registered once
* with Application to ensure that the stats are cleared once
* a frame. Using this makes sure that any Appliction based
* application that properly runs its state manager will have
* stats reset no matter how many views it has or if it even
* has views.
*
* @author Paul Speed
*/
public class ResetStatsState extends AbstractAppState {
public ResetStatsState() {
}
@Override
public void render(RenderManager rm) {
super.render(rm);
rm.getRenderer().getStatistics().clearFrame();
}
}

@ -241,13 +241,6 @@ public abstract class SimpleApplication extends Application {
rootNode.updateGeometricState();
guiNode.updateGeometricState();
// Moving this here to make sure it is always done.
// Now the sets are cleared every frame (guaranteed)
// and more than one viewer can access the data. This
// used to be cleared by StatsView but then only StatsView
// could get accurate counts.
renderer.getStatistics().clearFrame();
// render states
stateManager.render(renderManager);
renderManager.render(tpf, context.isRenderable());

@ -105,7 +105,7 @@ public class StatsView extends Node implements Control {
labels[i].setText(stringBuilder);
}
// Moved to SimpleApplication to make sure it is
// Moved to ResetStatsState to make sure it is
// done even if there is no StatsView or the StatsView
// is disable.
//statistics.clearFrame();

Loading…
Cancel
Save