mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-01-31 12:50:52 +00:00
Load images when they accessed
Load previews when they are accessed
This commit is contained in:
parent
acfd4f5283
commit
fc7093b959
16 changed files with 71 additions and 208 deletions
|
@ -102,8 +102,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
private object syncobject = new object();
|
private object syncobject = new object();
|
||||||
private Queue<ImageData> imageque;
|
private Queue<ImageData> imageque;
|
||||||
private Thread[] backgroundloader;
|
private Thread[] backgroundloader;
|
||||||
private int threadsfinished;
|
|
||||||
private bool notifiedbusy;
|
|
||||||
|
|
||||||
// Special images
|
// Special images
|
||||||
private ImageData missingtexture3d;
|
private ImageData missingtexture3d;
|
||||||
|
@ -134,10 +132,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
private List<ThingCategory> thingcategories;
|
private List<ThingCategory> thingcategories;
|
||||||
private Dictionary<int, ThingTypeInfo> thingtypes;
|
private Dictionary<int, ThingTypeInfo> thingtypes;
|
||||||
|
|
||||||
// Timing
|
|
||||||
private long loadstarttime;
|
|
||||||
private long loadfinishtime;
|
|
||||||
|
|
||||||
// Disposing
|
// Disposing
|
||||||
private bool isdisposed;
|
private bool isdisposed;
|
||||||
|
|
||||||
|
@ -235,16 +229,12 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
|
|
||||||
// Load special images (mxd: the rest is loaded in LoadInternalTextures())
|
// Load special images (mxd: the rest is loaded in LoadInternalTextures())
|
||||||
whitetexture = new ResourceImage("CodeImp.DoomBuilder.Resources.White.png") { UseColorCorrection = false };
|
whitetexture = new ResourceImage("CodeImp.DoomBuilder.Resources.White.png") { UseColorCorrection = false };
|
||||||
whitetexture.LoadImage();
|
|
||||||
blacktexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Black.png") { UseColorCorrection = false }; //mxd
|
blacktexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Black.png") { UseColorCorrection = false }; //mxd
|
||||||
blacktexture.LoadImage(); //mxd
|
|
||||||
unknownimage = new UnknownImage(Properties.Resources.UnknownImage); //mxd. There should be only one!
|
unknownimage = new UnknownImage(Properties.Resources.UnknownImage); //mxd. There should be only one!
|
||||||
|
|
||||||
//mxd. Textures browser images
|
//mxd. Textures browser images
|
||||||
foldertexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Folder96.png") { UseColorCorrection = false };
|
foldertexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Folder96.png") { UseColorCorrection = false };
|
||||||
foldertexture.LoadImage();
|
|
||||||
folderuptexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Folder96Up.png") { UseColorCorrection = false };
|
folderuptexture = new ResourceImage("CodeImp.DoomBuilder.Resources.Folder96Up.png") { UseColorCorrection = false };
|
||||||
folderuptexture.LoadImage();
|
|
||||||
|
|
||||||
//mxd. Create comment icons
|
//mxd. Create comment icons
|
||||||
commenttextures = new ImageData[]
|
commenttextures = new ImageData[]
|
||||||
|
@ -255,12 +245,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
new ResourceImage("CodeImp.DoomBuilder.Resources.CommentProblem.png") { UseColorCorrection = false },
|
new ResourceImage("CodeImp.DoomBuilder.Resources.CommentProblem.png") { UseColorCorrection = false },
|
||||||
new ResourceImage("CodeImp.DoomBuilder.Resources.CommentSmile.png") { UseColorCorrection = false },
|
new ResourceImage("CodeImp.DoomBuilder.Resources.CommentSmile.png") { UseColorCorrection = false },
|
||||||
};
|
};
|
||||||
|
|
||||||
//mxd. Load comment icons
|
|
||||||
foreach(ImageData data in commenttextures)
|
|
||||||
{
|
|
||||||
data.LoadImage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disposer
|
// Disposer
|
||||||
|
@ -661,12 +645,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
mapinfo = null; //mxd
|
mapinfo = null; //mxd
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd. Called before Clock is reset
|
|
||||||
internal void OnBeforeClockReset()
|
|
||||||
{
|
|
||||||
if(loadstarttime > 0) loadstarttime -= Clock.CurrentTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ================== Suspend / Resume
|
#region ================== Suspend / Resume
|
||||||
|
@ -717,11 +695,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
// This starts background loading
|
// This starts background loading
|
||||||
private void StartBackgroundLoader()
|
private void StartBackgroundLoader()
|
||||||
{
|
{
|
||||||
// Timing
|
|
||||||
loadstarttime = Clock.CurrentTime;
|
|
||||||
loadfinishtime = 0;
|
|
||||||
threadsfinished = 0;
|
|
||||||
|
|
||||||
// If a loader is already running, stop it first
|
// If a loader is already running, stop it first
|
||||||
if(backgroundloader != null) StopBackgroundLoader();
|
if(backgroundloader != null) StopBackgroundLoader();
|
||||||
|
|
||||||
|
@ -756,7 +729,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
}
|
}
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
notifiedbusy = false;
|
|
||||||
backgroundloader = null;
|
backgroundloader = null;
|
||||||
General.MainWindow.UpdateStatus();
|
General.MainWindow.UpdateStatus();
|
||||||
}
|
}
|
||||||
|
@ -770,7 +742,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
// Wait a bit before loading to give the main thread a headstart on acquiring the locks in the resource loader part of the codebase..
|
// Wait a bit before loading to give the main thread a headstart on acquiring the locks in the resource loader part of the codebase..
|
||||||
Thread.Sleep(666);
|
Thread.Sleep(666);
|
||||||
|
|
||||||
do
|
while (true)
|
||||||
{
|
{
|
||||||
// Get next item
|
// Get next item
|
||||||
ImageData image = null;
|
ImageData image = null;
|
||||||
|
@ -778,78 +750,12 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
{
|
{
|
||||||
// Fetch next image to process
|
// Fetch next image to process
|
||||||
if(imageque.Count > 0) image = imageque.Dequeue();
|
if(imageque.Count > 0) image = imageque.Dequeue();
|
||||||
}
|
|
||||||
|
|
||||||
// Any image to process?
|
|
||||||
if(image != null)
|
|
||||||
{
|
|
||||||
image.LoadImage();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Doing something?
|
|
||||||
if(image != null)
|
|
||||||
{
|
|
||||||
// Wait a bit and update icon
|
|
||||||
if(!notifiedbusy)
|
|
||||||
{
|
|
||||||
notifiedbusy = true;
|
|
||||||
General.MainWindow.UpdateStatus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool lastthread = false;
|
|
||||||
lock (syncobject)
|
|
||||||
{
|
|
||||||
threadsfinished++;
|
|
||||||
if (threadsfinished == backgroundloader.Length)
|
|
||||||
lastthread = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastthread)
|
|
||||||
{
|
|
||||||
// Timing
|
|
||||||
if (loadfinishtime == 0)
|
|
||||||
{
|
|
||||||
//mxd. Release PK3 files
|
|
||||||
foreach (DataReader reader in containers)
|
|
||||||
{
|
|
||||||
if (reader is PK3Reader) (reader as PK3Reader).BatchMode = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
loadfinishtime = Clock.CurrentTime;
|
|
||||||
string deltatimesec = ((loadfinishtime - loadstarttime) / 1000.0f).ToString("########0.00");
|
|
||||||
General.WriteLogLine("Resources loading took " + deltatimesec + " seconds");
|
|
||||||
loadstarttime = 0; //mxd
|
|
||||||
|
|
||||||
lock (syncobject)
|
|
||||||
{
|
|
||||||
threadsfinished = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//mxd. Show more detailed message
|
|
||||||
if (notifiedbusy)
|
|
||||||
{
|
|
||||||
notifiedbusy = false;
|
|
||||||
General.MainWindow.ResourcesLoaded(deltatimesec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (notifiedbusy) //mxd. Sould never happen (?)
|
|
||||||
{
|
|
||||||
notifiedbusy = false;
|
|
||||||
General.MainWindow.UpdateStatus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait until there's more to do.
|
|
||||||
lock (syncobject)
|
|
||||||
{
|
|
||||||
if (imageque.Count == 0) Monitor.Wait(syncobject);
|
if (imageque.Count == 0) Monitor.Wait(syncobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
image?.BackgroundLoadImage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (true);
|
|
||||||
}
|
|
||||||
catch(ThreadInterruptedException) { }
|
catch(ThreadInterruptedException) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -867,7 +773,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QueueLoadPreview(ImageData img)
|
internal void QueueLoadPreview(ImageData img)
|
||||||
{
|
{
|
||||||
if (img.PreviewState == ImageLoadState.None)
|
if (img.PreviewState == ImageLoadState.None)
|
||||||
{
|
{
|
||||||
|
@ -944,8 +850,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
list.Remove(img.LongName);
|
list.Remove(img.LongName);
|
||||||
list.Add(img.LongName, img);
|
list.Add(img.LongName, img);
|
||||||
counter++;
|
counter++;
|
||||||
|
|
||||||
QueueLoadPreview(img);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1012,8 +916,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
{
|
{
|
||||||
nametranslation.Remove(img.LongName);
|
nametranslation.Remove(img.LongName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueLoadPreview(img);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1097,7 +999,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
|
|
||||||
if(!(img is UnknownImage))
|
if(!(img is UnknownImage))
|
||||||
{
|
{
|
||||||
if(!img.IsImageLoaded) img.LoadImage();
|
img.LoadImageNow();
|
||||||
if(!img.LoadFailed)
|
if(!img.LoadFailed)
|
||||||
{
|
{
|
||||||
// HiResImage will not give us it's actual scale
|
// HiResImage will not give us it's actual scale
|
||||||
|
@ -1197,6 +1099,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if(File.Exists(path))
|
if(File.Exists(path))
|
||||||
{
|
{
|
||||||
result = new FileImage(name, path) { AllowUnload = false };
|
result = new FileImage(name, path) { AllowUnload = false };
|
||||||
|
result.LoadImageNow();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1204,7 +1107,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
result = new ResourceImage("CodeImp.DoomBuilder.Resources." + name);
|
result = new ResourceImage("CodeImp.DoomBuilder.Resources." + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
result.LoadImage();
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1243,8 +1145,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
{
|
{
|
||||||
nametranslation.Remove(img.LongName);
|
nametranslation.Remove(img.LongName);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueLoadPreview(img);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1373,7 +1273,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
textures[img.LongName] = replacer;
|
textures[img.LongName] = replacer;
|
||||||
//replaced = true;
|
//replaced = true;
|
||||||
|
|
||||||
QueueLoadPreview(img);
|
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1386,7 +1285,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
flats[img.LongName] = replacer;
|
flats[img.LongName] = replacer;
|
||||||
//replaced = true;
|
//replaced = true;
|
||||||
|
|
||||||
QueueLoadPreview(img);
|
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1398,7 +1296,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
sprites[img.LongName] = replacer;
|
sprites[img.LongName] = replacer;
|
||||||
//replaced = true;
|
//replaced = true;
|
||||||
|
|
||||||
QueueLoadPreview(img);
|
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1522,8 +1419,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
|
|
||||||
// Add to collection
|
// Add to collection
|
||||||
sprites.Add(image.LongName, image);
|
sprites.Add(image.LongName, image);
|
||||||
|
|
||||||
QueueLoadPreview(image);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1569,8 +1464,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
{
|
{
|
||||||
image = sprites[info.SpriteLongName];
|
image = sprites[info.SpriteLongName];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image != null) QueueLoadPreview(image);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1628,7 +1521,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
foreach(string spritefile in files)
|
foreach(string spritefile in files)
|
||||||
{
|
{
|
||||||
ImageData img = new FileImage(Path.GetFileNameWithoutExtension(spritefile).ToLowerInvariant(), spritefile);
|
ImageData img = new FileImage(Path.GetFileNameWithoutExtension(spritefile).ToLowerInvariant(), spritefile);
|
||||||
img.LoadImage();
|
img.LoadImageNow();
|
||||||
img.AllowUnload = false;
|
img.AllowUnload = false;
|
||||||
name = INTERNAL_PREFIX + img.Name;
|
name = INTERNAL_PREFIX + img.Name;
|
||||||
long hash = Lump.MakeLongName(name, true); //mxd
|
long hash = Lump.MakeLongName(name, true); //mxd
|
||||||
|
@ -1642,7 +1535,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if(!internalspriteslookup.ContainsKey(name))
|
if(!internalspriteslookup.ContainsKey(name))
|
||||||
{
|
{
|
||||||
ImageData img = new ResourceImage("CodeImp.DoomBuilder.Resources.Nothing.png");
|
ImageData img = new ResourceImage("CodeImp.DoomBuilder.Resources.Nothing.png");
|
||||||
img.LoadImage();
|
|
||||||
img.AllowUnload = false;
|
img.AllowUnload = false;
|
||||||
long hash = Lump.MakeLongName(name, true); //mxd
|
long hash = Lump.MakeLongName(name, true); //mxd
|
||||||
sprites[hash] = img; //mxd
|
sprites[hash] = img; //mxd
|
||||||
|
@ -1654,7 +1546,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if(!internalspriteslookup.ContainsKey(name))
|
if(!internalspriteslookup.ContainsKey(name))
|
||||||
{
|
{
|
||||||
ImageData img = new ResourceImage("CodeImp.DoomBuilder.Resources.UnknownThing.png");
|
ImageData img = new ResourceImage("CodeImp.DoomBuilder.Resources.UnknownThing.png");
|
||||||
img.LoadImage();
|
|
||||||
img.AllowUnload = false;
|
img.AllowUnload = false;
|
||||||
sprites[UNKNOWN_THING] = img; //mxd
|
sprites[UNKNOWN_THING] = img; //mxd
|
||||||
internalspriteslookup[name] = UNKNOWN_THING; //mxd
|
internalspriteslookup[name] = UNKNOWN_THING; //mxd
|
||||||
|
@ -1666,7 +1557,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if(!internalspriteslookup.ContainsKey(name))
|
if(!internalspriteslookup.ContainsKey(name))
|
||||||
{
|
{
|
||||||
ImageData img = new ResourceImage("CodeImp.DoomBuilder.Resources.MissingThing.png");
|
ImageData img = new ResourceImage("CodeImp.DoomBuilder.Resources.MissingThing.png");
|
||||||
img.LoadImage();
|
|
||||||
img.AllowUnload = false;
|
img.AllowUnload = false;
|
||||||
sprites[MISSING_THING] = img; //mxd
|
sprites[MISSING_THING] = img; //mxd
|
||||||
internalspriteslookup[name] = MISSING_THING; //mxd
|
internalspriteslookup[name] = MISSING_THING; //mxd
|
||||||
|
@ -1688,7 +1578,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (img != null)
|
if (img != null)
|
||||||
{
|
{
|
||||||
img.UsedInMap = true;
|
img.UsedInMap = true;
|
||||||
QueueLoadImage(img);
|
|
||||||
}
|
}
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
@ -1705,7 +1594,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (img != null)
|
if (img != null)
|
||||||
{
|
{
|
||||||
img.UsedInMap = true;
|
img.UsedInMap = true;
|
||||||
QueueLoadImage(img);
|
|
||||||
}
|
}
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
@ -1739,7 +1627,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (image != null)
|
if (image != null)
|
||||||
{
|
{
|
||||||
image.UsedInMap = true;
|
image.UsedInMap = true;
|
||||||
QueueLoadImage(image);
|
|
||||||
}
|
}
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
@ -1754,7 +1641,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (img != null)
|
if (img != null)
|
||||||
{
|
{
|
||||||
img.UsedInMap = true;
|
img.UsedInMap = true;
|
||||||
QueueLoadImage(img);
|
|
||||||
}
|
}
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
@ -2416,8 +2302,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
|
|
||||||
// Add to collection
|
// Add to collection
|
||||||
sprites.Add(sprite.LongName, sprite);
|
sprites.Add(sprite.LongName, sprite);
|
||||||
|
|
||||||
QueueLoadPreview(sprite);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply VOXELDEF settings to the preview image...
|
// Apply VOXELDEF settings to the preview image...
|
||||||
|
@ -2783,8 +2667,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
textures[camteximage.LongName] = camteximage;
|
textures[camteximage.LongName] = camteximage;
|
||||||
flats[camteximage.LongName] = camteximage;
|
flats[camteximage.LongName] = camteximage;
|
||||||
|
|
||||||
QueueLoadPreview(camteximage);
|
|
||||||
|
|
||||||
// Add to container's texture set
|
// Add to container's texture set
|
||||||
currentreader.TextureSet.AddFlat(camteximage);
|
currentreader.TextureSet.AddFlat(camteximage);
|
||||||
currentreader.TextureSet.AddTexture(camteximage);
|
currentreader.TextureSet.AddTexture(camteximage);
|
||||||
|
@ -3143,7 +3025,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (i.Value.LoadFailed)
|
if (i.Value.LoadFailed)
|
||||||
continue;
|
continue;
|
||||||
i.Value.UsedInMap = usedtextures.ContainsKey(i.Key);
|
i.Value.UsedInMap = usedtextures.ContainsKey(i.Key);
|
||||||
QueueLoadImage(i.Value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set used on all flats
|
// Set used on all flats
|
||||||
|
@ -3152,7 +3033,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (i.Value.LoadFailed)
|
if (i.Value.LoadFailed)
|
||||||
continue;
|
continue;
|
||||||
i.Value.UsedInMap = usedtextures.ContainsKey(i.Key);
|
i.Value.UsedInMap = usedtextures.ContainsKey(i.Key);
|
||||||
QueueLoadImage(i.Value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//mxd. Use separate collections
|
//mxd. Use separate collections
|
||||||
|
@ -3164,7 +3044,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (i.Value.LoadFailed)
|
if (i.Value.LoadFailed)
|
||||||
continue;
|
continue;
|
||||||
i.Value.UsedInMap = usedtextures.ContainsKey(i.Key);
|
i.Value.UsedInMap = usedtextures.ContainsKey(i.Key);
|
||||||
QueueLoadImage(i.Value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set used on all flats
|
// Set used on all flats
|
||||||
|
@ -3173,7 +3052,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
if (i.Value.LoadFailed)
|
if (i.Value.LoadFailed)
|
||||||
continue;
|
continue;
|
||||||
i.Value.UsedInMap = usedflats.ContainsKey(i.Key);
|
i.Value.UsedInMap = usedflats.ContainsKey(i.Key);
|
||||||
QueueLoadImage(i.Value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
hasLongName = overridden.HasLongName;
|
hasLongName = overridden.HasLongName;
|
||||||
overridesettingsapplied = true;
|
overridesettingsapplied = true;
|
||||||
|
|
||||||
if(!overridden.IsImageLoaded) overridden.LoadImage();
|
overridden.LoadImageNow();
|
||||||
if(overridden.ImageState == ImageLoadState.Ready)
|
if(overridden.ImageState == ImageLoadState.Ready)
|
||||||
{
|
{
|
||||||
// Store source properteis
|
// Store source properteis
|
||||||
|
|
|
@ -106,8 +106,27 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
internal bool HasLongName { get { return hasLongName; } } //mxd
|
internal bool HasLongName { get { return hasLongName; } } //mxd
|
||||||
public bool UseColorCorrection { get { return usecolorcorrection; } set { usecolorcorrection = value; } }
|
public bool UseColorCorrection { get { return usecolorcorrection; } set { usecolorcorrection = value; } }
|
||||||
public Texture Texture { get { return GetTexture(); } }
|
public Texture Texture { get { return GetTexture(); } }
|
||||||
public bool IsPreviewLoaded { get { return (previewstate == ImageLoadState.Ready); } }
|
public bool IsPreviewLoaded
|
||||||
public bool IsImageLoaded { get { return (imagestate == ImageLoadState.Ready); } }
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (previewstate == ImageLoadState.None)
|
||||||
|
General.Map.Data.QueueLoadPreview(this);
|
||||||
|
|
||||||
|
return (previewstate == ImageLoadState.Ready);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsImageLoaded
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (imagestate == ImageLoadState.None)
|
||||||
|
General.Map.Data.QueueLoadImage(this);
|
||||||
|
|
||||||
|
return (imagestate == ImageLoadState.Ready);
|
||||||
|
}
|
||||||
|
}
|
||||||
public bool LoadFailed { get { return loadfailed; } }
|
public bool LoadFailed { get { return loadfailed; } }
|
||||||
public bool IsDisposed { get { return isdisposed; } }
|
public bool IsDisposed { get { return isdisposed; } }
|
||||||
public bool AllowUnload { get; set; }
|
public bool AllowUnload { get; set; }
|
||||||
|
@ -251,7 +270,16 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
return result.bitmap;
|
return result.bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadImage()
|
public void LoadImageNow()
|
||||||
|
{
|
||||||
|
if (imagestate != ImageLoadState.Ready)
|
||||||
|
{
|
||||||
|
imagestate = ImageLoadState.Loading;
|
||||||
|
LoadImage(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void BackgroundLoadImage()
|
||||||
{
|
{
|
||||||
LoadImage(true);
|
LoadImage(true);
|
||||||
}
|
}
|
||||||
|
@ -271,15 +299,16 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
|
|
||||||
// Save memory by disposing the original image immediately if we only used it to load a preview image
|
// Save memory by disposing the original image immediately if we only used it to load a preview image
|
||||||
bool onlyPreview = false;
|
bool onlyPreview = false;
|
||||||
if (imagestate == ImageLoadState.Ready)
|
if (imagestate != ImageLoadState.Loading)
|
||||||
{
|
{
|
||||||
loadResult.bitmap?.Dispose();
|
loadResult.bitmap?.Dispose();
|
||||||
|
loadResult.bitmap = null;
|
||||||
onlyPreview = true;
|
onlyPreview = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
General.MainWindow.RunOnUIThread(() =>
|
General.MainWindow.RunOnUIThread(() =>
|
||||||
{
|
{
|
||||||
if (imagestate != ImageLoadState.Ready && !onlyPreview)
|
if (imagestate == ImageLoadState.Loading && !onlyPreview)
|
||||||
{
|
{
|
||||||
// Log errors and warnings
|
// Log errors and warnings
|
||||||
foreach (LogMessage message in loadResult.messages)
|
foreach (LogMessage message in loadResult.messages)
|
||||||
|
@ -712,6 +741,11 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
return Properties.Resources.Failed;
|
return Properties.Resources.Failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (previewstate == ImageLoadState.None)
|
||||||
|
{
|
||||||
|
General.Map.Data.QueueLoadPreview(this);
|
||||||
|
}
|
||||||
|
|
||||||
// Return loading bitmap
|
// Return loading bitmap
|
||||||
return Properties.Resources.Hourglass;
|
return Properties.Resources.Hourglass;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,8 +60,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
bmp.Dispose();
|
bmp.Dispose();
|
||||||
bitmapdata.Dispose();
|
bitmapdata.Dispose();
|
||||||
|
|
||||||
// We have no destructor
|
LoadImageNow();
|
||||||
GC.SuppressFinalize(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -217,8 +217,6 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
ImageData img = General.Map.Data.GetTextureImage(p.LumpName);
|
ImageData img = General.Map.Data.GetTextureImage(p.LumpName);
|
||||||
if(!(img is UnknownImage) && img != this)
|
if(!(img is UnknownImage) && img != this)
|
||||||
{
|
{
|
||||||
if(!img.IsImageLoaded) img.LoadImage();
|
|
||||||
|
|
||||||
//mxd. Apply transformations from TexturePatch. We don't want to modify the original bitmap here, so make a copy
|
//mxd. Apply transformations from TexturePatch. We don't want to modify the original bitmap here, so make a copy
|
||||||
Bitmap bmp = new Bitmap(img.LocalGetBitmap());
|
Bitmap bmp = new Bitmap(img.LocalGetBitmap());
|
||||||
Bitmap patchbmp = TransformPatch(bitmap, p, bmp);
|
Bitmap patchbmp = TransformPatch(bitmap, p, bmp);
|
||||||
|
|
|
@ -42,10 +42,7 @@ namespace CodeImp.DoomBuilder.Data
|
||||||
this.loadbitmap = image;
|
this.loadbitmap = image;
|
||||||
SetName("");
|
SetName("");
|
||||||
|
|
||||||
LoadImage(false);
|
LoadImageNow();
|
||||||
|
|
||||||
// We have no destructor
|
|
||||||
GC.SuppressFinalize(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -234,7 +234,7 @@ namespace CodeImp.DoomBuilder.Editing
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure it is loaded
|
// Make sure it is loaded
|
||||||
backimage.LoadImage();
|
backimage.LoadImageNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
// This returns the next higher coordinate
|
// This returns the next higher coordinate
|
||||||
|
|
|
@ -277,9 +277,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
|
||||||
if (General.Map.Data.GetTextureExists(name))
|
if (General.Map.Data.GetTextureExists(name))
|
||||||
{
|
{
|
||||||
ImageData image = General.Map.Data.GetTextureImage(name);
|
ImageData image = General.Map.Data.GetTextureImage(name);
|
||||||
|
image.LoadImageNow();
|
||||||
if (!image.IsImageLoaded)
|
|
||||||
image.LoadImage();
|
|
||||||
|
|
||||||
t = image.Texture;
|
t = image.Texture;
|
||||||
|
|
||||||
|
@ -296,9 +294,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
|
||||||
if (General.Map.Data.GetTextureExists(name))
|
if (General.Map.Data.GetTextureExists(name))
|
||||||
{
|
{
|
||||||
ImageData image = General.Map.Data.GetTextureImage(name);
|
ImageData image = General.Map.Data.GetTextureImage(name);
|
||||||
|
image.LoadImageNow();
|
||||||
if (!image.IsImageLoaded)
|
|
||||||
image.LoadImage();
|
|
||||||
|
|
||||||
t = image.Texture;
|
t = image.Texture;
|
||||||
}
|
}
|
||||||
|
@ -312,9 +308,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.MD3
|
||||||
if (General.Map.Data.GetSpriteExists(name))
|
if (General.Map.Data.GetSpriteExists(name))
|
||||||
{
|
{
|
||||||
ImageData image = General.Map.Data.GetSpriteImage(name);
|
ImageData image = General.Map.Data.GetSpriteImage(name);
|
||||||
|
image.LoadImageNow();
|
||||||
if (!image.IsImageLoaded)
|
|
||||||
image.LoadImage();
|
|
||||||
|
|
||||||
t = image.Texture;
|
t = image.Texture;
|
||||||
}
|
}
|
||||||
|
|
|
@ -718,13 +718,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
||||||
// Render the geometry collected
|
// Render the geometry collected
|
||||||
foreach (KeyValuePair<ImageData, List<VisualGeometry>> group in geopass)
|
foreach (KeyValuePair<ImageData, List<VisualGeometry>> group in geopass)
|
||||||
{
|
{
|
||||||
// What texture to use?
|
|
||||||
if(group.Key is UnknownImage)
|
|
||||||
curtexture = General.Map.Data.UnknownTexture3D;
|
|
||||||
else if(group.Key.IsImageLoaded && !group.Key.IsDisposed)
|
|
||||||
curtexture = group.Key;
|
curtexture = group.Key;
|
||||||
else
|
|
||||||
curtexture = General.Map.Data.Hourglass3D;
|
|
||||||
|
|
||||||
// Apply texture
|
// Apply texture
|
||||||
graphics.SetTexture(curtexture.Texture);
|
graphics.SetTexture(curtexture.Texture);
|
||||||
|
@ -865,10 +859,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
||||||
{
|
{
|
||||||
if(group.Key is UnknownImage) continue;
|
if(group.Key is UnknownImage) continue;
|
||||||
|
|
||||||
// What texture to use?
|
|
||||||
if(!group.Key.IsImageLoaded || group.Key.IsDisposed)
|
|
||||||
curtexture = General.Map.Data.Hourglass3D;
|
|
||||||
else
|
|
||||||
curtexture = group.Key;
|
curtexture = group.Key;
|
||||||
|
|
||||||
// Apply texture
|
// Apply texture
|
||||||
|
@ -1093,13 +1083,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
||||||
// Change texture?
|
// Change texture?
|
||||||
if(g.Texture.LongName != curtexturename)
|
if(g.Texture.LongName != curtexturename)
|
||||||
{
|
{
|
||||||
// What texture to use?
|
|
||||||
if(g.Texture is UnknownImage)
|
|
||||||
curtexture = General.Map.Data.UnknownTexture3D;
|
|
||||||
else if(g.Texture.IsImageLoaded && !g.Texture.IsDisposed)
|
|
||||||
curtexture = g.Texture;
|
curtexture = g.Texture;
|
||||||
else
|
|
||||||
curtexture = General.Map.Data.Hourglass3D;
|
|
||||||
|
|
||||||
// Apply texture
|
// Apply texture
|
||||||
graphics.SetTexture(curtexture.Texture);
|
graphics.SetTexture(curtexture.Texture);
|
||||||
|
@ -1226,11 +1210,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
||||||
// Change texture?
|
// Change texture?
|
||||||
if(t.Texture.LongName != curtexturename)
|
if(t.Texture.LongName != curtexturename)
|
||||||
{
|
{
|
||||||
// What texture to use?
|
|
||||||
if(t.Texture.IsImageLoaded && !t.Texture.IsDisposed)
|
|
||||||
curtexture = t.Texture;
|
curtexture = t.Texture;
|
||||||
else
|
|
||||||
curtexture = General.Map.Data.Hourglass3D;
|
|
||||||
|
|
||||||
// Apply texture
|
// Apply texture
|
||||||
graphics.SetTexture(curtexture.Texture);
|
graphics.SetTexture(curtexture.Texture);
|
||||||
|
|
|
@ -93,7 +93,6 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
backgroundname = result;
|
backgroundname = result;
|
||||||
backgroundsource = GridSetup.SOURCE_TEXTURES;
|
backgroundsource = GridSetup.SOURCE_TEXTURES;
|
||||||
ImageData img = General.Map.Data.GetTextureImage(result);
|
ImageData img = General.Map.Data.GetTextureImage(result);
|
||||||
img.LoadImage();
|
|
||||||
General.DisplayZoomedImage(backgroundimage, img.GetBackgroundBitmap());
|
General.DisplayZoomedImage(backgroundimage, img.GetBackgroundBitmap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,7 +108,6 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
backgroundname = result;
|
backgroundname = result;
|
||||||
backgroundsource = GridSetup.SOURCE_FLATS;
|
backgroundsource = GridSetup.SOURCE_FLATS;
|
||||||
ImageData img = General.Map.Data.GetFlatImage(result);
|
ImageData img = General.Map.Data.GetFlatImage(result);
|
||||||
img.LoadImage();
|
|
||||||
General.DisplayZoomedImage(backgroundimage, img.GetBackgroundBitmap());
|
General.DisplayZoomedImage(backgroundimage, img.GetBackgroundBitmap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,7 +122,6 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
backgroundname = browsefile.FileName;
|
backgroundname = browsefile.FileName;
|
||||||
backgroundsource = GridSetup.SOURCE_FILE;
|
backgroundsource = GridSetup.SOURCE_FILE;
|
||||||
ImageData img = new FileImage(Path.GetFileNameWithoutExtension(backgroundname), backgroundname, false, 1.0f, 1.0f);
|
ImageData img = new FileImage(Path.GetFileNameWithoutExtension(backgroundname), backgroundname, false, 1.0f, 1.0f);
|
||||||
img.LoadImage();
|
|
||||||
General.DisplayZoomedImage(backgroundimage, new Bitmap(img.GetBackgroundBitmap()));
|
General.DisplayZoomedImage(backgroundimage, new Bitmap(img.GetBackgroundBitmap()));
|
||||||
img.Dispose();
|
img.Dispose();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4214,14 +4214,6 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResourcesLoaded(string loadtime)
|
|
||||||
{
|
|
||||||
RunOnUIThread(() =>
|
|
||||||
{
|
|
||||||
DisplayStatus(StatusType.Info, "Resources loaded in " + loadtime + " seconds");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ================== Message Pump
|
#region ================== Message Pump
|
||||||
|
@ -4377,10 +4369,6 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
//mxd
|
//mxd
|
||||||
internal void ResetClock()
|
internal void ResetClock()
|
||||||
{
|
{
|
||||||
// Let the data manager know...
|
|
||||||
if(General.Map != null && General.Map.Data != null)
|
|
||||||
General.Map.Data.OnBeforeClockReset();
|
|
||||||
|
|
||||||
Clock.Reset();
|
Clock.Reset();
|
||||||
lastupdatetime = 0;
|
lastupdatetime = 0;
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,6 @@ namespace CodeImp.DoomBuilder.BuilderModes.IO
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!id.IsImageLoaded) id.LoadImage();
|
|
||||||
Bitmap bmp = id.ExportBitmap();
|
Bitmap bmp = id.ExportBitmap();
|
||||||
lock (bmp)
|
lock (bmp)
|
||||||
{
|
{
|
||||||
|
@ -122,7 +121,6 @@ namespace CodeImp.DoomBuilder.BuilderModes.IO
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!id.IsImageLoaded) id.LoadImage();
|
|
||||||
Bitmap bmp = id.ExportBitmap();
|
Bitmap bmp = id.ExportBitmap();
|
||||||
|
|
||||||
// Handle duplicate names
|
// Handle duplicate names
|
||||||
|
|
|
@ -1174,7 +1174,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
mode.SetActionResult("Auto-aligned textures " + rest + ".");
|
mode.SetActionResult("Auto-aligned textures " + rest + ".");
|
||||||
|
|
||||||
// Make sure the texture is loaded (we need the texture size)
|
// Make sure the texture is loaded (we need the texture size)
|
||||||
if(!base.Texture.IsImageLoaded) base.Texture.LoadImage();
|
if(!base.Texture.IsImageLoaded) base.Texture.LoadImageNow();
|
||||||
|
|
||||||
if(mode.IsSingleSelection)
|
if(mode.IsSingleSelection)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2988,7 +2988,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
BaseVisualGeometrySidedef side = (BaseVisualGeometrySidedef)i;
|
BaseVisualGeometrySidedef side = (BaseVisualGeometrySidedef)i;
|
||||||
|
|
||||||
// Make sure the texture is loaded (we need the texture size)
|
// Make sure the texture is loaded (we need the texture size)
|
||||||
if(!side.Texture.IsImageLoaded) side.Texture.LoadImage();
|
if(!side.Texture.IsImageLoaded) side.Texture.LoadImageNow();
|
||||||
|
|
||||||
//Align textures
|
//Align textures
|
||||||
AutoAlignTextures(side, side.Texture, alignX, alignY, false, false);
|
AutoAlignTextures(side, side.Texture, alignX, alignY, false, false);
|
||||||
|
|
|
@ -301,7 +301,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
// Check if the texture is loaded
|
// Check if the texture is loaded
|
||||||
ImageData sprite = sprites[i];
|
ImageData sprite = sprites[i];
|
||||||
if (!sprite.IsImageLoaded && !sprite.LoadFailed)
|
if (!sprite.IsImageLoaded && !sprite.LoadFailed)
|
||||||
sprite.LoadImage();
|
sprite.LoadImageNow();
|
||||||
if(sprite.IsImageLoaded)
|
if(sprite.IsImageLoaded)
|
||||||
{
|
{
|
||||||
base.textures[i] = sprite;
|
base.textures[i] = sprite;
|
||||||
|
@ -354,7 +354,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
isloaded = false;
|
isloaded = false;
|
||||||
base.textures[i] = General.Map.Data.Hourglass3D;
|
base.textures[i] = sprite;
|
||||||
|
|
||||||
// Determine sprite size
|
// Determine sprite size
|
||||||
float radius = Math.Min(thingradius, thingheight / 2f);
|
float radius = Math.Min(thingradius, thingheight / 2f);
|
||||||
|
|
|
@ -280,7 +280,7 @@ namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
|
||||||
image = new DynamicBitmapImage(canvas, "_CANVAS_");
|
image = new DynamicBitmapImage(canvas, "_CANVAS_");
|
||||||
image.UseColorCorrection = false;
|
image.UseColorCorrection = false;
|
||||||
image.MipMapLevels = 1;
|
image.MipMapLevels = 1;
|
||||||
image.LoadImage();
|
image.LoadImageNow();
|
||||||
|
|
||||||
// Make custom presentation
|
// Make custom presentation
|
||||||
CustomPresentation p = new CustomPresentation();
|
CustomPresentation p = new CustomPresentation();
|
||||||
|
|
Loading…
Reference in a new issue