public void compileVisible(
    final Viewport port, final Base base,
    final Batch <Section> visibleSections,
    final List <World.Visible> visibleFixtures
  ) {
    final Box3D tempBounds = new Box3D() ;
    final Descent compile = new Descent() {
      
      public boolean descendTo(Section s) {
        return port.intersects(s.bounds) ;
      }
      
      public void afterChildren(Section s) {
        if (s.depth > 0) return ;
        visibleSections.add(s) ;
        if (visibleFixtures != null) {
          for (Element e : world.fixturesFrom(s.area)) {
            if (e.sprite() == null) continue ;
            if (! port.intersects(boundsFrom(e, tempBounds))) continue ;
            if (e.visibleTo(base)) visibleFixtures.add(e) ;
          }
        }
      }
    } ;
    this.applyDescent(compile) ;
  }