void VisualDebugger::draw()
{
 
 ArrayIterator<Scene*> iterator = mWorld->getScenes();
 mMeshData->mLines.clear();
 mMeshData->mColours.clear();
 mMeshData->mNbLines = 0;

 for (Scene* scene = iterator.begin(); scene = iterator.next();)
 {
  const NxDebugRenderable* renderable = scene->getScene()->getDebugRenderable();
  
  if (renderable == 0)
   continue;
  
  unsigned int nbLines = renderable->getNbLines();
  const NxDebugLine* lines = renderable->getLines();
  while(nbLines--)
  {
   mMeshData->mLines.append(lines->p0.x);
   mMeshData->mLines.append(lines->p0.y);
   mMeshData->mLines.append(lines->p0.z);
   mMeshData->mLines.append(lines->p1.x);
   mMeshData->mLines.append(lines->p1.y);
   mMeshData->mLines.append(lines->p1.z);
   mMeshData->mColours.append(lines->color);
   mMeshData->mColours.append(lines->color);
   lines++;
  }
  mMeshData->mNbLines += renderable->getNbLines();
 }

 
 mRenderable->drawVisualDebugger(mMeshData);
}
Archive* ResourceSystem::openArchive(const String& name, const UniformResourceIdentifier& uri)
{
 ResourceProtocol* requestedProtocol = 0;
 ArrayIterator<ResourceProtocol*> iterator = mProtocols.getIterator();
 for (ResourceProtocol* protocol = iterator.begin(); protocol = iterator.next();)
 {
  if (protocol->getProtocolHash() == uri.getProtocolHash())
  {
   requestedProtocol = protocol;
   break;
  }
 }
  
 if (requestedProtocol == 0)
 {
  SharedStringStream ss(200);
  ss << "Could not open archive '" << uri.getLocation() << ":" << uri.getLocation() << "\n"
     << "Reason: Protocol could not be found.";
  NxOgre_ThrowError(ss.get());
  return 0;
 }
  
 Archive* archive = requestedProtocol->openArchive(name, uri);
  
 if (archive == 0)
 {
  SharedStringStream ss(200);
  ss << "Could not open archive '" << uri.getLocation() << ":" << uri.getLocation() << "\n"
     << "Reason: Protocol could not open archive.";
  NxOgre_ThrowError(ss.get());
  return 0;
 }
 
 mArchives.insert(archive);
 return archive;
}