@Override public void draw(final Graphics2D g, final BufferedImage image) { background.draw(g); g.translate(-getMapViewport().getX(), -getMapViewport().getY()); final long mapBefore = System.nanoTime(); getMapViewport().draw(g, getMap(), getMapViewport().getRect2D()); final long mapAfter = System.nanoTime() - mapBefore; final long entityBefore = System.nanoTime(); synchronized (entities) { for (final AbstractEntity e : getAllEntities()) { e.draw(g); } } final long entityAfter = System.nanoTime() - entityBefore; background1.draw(g); g.translate(getMapViewport().getX(), getMapViewport().getY()); final long lightmapBefore = System.nanoTime(); // lightMap.addDynamicLight(player.light); lightMap.draw(g, getMapViewport().getRect2D()); final long lightmapAfter = System.nanoTime() - lightmapBefore; final long glowBefore = System.nanoTime(); GraphicsUtils.glowFilter(image, 1f); final long glowAfter = System.nanoTime() - glowBefore; if (Debug.ON) { g.setColor(Color.GREEN); g.drawString("Entity Count: " + getAllEntities().size(), 10, 30); g.drawString("Map: " + mapAfter / 1000000, 100, 30); g.drawString("Entities: " + entityAfter / 1000000, 100, 50); g.drawString("Lightmap: " + lightmapAfter / 1000000, 100, 70); g.drawString("Glow: " + glowAfter / 1000000, 100, 90); } }