package jme3test.stress; import com.jme3.app.BasicProfilerState; import com.jme3.app.SimpleApplication; import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; import com.jme3.profile.*; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; import com.jme3.texture.Texture; import java.util.logging.Level; import java.util.logging.Logger; public class TestShaderNodesStress extends SimpleApplication { public static void main(String[] args) { TestShaderNodesStress app = new TestShaderNodesStress(); app.start(); } @Override public void simpleInitApp() { Quad q = new Quad(1, 1); Geometry g = new Geometry("quad", q); g.setLocalTranslation(-500, -500, 0); g.setLocalScale(1000); rootNode.attachChild(g); cam.setLocation(new Vector3f(0.0f, 0.0f, 0.40647888f)); cam.setRotation(new Quaternion(0.0f, 1.0f, 0.0f, 0.0f)); Texture tex = assetManager.loadTexture("Interface/Logo/Monkey.jpg"); Material mat = new Material(assetManager, "Common/MatDefs/Misc/UnshadedNodes.j3md"); //Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.setColor("Color", ColorRGBA.Yellow); mat.setTexture("ColorMap", tex); g.setMaterial(mat); //place the geoms in the transparent bucket so that they are rendered back to front for maximum overdraw g.setQueueBucket(RenderQueue.Bucket.Transparent); for (int i = 0; i < 1000; i++) { Geometry cl = g.clone(false); cl.move(0, 0, -(i + 1)); rootNode.attachChild(cl); } flyCam.setMoveSpeed(20); Logger.getLogger("com.jme3").setLevel(Level.WARNING); this.setAppProfiler(new Profiler()); } private class Profiler implements AppProfiler { private long startTime; private long updateTime; private long renderTime; private long sum; private int nbFrames; @Override public void appStep(AppStep step) { switch (step) { case BeginFrame: startTime = System.nanoTime(); break; case RenderFrame: updateTime = System.nanoTime(); // System.err.println("Update time : " + (updateTime - startTime)); break; case EndFrame: nbFrames++; if (nbFrames >= 150) { renderTime = System.nanoTime(); sum += renderTime - updateTime; System.err.println("render time : " + (renderTime - updateTime)); System.err.println("Average render time : " + ((float)sum / (float)(nbFrames-150))); } break; } } @Override public void vpStep(VpStep step, ViewPort vp, RenderQueue.Bucket bucket) { } @Override public void spStep(SpStep step, String... additionalInfo) { } } }