@woosh/meep-engine 2.117.12 → 2.117.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51192,11 +51192,27 @@ class ObservedString extends String {
51192
51192
  */
51193
51193
  ObservedString.prototype.isObservedString = true;
51194
51194
 
51195
+ /**
51196
+ *
51197
+ * @type {WeakMap<HTMLCanvasElement, CanvasRenderingContext2D>}
51198
+ */
51199
+ const context_cache = new WeakMap();
51200
+
51201
+ /**
51202
+ *
51203
+ * @param {HTMLCanvasElement} canvas
51204
+ * @returns {Sampler2D}
51205
+ */
51195
51206
  function canvas2Sampler2D(canvas) {
51196
51207
  const width = canvas.width;
51197
51208
  const height = canvas.height;
51198
51209
 
51199
- const context = canvas.getContext("2d");
51210
+ let context = context_cache.get(canvas);
51211
+
51212
+ if (context === undefined) {
51213
+ context = canvas.getContext("2d");
51214
+ context_cache.set(canvas, context);
51215
+ }
51200
51216
 
51201
51217
  const result = new Sampler2D(null, 4, width, height);
51202
51218
 
@@ -76707,6 +76723,35 @@ function computeTextureHash(t) {
76707
76723
  );
76708
76724
  }
76709
76725
 
76726
+ /**
76727
+ *
76728
+ * @param {HTMLCanvasElement} a
76729
+ * @param {HTMLCanvasElement} b
76730
+ * @returns {boolean}
76731
+ */
76732
+ function computeImageCanvasEquality(a, b) {
76733
+ if(a === b){
76734
+ // shortcut
76735
+ return true;
76736
+ }
76737
+
76738
+ if (
76739
+ a.width !== b.width
76740
+ || a.height !== b.height
76741
+ ) {
76742
+ return false;
76743
+ }
76744
+
76745
+ const sampler_a = canvas2Sampler2D(a);
76746
+ const sampler_b = canvas2Sampler2D(b);
76747
+
76748
+ if(!sampler_a.equals(sampler_b)){
76749
+ return false;
76750
+ }
76751
+
76752
+ return true;
76753
+ }
76754
+
76710
76755
  //
76711
76756
 
76712
76757
  /**
@@ -76768,28 +76813,6 @@ function computeTextureEquality(a, b) {
76768
76813
  }
76769
76814
 
76770
76815
 
76771
- /**
76772
- *
76773
- * @param {HTMLCanvasElement} a
76774
- * @param {HTMLCanvasElement} b
76775
- * @returns {boolean}
76776
- */
76777
- function computeImageCanvasEquality(a, b) {
76778
- if (
76779
- a.width !== b.width
76780
- || a.height !== b.height
76781
- ) {
76782
- return false;
76783
- }
76784
-
76785
- if (a.toDataURL() !== b.toDataURL()) {
76786
- // kinda slow, but pretty reliable, as we don't actually know what canvases hold, i.e. webgl, 2d etc.
76787
- return false;
76788
- }
76789
-
76790
- return true;
76791
- }
76792
-
76793
76816
  /**
76794
76817
  *
76795
76818
  * @param {Image|ImageBitmap|HTMLCanvasElement|[]|{width:number, height:number}} a
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.117.12",
8
+ "version": "2.117.13",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"computeTextureEquality.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/asset/loaders/material/computeTextureEquality.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,gEAFa,OAAO,CAoDnB;AAyBD;;;;;GAKG;AACH,sCAJW,8DAAM,WAAW,GAAC,iBAAiB,GAAC,EAAE,GAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,MAAM,CAAA;CAAC,KACpE,8DAAM,WAAW,GAAC,iBAAiB,GAAC,EAAE,GAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,MAAM,CAAA;CAAC,GAClE,OAAO,CAmEnB"}
1
+ {"version":3,"file":"computeTextureEquality.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/asset/loaders/material/computeTextureEquality.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,gEAFa,OAAO,CAoDnB;AAGD;;;;;GAKG;AACH,sCAJW,8DAAM,WAAW,GAAC,iBAAiB,GAAC,EAAE,GAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,MAAM,CAAA;CAAC,KACpE,8DAAM,WAAW,GAAC,iBAAiB,GAAC,EAAE,GAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,MAAM,CAAA;CAAC,GAClE,OAAO,CAmEnB"}
@@ -1,5 +1,6 @@
1
1
  import { fastArrayEquals } from "../../../../core/collection/array/fastArrayEquals.js";
2
2
  import { isTypedArray } from "../../../../core/collection/array/typed/isTypedArray.js";
3
+ import { computeImageCanvasEquality } from "../../../graphics/canvas/computeImageCanvasEquality.js";
3
4
  import { isImageBitmap } from "../../../graphics/texture/isImageBitmap.js";
4
5
  import { computeImageBitmapEquality } from "./computeImageBitmapEquality.js";
5
6
 
@@ -64,28 +65,6 @@ export function computeTextureEquality(a, b) {
64
65
  }
65
66
 
66
67
 
67
- /**
68
- *
69
- * @param {HTMLCanvasElement} a
70
- * @param {HTMLCanvasElement} b
71
- * @returns {boolean}
72
- */
73
- function computeImageCanvasEquality(a, b) {
74
- if (
75
- a.width !== b.width
76
- || a.height !== b.height
77
- ) {
78
- return false;
79
- }
80
-
81
- if (a.toDataURL() !== b.toDataURL()) {
82
- // kinda slow, but pretty reliable, as we don't actually know what canvases hold, i.e. webgl, 2d etc.
83
- return false;
84
- }
85
-
86
- return true;
87
- }
88
-
89
68
  /**
90
69
  *
91
70
  * @param {Image|ImageBitmap|HTMLCanvasElement|[]|{width:number, height:number}} a
@@ -0,0 +1,8 @@
1
+ /**
2
+ *
3
+ * @param {HTMLCanvasElement} a
4
+ * @param {HTMLCanvasElement} b
5
+ * @returns {boolean}
6
+ */
7
+ export function computeImageCanvasEquality(a: HTMLCanvasElement, b: HTMLCanvasElement): boolean;
8
+ //# sourceMappingURL=computeImageCanvasEquality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeImageCanvasEquality.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/canvas/computeImageCanvasEquality.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,8CAJW,iBAAiB,KACjB,iBAAiB,GACf,OAAO,CAuBnB"}
@@ -0,0 +1,31 @@
1
+ import canvas2Sampler2D from "../texture/Canvas2Sampler2D.js";
2
+
3
+
4
+ /**
5
+ *
6
+ * @param {HTMLCanvasElement} a
7
+ * @param {HTMLCanvasElement} b
8
+ * @returns {boolean}
9
+ */
10
+ export function computeImageCanvasEquality(a, b) {
11
+ if(a === b){
12
+ // shortcut
13
+ return true;
14
+ }
15
+
16
+ if (
17
+ a.width !== b.width
18
+ || a.height !== b.height
19
+ ) {
20
+ return false;
21
+ }
22
+
23
+ const sampler_a = canvas2Sampler2D(a);
24
+ const sampler_b = canvas2Sampler2D(b);
25
+
26
+ if(!sampler_a.equals(sampler_b)){
27
+ return false;
28
+ }
29
+
30
+ return true;
31
+ }
@@ -6,5 +6,10 @@
6
6
  export function canvasDataToSampler(target: Sampler2D, ctx: CanvasRenderingContext2D): void;
7
7
  export default canvas2Sampler2D;
8
8
  import { Sampler2D } from './sampler/Sampler2D.js';
9
- declare function canvas2Sampler2D(canvas: any): Sampler2D;
9
+ /**
10
+ *
11
+ * @param {HTMLCanvasElement} canvas
12
+ * @returns {Sampler2D}
13
+ */
14
+ declare function canvas2Sampler2D(canvas: HTMLCanvasElement): Sampler2D;
10
15
  //# sourceMappingURL=Canvas2Sampler2D.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Canvas2Sampler2D.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/texture/Canvas2Sampler2D.js"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,4CAHW,SAAS,OACT,wBAAwB,QAalC;;0BAjCyB,wBAAwB;AAGlD,0DAYC"}
1
+ {"version":3,"file":"Canvas2Sampler2D.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/texture/Canvas2Sampler2D.js"],"names":[],"mappings":"AAiCA;;;;GAIG;AACH,4CAHW,SAAS,OACT,wBAAwB,QAalC;;0BAhDyB,wBAAwB;AAQlD;;;;GAIG;AACH,0CAHW,iBAAiB,GACf,SAAS,CAmBrB"}
@@ -1,12 +1,27 @@
1
1
  import { assert } from "../../../core/assert.js";
2
2
  import { Sampler2D } from './sampler/Sampler2D.js';
3
3
 
4
+ /**
5
+ *
6
+ * @type {WeakMap<HTMLCanvasElement, CanvasRenderingContext2D>}
7
+ */
8
+ const context_cache = new WeakMap();
4
9
 
10
+ /**
11
+ *
12
+ * @param {HTMLCanvasElement} canvas
13
+ * @returns {Sampler2D}
14
+ */
5
15
  function canvas2Sampler2D(canvas) {
6
16
  const width = canvas.width;
7
17
  const height = canvas.height;
8
18
 
9
- const context = canvas.getContext("2d");
19
+ let context = context_cache.get(canvas);
20
+
21
+ if (context === undefined) {
22
+ context = canvas.getContext("2d");
23
+ context_cache.set(canvas, context);
24
+ }
10
25
 
11
26
  const result = new Sampler2D(null, 4, width, height);
12
27