Make Assets.load* use a background thread on native

This commit is contained in:
Joshua Granick
2015-07-03 12:08:50 -07:00
parent c6ba6b0de5
commit 7f4f91bc53

View File

@@ -8,6 +8,7 @@ import lime.audio.AudioSource;
import lime.audio.openal.AL; import lime.audio.openal.AL;
import lime.audio.AudioBuffer; import lime.audio.AudioBuffer;
import lime.graphics.Image; import lime.graphics.Image;
import lime.system.WorkerThread;
import lime.text.Font; import lime.text.Font;
import lime.utils.ByteArray; import lime.utils.ByteArray;
import lime.utils.UInt8Array; import lime.utils.UInt8Array;
@@ -223,13 +224,13 @@ class DefaultAssetLibrary extends AssetLibrary {
var bytes:ByteArray = null; var bytes:ByteArray = null;
var loader = Preloader.loaders.get (path.get (id)); var loader = Preloader.loaders.get (path.get (id));
if (loader == null) { if (loader == null) {
return null; return null;
} }
var data = loader.data; var data = loader.data;
if (Std.is (data, String)) { if (Std.is (data, String)) {
@@ -378,13 +379,13 @@ class DefaultAssetLibrary extends AssetLibrary {
var bytes:ByteArray = null; var bytes:ByteArray = null;
var loader = Preloader.loaders.get (path.get (id)); var loader = Preloader.loaders.get (path.get (id));
if (loader == null) { if (loader == null) {
return null; return null;
} }
var data = loader.data; var data = loader.data;
if (Std.is (data, String)) { if (Std.is (data, String)) {
@@ -472,6 +473,7 @@ class DefaultAssetLibrary extends AssetLibrary {
public override function loadAudioBuffer (id:String, handler:AudioBuffer -> Void):Void { public override function loadAudioBuffer (id:String, handler:AudioBuffer -> Void):Void {
#if (flash) #if (flash)
if (path.exists (id)) { if (path.exists (id)) {
var soundLoader = new Sound (); var soundLoader = new Sound ();
@@ -482,13 +484,17 @@ class DefaultAssetLibrary extends AssetLibrary {
handler (audioBuffer); handler (audioBuffer);
}); });
soundLoader.load (new URLRequest (path.get (id))); soundLoader.load (new URLRequest (path.get (id)));
} else { } else {
handler (getAudioBuffer (id)); handler (getAudioBuffer (id));
} }
#else #else
handler (getAudioBuffer (id)); handler (getAudioBuffer (id));
#end #end
@@ -519,29 +525,38 @@ class DefaultAssetLibrary extends AssetLibrary {
handler (getBytes (id)); handler (getBytes (id));
} }
#elseif html5 #elseif html5
if (path.exists (id)) { if (path.exists (id)) {
var loader = new URLLoader (); var loader = new URLLoader ();
loader.dataFormat = BINARY; loader.dataFormat = BINARY;
loader.onComplete.add (function (_):Void { loader.onComplete.add (function (_):Void {
handler(loader.data);
});
loader.load (new URLRequest (path.get (id)));
handler (loader.data);
});
loader.load (new URLRequest (path.get (id)));
} else { } else {
handler (getBytes (id)); handler (getBytes (id));
} }
#else #else
handler (getBytes (id)); var worker = new WorkerThread ();
worker.doWork = function () {
var bytes = getBytes (id);
worker.sendUpdate (bytes);
}
worker.onUpdate.add (function (msg) handler (msg));
worker.run ();
#end #end
@@ -570,26 +585,34 @@ class DefaultAssetLibrary extends AssetLibrary {
} }
#elseif html5 #elseif html5
if (path.exists (id)) { if (path.exists (id)) {
var image = new js.html.Image (); var image = new js.html.Image ();
image.onload = function (_):Void { image.onload = function (_):Void {
handler (Image.fromImageElement (image)); handler (Image.fromImageElement (image));
} }
image.src = id; image.src = id;
} else { } else {
handler (getImage (id)); handler (getImage (id));
} }
#else #else
handler (getImage (id)); var worker = new WorkerThread ();
worker.doWork = function () {
var image = getImage (id);
worker.sendUpdate (image);
}
worker.onUpdate.add (function (msg) handler (msg));
worker.run ();
#end #end
@@ -699,10 +722,11 @@ class DefaultAssetLibrary extends AssetLibrary {
var loader = new URLLoader (); var loader = new URLLoader ();
loader.onComplete.add (function (_):Void { loader.onComplete.add (function (_):Void {
handler(loader.data); handler (loader.data);
}); });
loader.load (new URLRequest (path.get (id))); loader.load (new URLRequest (path.get (id)));
} else { } else {