|
@@ -1115,6 +1115,36 @@
|
|
|
function createElementNS(name) {
|
|
|
return document.createElementNS('http://www.w3.org/1999/xhtml', name);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * cyrb53 hash for string from: https://stackoverflow.com/a/52171480
|
|
|
+ *
|
|
|
+ * Public Domain, @bryc - https://stackoverflow.com/users/815680/bryc
|
|
|
+ *
|
|
|
+ * It is roughly similar to the well-known MurmurHash/xxHash algorithms. It uses a combination
|
|
|
+ * of multiplication and Xorshift to generate the hash, but not as thorough. As a result it's
|
|
|
+ * faster than either would be in JavaScript and significantly simpler to implement. Keep in
|
|
|
+ * mind this is not a secure algorithm, if privacy/security is a concern, this is not for you.
|
|
|
+ *
|
|
|
+ * @param {string} str
|
|
|
+ * @param {number} seed, default 0
|
|
|
+ * @returns number
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
+ function hashString(str, seed = 0) {
|
|
|
+ let h1 = 0xdeadbeef ^ seed,
|
|
|
+ h2 = 0x41c6ce57 ^ seed;
|
|
|
+
|
|
|
+ for (let i = 0, ch; i < str.length; i++) {
|
|
|
+ ch = str.charCodeAt(i);
|
|
|
+ h1 = Math.imul(h1 ^ ch, 2654435761);
|
|
|
+ h2 = Math.imul(h2 ^ ch, 1597334677);
|
|
|
+ }
|
|
|
+
|
|
|
+ h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
|
|
|
+ h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
|
|
|
+ return 4294967296 * (2097151 & h2) + (h1 >>> 0);
|
|
|
+ }
|
|
|
|
|
|
let _canvas;
|
|
|
|
|
@@ -14444,8 +14474,8 @@
|
|
|
if (parameters.shaderID) {
|
|
|
array.push(parameters.shaderID);
|
|
|
} else {
|
|
|
- array.push(parameters.fragmentShader);
|
|
|
- array.push(parameters.vertexShader);
|
|
|
+ array.push(hashString(parameters.fragmentShader));
|
|
|
+ array.push(hashString(parameters.vertexShader));
|
|
|
}
|
|
|
|
|
|
if (parameters.defines !== undefined) {
|