@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);
    }
  }