|
@@ -3905,6 +3905,31 @@ var BABYLON;
|
|
|
Tools.ToRadians = function (angle) {
|
|
|
return angle * Math.PI / 180;
|
|
|
};
|
|
|
+ Tools.EncodeArrayBufferTobase64 = function (buffer) {
|
|
|
+ var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
|
+ var output = "";
|
|
|
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
|
+ var i = 0;
|
|
|
+ var bytes = new Uint8Array(buffer);
|
|
|
+ while (i < bytes.length) {
|
|
|
+ chr1 = bytes[i++];
|
|
|
+ chr2 = i < bytes.length ? bytes[i++] : Number.NaN; // Not sure if the index
|
|
|
+ chr3 = i < bytes.length ? bytes[i++] : Number.NaN; // checks are needed here
|
|
|
+ enc1 = chr1 >> 2;
|
|
|
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
|
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
|
+ enc4 = chr3 & 63;
|
|
|
+ if (isNaN(chr2)) {
|
|
|
+ enc3 = enc4 = 64;
|
|
|
+ }
|
|
|
+ else if (isNaN(chr3)) {
|
|
|
+ enc4 = 64;
|
|
|
+ }
|
|
|
+ output += keyStr.charAt(enc1) + keyStr.charAt(enc2) +
|
|
|
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
|
|
|
+ }
|
|
|
+ return "data:image/png;base64," + output;
|
|
|
+ };
|
|
|
Tools.ExtractMinAndMaxIndexed = function (positions, indices, indexStart, indexCount) {
|
|
|
var minimum = new BABYLON.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
|
var maximum = new BABYLON.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
|
|
@@ -3990,6 +4015,9 @@ var BABYLON;
|
|
|
return url;
|
|
|
};
|
|
|
Tools.LoadImage = function (url, onload, onerror, database) {
|
|
|
+ if (url instanceof ArrayBuffer) {
|
|
|
+ url = Tools.EncodeArrayBufferTobase64(url);
|
|
|
+ }
|
|
|
url = Tools.CleanUrl(url);
|
|
|
var img = new Image();
|
|
|
if (url.substr(0, 5) !== "data:")
|