public override void LoadTextures(IEnumerable <TextureItem> items) { var list = items.ToList(); var packages = list.Select(x => x.Package).Distinct().ToList(); var packs = packages.Select(x => { if (!_roots.ContainsKey(x)) { var wp = new WadStream(new WadPackage(new FileInfo(x.PackageRoot))); _roots.Add(x, wp); } return(_roots[x]); }).ToList(); var streams = packs.Select(x => x.StreamSource).ToList(); // Process the bitmaps in parallel var bitmaps = list.AsParallel().Select(ti => { var stream = streams.FirstOrDefault(x => x.HasFile(ti.Name.ToLowerInvariant())); if (stream == null) { return(null); } var open = stream.OpenFile(ti.Name.ToLowerInvariant()); if (open == null) { return(null); } var bmp = new Bitmap(open); bool hasTransparency; bmp = PostProcessBitmap(ti.Package.PackageRelativePath, ti.Name.ToLowerInvariant(), bmp, out hasTransparency); open.Dispose(); return(new { Bitmap = bmp, Name = ti.Name.ToLowerInvariant(), ti.Width, ti.Height, ti.Flags }); }).Where(x => x != null); // TextureHelper.Create must run on the UI thread foreach (var bmp in bitmaps) { TextureHelper.Create(bmp.Name, bmp.Bitmap, bmp.Width, bmp.Height, bmp.Flags); bmp.Bitmap.Dispose(); } }
public override ITextureStreamSource GetStreamSource(int maxWidth, int maxHeight, IEnumerable <TexturePackage> packages) { var packs = packages.Select(x => { if (!_roots.ContainsKey(x)) { var wp = new WadStream(new WadPackage(new FileInfo(x.PackageRoot))); _roots.Add(x, wp); } return(_roots[x]); }).ToList(); var streams = packs.Select(x => x.StreamSource).ToList(); return(new WadStreamSource(streams)); }
public override ITextureStreamSource GetStreamSource(int maxWidth, int maxHeight, IEnumerable<TexturePackage> packages) { var packs = packages.Select(x => { if (!_roots.ContainsKey(x)) { var wp = new WadStream(new WadPackage(new FileInfo(x.PackageRoot))); _roots.Add(x, wp); } return _roots[x]; }).ToList(); var streams = packs.Select(x => x.StreamSource).ToList(); return new WadStreamSource(streams); }
public override void LoadTextures(IEnumerable<TextureItem> items) { var list = items.ToList(); var packages = list.Select(x => x.Package).Distinct().ToList(); var packs = packages.Select(x => { if (!_roots.ContainsKey(x)) { var wp = new WadStream(new WadPackage(new FileInfo(x.PackageRoot))); _roots.Add(x, wp); } return _roots[x]; }).ToList(); var streams = packs.Select(x => x.StreamSource).ToList(); // Process the bitmaps in parallel var bitmaps = list.AsParallel().Select(ti => { var stream = streams.FirstOrDefault(x => x.HasFile(ti.Name.ToLowerInvariant())); if (stream == null) return null; var open = stream.OpenFile(ti.Name.ToLowerInvariant()); if (open == null) return null; var bmp = new Bitmap(open); bool hasTransparency; bmp = PostProcessBitmap(ti.Package.PackageRelativePath, ti.Name.ToLowerInvariant(), bmp, out hasTransparency); open.Dispose(); return new { Bitmap = bmp, Name = ti.Name.ToLowerInvariant(), ti.Width, ti.Height, ti.Flags }; }).Where(x => x != null); // TextureHelper.Create must run on the UI thread foreach (var bmp in bitmaps) { TextureHelper.Create(bmp.Name, bmp.Bitmap, bmp.Width, bmp.Height, bmp.Flags); bmp.Bitmap.Dispose(); } }
private TexturePackage CreatePackage(string package) { try { var fi = new FileInfo(package); if (!fi.Exists) { return(null); } var tp = new TexturePackage(package, Path.GetFileNameWithoutExtension(package), this); if (LoadFromCache(tp)) { return(tp); } var list = new List <TextureItem>(); var pack = _roots.Values.FirstOrDefault(x => x.Package.PackageFile.FullName == fi.FullName); if (pack == null) { _roots.Add(tp, pack = new WadStream(new WadPackage(fi))); } list.AddRange(pack.Package.GetEntries().OfType <WadEntry>().Select(x => new TextureItem(tp, x.Name, GetFlags(x.Name), (int)x.Width, (int)x.Height))); foreach (var ti in list) { tp.AddTexture(ti); } SaveToCache(tp); return(tp); } catch { return(null); } }
private TexturePackage CreatePackage(string package) { try { var fi = new FileInfo(package); if (!fi.Exists) return null; var tp = new TexturePackage(package, Path.GetFileNameWithoutExtension(package), this); if (LoadFromCache(tp)) return tp; var list = new List<TextureItem>(); var pack = _roots.Values.FirstOrDefault(x => x.Package.PackageFile.FullName == fi.FullName); if (pack == null) _roots.Add(tp, pack = new WadStream(new WadPackage(fi))); list.AddRange(pack.Package.GetEntries().OfType<WadEntry>().Select(x => new TextureItem(tp, x.Name, GetFlags(x.Name), (int) x.Width, (int) x.Height))); foreach (var ti in list) { tp.AddTexture(ti); } SaveToCache(tp); return tp; } catch { return null; } }