/**
     * Return the meta information associated with an image defined by _path. If the meta data has
     * yet to be generated, create it and store the meta data in imageMetas. This hashmap is
     * persistant across the runtime of the renderer. If the meta data changes from one call to the
     * next, the meta data stored is NOT updated. FileStream would need to be updated to support
     * file modification timestamps.
     */
    public MalletTexture.Meta getMeta(final String _path) {
      synchronized (imageMetas) {
        MalletTexture.Meta meta = imageMetas.get(_path);
        if (meta != null) {
          return meta;
        }

        final FileStream file = GlobalFileSystem.getFile(_path);
        if (file.exists() == false) {
          Logger.println("No Texture found to create Meta: " + _path, Logger.Verbosity.NORMAL);
          return new MalletTexture.Meta(_path, 0, 0);
        }

        return addMeta(_path, createMeta(_path, file));
      }
    }
    public void run() {
      final FileStream file = GlobalFileSystem.getFile(texturePath);
      if (file.exists() == false) {
        Logger.println("Failed to create Texture: " + texturePath, Logger.Verbosity.NORMAL);
        return;
      }

      try {
        final DesktopByteIn in = (DesktopByteIn) file.getByteInStream();
        final InputStream stream = in.getInputStream();
        final BufferedImage image = ImageIO.read(stream);
        in.close();

        synchronized (toBind) {
          // We don't want to bind the BufferedImage now
          // as that will take control of the OpenGL context.
          toBind.add(new Tuple<String, BufferedImage>(texturePath, image));
        }
      } catch (IOException ex) {
        ex.printStackTrace();
      }
    }
 private MalletTexture.Meta createMeta(final String _path, final FileStream _file) {
   final DesktopByteIn desktopIn = (DesktopByteIn) _file.getByteInStream();
   return createMeta(_path, desktopIn.getInputStream());
 }