Explorar el Código

Adding support for ArrayBuffer to createTexture

David catuhe hace 9 años
padre
commit
00d407b647

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 17 - 17
dist/preview release/babylon.core.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1405 - 1404
dist/preview release/babylon.d.ts


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 20 - 20
dist/preview release/babylon.js


+ 28 - 0
dist/preview release/babylon.max.js

@@ -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:")

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 20 - 20
dist/preview release/babylon.noworker.js


+ 28 - 0
src/Tools/babylon.tools.js

@@ -73,6 +73,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);
@@ -158,6 +183,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:")

+ 34 - 1
src/Tools/babylon.tools.ts

@@ -101,6 +101,35 @@
             return angle * Math.PI / 180;
         }
 
+        public static EncodeArrayBufferTobase64(buffer: ArrayBuffer): string {
+            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;
+        }
+
         public static ExtractMinAndMaxIndexed(positions: number[] | Float32Array, indices: number[], indexStart: number, indexCount: number): { minimum: Vector3; maximum: Vector3 } {
             var minimum = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
             var maximum = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
@@ -202,7 +231,11 @@
             return url;
         }
 
-        public static LoadImage(url: string, onload, onerror, database): HTMLImageElement {
+        public static LoadImage(url: any, onload, onerror, database): HTMLImageElement {
+            if (url instanceof ArrayBuffer) {
+                url = Tools.EncodeArrayBufferTobase64(url);
+            }
+
             url = Tools.CleanUrl(url);
 
             var img = new Image();