void Scene_item_with_display_list::draw(int i) const
{
  if(!display_list_built[i])
  {
    if(display_list[i] == 0) {
      display_list[i] = ::glGenLists(1);
      if(display_list[i] == 0)
      {
        std::cerr << "Unable to create display list" << std::endl;
        return;
      }
    }
    // draw the item in a display list
    ::glNewList(display_list[i],GL_COMPILE_AND_EXECUTE);
    if(i == 0) {
      direct_draw();
    }
    else {
      direct_draw_edges();
    }
    ::glEndList();
    display_list_built[i] = true;
  }
  else {
    // draw using the display list
    ::glCallList(display_list[i]);
  }
}
void Scene_polyhedron_transform_item::draw() const{
  glPushMatrix();
  glMultMatrixd(frame->matrix());
  direct_draw_edges();
  //Scene_item_with_display_list::draw();
  glPopMatrix();  
}