@luma.gl/core 9.2.6 → 9.3.0-alpha.11

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.
Files changed (282) hide show
  1. package/dist/adapter/canvas-context.d.ts +6 -162
  2. package/dist/adapter/canvas-context.d.ts.map +1 -1
  3. package/dist/adapter/canvas-context.js +5 -419
  4. package/dist/adapter/canvas-context.js.map +1 -1
  5. package/dist/adapter/canvas-observer.d.ts +32 -0
  6. package/dist/adapter/canvas-observer.d.ts.map +1 -0
  7. package/dist/adapter/canvas-observer.js +90 -0
  8. package/dist/adapter/canvas-observer.js.map +1 -0
  9. package/dist/adapter/canvas-surface.d.ts +150 -0
  10. package/dist/adapter/canvas-surface.d.ts.map +1 -0
  11. package/dist/adapter/canvas-surface.js +392 -0
  12. package/dist/adapter/canvas-surface.js.map +1 -0
  13. package/dist/adapter/device.d.ts +81 -16
  14. package/dist/adapter/device.d.ts.map +1 -1
  15. package/dist/adapter/device.js +193 -11
  16. package/dist/adapter/device.js.map +1 -1
  17. package/dist/adapter/luma.d.ts.map +1 -1
  18. package/dist/adapter/luma.js +2 -1
  19. package/dist/adapter/luma.js.map +1 -1
  20. package/dist/adapter/presentation-context.d.ts +11 -0
  21. package/dist/adapter/presentation-context.d.ts.map +1 -0
  22. package/dist/adapter/presentation-context.js +12 -0
  23. package/dist/adapter/presentation-context.js.map +1 -0
  24. package/dist/adapter/resources/buffer.d.ts +1 -1
  25. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  26. package/dist/adapter/resources/buffer.js +14 -6
  27. package/dist/adapter/resources/buffer.js.map +1 -1
  28. package/dist/adapter/resources/command-buffer.d.ts +3 -1
  29. package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
  30. package/dist/adapter/resources/command-buffer.js +3 -1
  31. package/dist/adapter/resources/command-buffer.js.map +1 -1
  32. package/dist/adapter/resources/command-encoder.d.ts +30 -7
  33. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  34. package/dist/adapter/resources/command-encoder.js +68 -2
  35. package/dist/adapter/resources/command-encoder.js.map +1 -1
  36. package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
  37. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
  38. package/dist/adapter/resources/fence.d.ts +16 -0
  39. package/dist/adapter/resources/fence.d.ts.map +1 -0
  40. package/dist/adapter/resources/fence.js +17 -0
  41. package/dist/adapter/resources/fence.js.map +1 -0
  42. package/dist/adapter/resources/framebuffer.d.ts +1 -1
  43. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  44. package/dist/adapter/resources/framebuffer.js +15 -12
  45. package/dist/adapter/resources/framebuffer.js.map +1 -1
  46. package/dist/adapter/resources/query-set.d.ts +17 -1
  47. package/dist/adapter/resources/query-set.d.ts.map +1 -1
  48. package/dist/adapter/resources/query-set.js.map +1 -1
  49. package/dist/adapter/resources/render-pipeline.d.ts +28 -10
  50. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  51. package/dist/adapter/resources/render-pipeline.js +21 -2
  52. package/dist/adapter/resources/render-pipeline.js.map +1 -1
  53. package/dist/adapter/resources/resource.d.ts +13 -0
  54. package/dist/adapter/resources/resource.d.ts.map +1 -1
  55. package/dist/adapter/resources/resource.js +243 -14
  56. package/dist/adapter/resources/resource.js.map +1 -1
  57. package/dist/adapter/resources/shader.js +27 -25
  58. package/dist/adapter/resources/shader.js.map +1 -1
  59. package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
  60. package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
  61. package/dist/adapter/resources/shared-render-pipeline.js +25 -0
  62. package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
  63. package/dist/adapter/resources/texture-view.d.ts +1 -1
  64. package/dist/adapter/resources/texture-view.d.ts.map +1 -1
  65. package/dist/adapter/resources/texture.d.ts +168 -28
  66. package/dist/adapter/resources/texture.d.ts.map +1 -1
  67. package/dist/adapter/resources/texture.js +284 -25
  68. package/dist/adapter/resources/texture.js.map +1 -1
  69. package/dist/adapter/types/attachments.d.ts +1 -1
  70. package/dist/adapter/types/attachments.d.ts.map +1 -1
  71. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  72. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  73. package/dist/adapter/types/parameters.d.ts +3 -1
  74. package/dist/adapter/types/parameters.d.ts.map +1 -1
  75. package/dist/adapter/types/parameters.js +1 -0
  76. package/dist/adapter/types/parameters.js.map +1 -1
  77. package/dist/adapter/types/shader-layout.d.ts +10 -6
  78. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  79. package/dist/adapter/types/uniforms.d.ts +6 -0
  80. package/dist/adapter/types/uniforms.d.ts.map +1 -1
  81. package/dist/adapter-utils/bind-groups.d.ts +9 -0
  82. package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
  83. package/dist/adapter-utils/bind-groups.js +41 -0
  84. package/dist/adapter-utils/bind-groups.js.map +1 -0
  85. package/dist/adapter-utils/format-compiler-log.d.ts.map +1 -1
  86. package/dist/adapter-utils/format-compiler-log.js +23 -15
  87. package/dist/adapter-utils/format-compiler-log.js.map +1 -1
  88. package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
  89. package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
  90. package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
  91. package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
  92. package/dist/dist.dev.js +2734 -644
  93. package/dist/dist.min.js +10 -9
  94. package/dist/factories/bind-group-factory.d.ts +20 -0
  95. package/dist/factories/bind-group-factory.d.ts.map +1 -0
  96. package/dist/factories/bind-group-factory.js +88 -0
  97. package/dist/factories/bind-group-factory.js.map +1 -0
  98. package/dist/factories/core-module-state.d.ts +7 -0
  99. package/dist/factories/core-module-state.d.ts.map +1 -0
  100. package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
  101. package/dist/factories/core-module-state.js.map +1 -0
  102. package/dist/factories/pipeline-factory.d.ts +54 -0
  103. package/dist/factories/pipeline-factory.d.ts.map +1 -0
  104. package/dist/factories/pipeline-factory.js +270 -0
  105. package/dist/factories/pipeline-factory.js.map +1 -0
  106. package/dist/factories/shader-factory.d.ts +20 -0
  107. package/dist/factories/shader-factory.d.ts.map +1 -0
  108. package/dist/factories/shader-factory.js +84 -0
  109. package/dist/factories/shader-factory.js.map +1 -0
  110. package/dist/index.cjs +2447 -534
  111. package/dist/index.cjs.map +4 -4
  112. package/dist/index.d.ts +30 -14
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +19 -7
  115. package/dist/index.js.map +1 -1
  116. package/dist/portable/shader-block-writer.d.ts +51 -0
  117. package/dist/portable/shader-block-writer.d.ts.map +1 -0
  118. package/dist/portable/shader-block-writer.js +185 -0
  119. package/dist/portable/shader-block-writer.js.map +1 -0
  120. package/dist/portable/uniform-block.d.ts +1 -1
  121. package/dist/portable/uniform-block.d.ts.map +1 -1
  122. package/dist/portable/uniform-store.d.ts +55 -24
  123. package/dist/portable/uniform-store.d.ts.map +1 -1
  124. package/dist/portable/uniform-store.js +73 -25
  125. package/dist/portable/uniform-store.js.map +1 -1
  126. package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
  127. package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
  128. package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
  129. package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
  130. package/dist/shadertypes/data-types/data-types.d.ts +31 -12
  131. package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
  132. package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
  133. package/dist/shadertypes/data-types/decode-data-types.js +4 -3
  134. package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
  135. package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
  136. package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
  137. package/dist/shadertypes/image-types/image-types.js.map +1 -0
  138. package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
  139. package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
  140. package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
  141. package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
  142. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
  143. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
  144. package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +43 -4
  145. package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
  146. package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
  147. package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
  148. package/dist/shadertypes/shader-types/shader-types.js +30 -0
  149. package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
  150. package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
  151. package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +4 -4
  152. package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
  153. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
  154. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
  155. package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +110 -38
  156. package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
  157. package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
  158. package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
  159. package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
  160. package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
  161. package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +12 -11
  162. package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
  163. package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
  164. package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
  165. package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
  166. package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
  167. package/dist/shadertypes/texture-types/texture-layout.d.ts +5 -0
  168. package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
  169. package/dist/shadertypes/texture-types/texture-layout.js +41 -0
  170. package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
  171. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
  172. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
  173. package/dist/shadertypes/vertex-types/vertex-format-decoder.js +144 -0
  174. package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
  175. package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
  176. package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
  177. package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
  178. package/dist/utils/array-equal.d.ts +1 -1
  179. package/dist/utils/array-equal.d.ts.map +1 -1
  180. package/dist/utils/array-equal.js +15 -9
  181. package/dist/utils/array-equal.js.map +1 -1
  182. package/dist/utils/assert.d.ts +5 -0
  183. package/dist/utils/assert.d.ts.map +1 -0
  184. package/dist/utils/assert.js +17 -0
  185. package/dist/utils/assert.js.map +1 -0
  186. package/dist/utils/stats-manager.d.ts.map +1 -1
  187. package/dist/utils/stats-manager.js +61 -1
  188. package/dist/utils/stats-manager.js.map +1 -1
  189. package/package.json +6 -6
  190. package/src/adapter/canvas-context.ts +7 -556
  191. package/src/adapter/canvas-observer.ts +130 -0
  192. package/src/adapter/canvas-surface.ts +521 -0
  193. package/src/adapter/device.ts +311 -25
  194. package/src/adapter/luma.ts +1 -0
  195. package/src/adapter/presentation-context.ts +16 -0
  196. package/src/adapter/resources/buffer.ts +13 -5
  197. package/src/adapter/resources/command-buffer.ts +4 -2
  198. package/src/adapter/resources/command-encoder.ts +101 -10
  199. package/src/adapter/resources/compute-pipeline.ts +2 -2
  200. package/src/adapter/resources/fence.ts +32 -0
  201. package/src/adapter/resources/framebuffer.ts +16 -13
  202. package/src/adapter/resources/query-set.ts +17 -1
  203. package/src/adapter/resources/render-pipeline.ts +52 -16
  204. package/src/adapter/resources/resource.ts +289 -14
  205. package/src/adapter/resources/shader.ts +28 -28
  206. package/src/adapter/resources/shared-render-pipeline.ts +40 -0
  207. package/src/adapter/resources/texture-view.ts +1 -1
  208. package/src/adapter/resources/texture.ts +427 -49
  209. package/src/adapter/types/attachments.ts +1 -1
  210. package/src/adapter/types/buffer-layout.ts +1 -1
  211. package/src/adapter/types/parameters.ts +4 -1
  212. package/src/adapter/types/shader-layout.ts +15 -9
  213. package/src/adapter/types/uniforms.ts +12 -0
  214. package/src/adapter-utils/bind-groups.ts +71 -0
  215. package/src/adapter-utils/format-compiler-log.ts +23 -15
  216. package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
  217. package/src/factories/bind-group-factory.ts +157 -0
  218. package/src/factories/core-module-state.ts +11 -0
  219. package/src/factories/pipeline-factory.ts +328 -0
  220. package/src/factories/shader-factory.ts +103 -0
  221. package/src/index.ts +70 -26
  222. package/src/portable/shader-block-writer.ts +254 -0
  223. package/src/portable/uniform-block.ts +1 -1
  224. package/src/portable/uniform-store.ts +98 -40
  225. package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
  226. package/src/shadertypes/data-types/data-types.ts +100 -48
  227. package/src/shadertypes/data-types/decode-data-types.ts +4 -3
  228. package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
  229. package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
  230. package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
  231. package/src/shadertypes/shader-types/shader-types.ts +207 -0
  232. package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
  233. package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +167 -46
  234. package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
  235. package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +12 -11
  236. package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
  237. package/src/shadertypes/texture-types/texture-layout.ts +60 -0
  238. package/src/shadertypes/vertex-types/vertex-format-decoder.ts +175 -0
  239. package/src/shadertypes/vertex-types/vertex-formats.ts +196 -0
  240. package/src/utils/array-equal.ts +21 -9
  241. package/src/utils/assert.ts +18 -0
  242. package/src/utils/stats-manager.ts +76 -2
  243. package/dist/image-utils/image-types.d.ts.map +0 -1
  244. package/dist/image-utils/image-types.js.map +0 -1
  245. package/dist/portable/uniform-buffer-layout.d.ts +0 -28
  246. package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
  247. package/dist/portable/uniform-buffer-layout.js +0 -96
  248. package/dist/portable/uniform-buffer-layout.js.map +0 -1
  249. package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
  250. package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
  251. package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
  252. package/dist/shadertypes/data-types/shader-types.d.ts +0 -45
  253. package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
  254. package/dist/shadertypes/data-types/shader-types.js.map +0 -1
  255. package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
  256. package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
  257. package/dist/shadertypes/textures/texture-format-decoder.d.ts +0 -18
  258. package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
  259. package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
  260. package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
  261. package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
  262. package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
  263. package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
  264. package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
  265. package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
  266. package/dist/shadertypes/textures/texture-formats.js.map +0 -1
  267. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
  268. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
  269. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
  270. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
  271. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
  272. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
  273. package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
  274. package/src/portable/uniform-buffer-layout.ts +0 -118
  275. package/src/shadertypes/data-types/shader-types.ts +0 -87
  276. package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
  277. package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
  278. /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
  279. /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
  280. /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
  281. /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
  282. /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
@@ -1,167 +1,11 @@
1
- import type { Device } from "./device.js";
2
- import type { Framebuffer } from "./resources/framebuffer.js";
3
- import type { TextureFormatDepthStencil } from "../shadertypes/textures/texture-formats.js";
4
- /** Properties for a CanvasContext */
5
- export type CanvasContextProps = {
6
- /** Identifier, for debugging */
7
- id?: string;
8
- /** If a canvas not supplied, one will be created and added to the DOM. If a string, a canvas with that id will be looked up in the DOM */
9
- canvas?: HTMLCanvasElement | OffscreenCanvas | string | null;
10
- /** If new canvas is created, it will be created in the specified container, otherwise is appended as a child of document.body */
11
- container?: HTMLElement | string | null;
12
- /** Width in pixels of the canvas - used when creating a new canvas */
13
- width?: number;
14
- /** Height in pixels of the canvas - used when creating a new canvas */
15
- height?: number;
16
- /** Visibility (only used if new canvas is created). */
17
- visible?: boolean;
18
- /** Whether to size the drawing buffer to the pixel size during auto resize. If a number is provided it is used as a static pixel ratio */
19
- useDevicePixels?: boolean | number;
20
- /** Whether to track window resizes. */
21
- autoResize?: boolean;
22
- /** @see https://developer.mozilla.org/en-US/docs/Web/API/GPUCanvasContext/configure#alphamode */
23
- alphaMode?: 'opaque' | 'premultiplied';
24
- /** @see https://developer.mozilla.org/en-US/docs/Web/API/GPUCanvasContext/configure#colorspace */
25
- colorSpace?: 'srgb';
26
- /** Whether to track position changes. Calls this.device.onPositionChange */
27
- trackPosition?: boolean;
28
- };
29
- export type MutableCanvasContextProps = {
30
- /** Whether to size the drawing buffer to the pixel size during auto resize. If a number is provided it is used as a static pixel ratio */
31
- useDevicePixels?: boolean | number;
32
- };
1
+ export type { CanvasContextProps, MutableCanvasContextProps } from "./canvas-surface.js";
2
+ import { CanvasSurface } from "./canvas-surface.js";
33
3
  /**
34
- * Manages a canvas. Supports both HTML or offscreen canvas
35
- * - Creates a new canvas or looks up a canvas from the DOM
36
- * - Provides check for DOM loaded
37
- * @todo commit() @see https://github.com/w3ctag/design-reviews/issues/288
38
- * @todo transferControlToOffscreen: @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/transferControlToOffscreen
4
+ * Manages a renderable backend canvas. Supports both HTML or offscreen canvas
5
+ * and returns backend framebuffers sourced from the canvas itself.
39
6
  */
40
- export declare abstract class CanvasContext {
41
- static isHTMLCanvas(canvas: unknown): canvas is HTMLCanvasElement;
42
- static isOffscreenCanvas(canvas: unknown): canvas is OffscreenCanvas;
43
- static defaultProps: Required<CanvasContextProps>;
44
- abstract readonly device: Device;
7
+ export declare abstract class CanvasContext extends CanvasSurface {
8
+ static defaultProps: Required<import("./canvas-surface").CanvasContextProps>;
45
9
  abstract readonly handle: unknown;
46
- readonly id: string;
47
- readonly props: Required<CanvasContextProps>;
48
- readonly canvas: HTMLCanvasElement | OffscreenCanvas;
49
- /** Handle to HTML canvas */
50
- readonly htmlCanvas?: HTMLCanvasElement;
51
- /** Handle to wrapped OffScreenCanvas */
52
- readonly offscreenCanvas?: OffscreenCanvas;
53
- readonly type: 'html-canvas' | 'offscreen-canvas' | 'node';
54
- /** Promise that resolved once the resize observer has updated the pixel size */
55
- initialized: Promise<void>;
56
- isInitialized: boolean;
57
- /** Visibility is automatically updated (via an IntersectionObserver) */
58
- isVisible: boolean;
59
- /** Width of canvas in CSS units (tracked by a ResizeObserver) */
60
- cssWidth: number;
61
- /** Height of canvas in CSS units (tracked by a ResizeObserver) */
62
- cssHeight: number;
63
- /** Device pixel ratio. Automatically updated via media queries */
64
- devicePixelRatio: number;
65
- /** Exact width of canvas in physical pixels (tracked by a ResizeObserver) */
66
- devicePixelWidth: number;
67
- /** Exact height of canvas in physical pixels (tracked by a ResizeObserver) */
68
- devicePixelHeight: number;
69
- /** Width of drawing buffer: automatically tracks this.pixelWidth if props.autoResize is true */
70
- drawingBufferWidth: number;
71
- /** Height of drawing buffer: automatically tracks this.pixelHeight if props.autoResize is true */
72
- drawingBufferHeight: number;
73
- protected _initializedResolvers: {
74
- promise: Promise<void>;
75
- resolve: (t: void) => void;
76
- reject: (error: Error) => void;
77
- };
78
- protected readonly _resizeObserver: ResizeObserver | undefined;
79
- protected readonly _intersectionObserver: IntersectionObserver | undefined;
80
- protected _position: [number, number];
81
- protected destroyed: boolean;
82
- abstract get [Symbol.toStringTag](): string;
83
- toString(): string;
84
- constructor(props?: CanvasContextProps);
85
- destroy(): void;
86
- setProps(props: MutableCanvasContextProps): this;
87
- /** Returns a framebuffer with properly resized current 'swap chain' textures */
88
- abstract getCurrentFramebuffer(options?: {
89
- depthStencilFormat?: TextureFormatDepthStencil | false;
90
- }): Framebuffer;
91
- /**
92
- * Returns the size covered by the canvas in CSS pixels
93
- * @note This can be different from the actual device pixel size of a canvas due to DPR scaling, and rounding to integer pixels
94
- * @note This is independent of the canvas' internal drawing buffer size (.width, .height).
95
- */
96
- getCSSSize(): [number, number];
97
- getPosition(): [number, number];
98
- /**
99
- * Returns the size covered by the canvas in actual device pixels.
100
- * @note This can be different from the 'CSS' size of a canvas due to DPR scaling, and rounding to integer pixels
101
- * @note This is independent of the canvas' internal drawing buffer size (.width, .height).
102
- */
103
- getDevicePixelSize(): [number, number];
104
- /** Get the drawing buffer size (number of pixels GPU is rendering into, can be different from CSS size) */
105
- getDrawingBufferSize(): [number, number];
106
- /** Returns the biggest allowed framebuffer size. @todo Allow the application to limit this? */
107
- getMaxDrawingBufferSize(): [number, number];
108
- /** Update the canvas drawing buffer size. Called automatically if props.autoResize is true. */
109
- setDrawingBufferSize(width: number, height: number): void;
110
- /**
111
- * Returns the current DPR (number of physical pixels per CSS pixel), if props.useDevicePixels is true
112
- * @note This can be a fractional (non-integer) number, e.g. when the user zooms in the browser.
113
- * @note This function handles the non-HTML canvas cases
114
- */
115
- getDevicePixelRatio(): number;
116
- /**
117
- * Maps CSS pixel position to device pixel position
118
- */
119
- cssToDevicePixels(cssPixel: [number, number], yInvert?: boolean): {
120
- x: number;
121
- y: number;
122
- width: number;
123
- height: number;
124
- };
125
- /** @deprecated - use .getDevicePixelSize() */
126
- getPixelSize(): [number, number];
127
- /** @deprecated - TODO which values should we use for aspect */
128
- getAspect(): number;
129
- /** @deprecated Returns multiplier need to convert CSS size to Device size */
130
- cssToDeviceRatio(): number;
131
- /** @deprecated Use canvasContext.setDrawingBufferSize() */
132
- resize(size: {
133
- width: number;
134
- height: number;
135
- }): void;
136
- /**
137
- * Performs platform specific updates (WebGPU vs WebGL)
138
- * Can be called after changes to size or props,
139
- * to give implementation an opportunity to update configurations.
140
- */
141
- protected abstract _updateDevice(): void;
142
- /**
143
- * Allows subclass constructor to override the canvas id for auto created canvases.
144
- * This can really help when debugging DOM in apps that create multiple devices
145
- */
146
- protected _setAutoCreatedCanvasId(id: string): void;
147
- /** reacts to an observed intersection */
148
- protected _handleIntersection(entries: IntersectionObserverEntry[]): void;
149
- /**
150
- * Reacts to an observed resize by using the most accurate pixel size information the browser can provide
151
- * @see https://web.dev/articles/device-pixel-content-box
152
- * @see https://webgpufundamentals.org/webgpu/lessons/webgpu-resizing-the-canvas.html
153
- */
154
- protected _handleResize(entries: ResizeObserverEntry[]): void;
155
- protected _updateDrawingBufferSize(): void;
156
- /** Monitor DPR changes */
157
- _observeDevicePixelRatio(): void;
158
- /** Start tracking positions with a timer */
159
- _trackPosition(intervalMs?: number): void;
160
- /**
161
- * Calculated the absolute position of the canvas
162
- * @note - getBoundingClientRect() is normally cheap but can be expensive
163
- * if called before browser has finished a reflow. Should not be the case here.
164
- */
165
- updatePosition(): void;
166
10
  }
167
11
  //# sourceMappingURL=canvas-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-context.d.ts","sourceRoot":"","sources":["../../src/adapter/canvas-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-context.d.ts","sourceRoot":"","sources":["../../src/adapter/canvas-context.ts"],"names":[],"mappings":"AAIA,YAAY,EAAC,kBAAkB,EAAE,yBAAyB,EAAC,4BAAyB;AACpF,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAE/C;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,aAAa;IACvD,OAAgB,YAAY,0DAA8B;IAE1D,kBAA2B,MAAM,EAAE,OAAO,CAAC;CAC5C"}
@@ -1,426 +1,12 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- import { isBrowser } from '@probe.gl/env';
5
- import { uid } from "../utils/uid.js";
6
- import { withResolvers } from "../utils/promise-utils.js";
4
+ import { CanvasSurface } from "./canvas-surface.js";
7
5
  /**
8
- * Manages a canvas. Supports both HTML or offscreen canvas
9
- * - Creates a new canvas or looks up a canvas from the DOM
10
- * - Provides check for DOM loaded
11
- * @todo commit() @see https://github.com/w3ctag/design-reviews/issues/288
12
- * @todo transferControlToOffscreen: @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/transferControlToOffscreen
6
+ * Manages a renderable backend canvas. Supports both HTML or offscreen canvas
7
+ * and returns backend framebuffers sourced from the canvas itself.
13
8
  */
14
- export class CanvasContext {
15
- static isHTMLCanvas(canvas) {
16
- return typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement;
17
- }
18
- static isOffscreenCanvas(canvas) {
19
- return typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas;
20
- }
21
- static defaultProps = {
22
- id: undefined,
23
- canvas: null,
24
- width: 800,
25
- height: 600,
26
- useDevicePixels: true,
27
- autoResize: true,
28
- container: null,
29
- visible: true,
30
- alphaMode: 'opaque',
31
- colorSpace: 'srgb',
32
- trackPosition: false
33
- };
34
- id;
35
- props;
36
- canvas;
37
- /** Handle to HTML canvas */
38
- htmlCanvas;
39
- /** Handle to wrapped OffScreenCanvas */
40
- offscreenCanvas;
41
- type;
42
- /** Promise that resolved once the resize observer has updated the pixel size */
43
- initialized;
44
- isInitialized = false;
45
- /** Visibility is automatically updated (via an IntersectionObserver) */
46
- isVisible = true;
47
- /** Width of canvas in CSS units (tracked by a ResizeObserver) */
48
- cssWidth;
49
- /** Height of canvas in CSS units (tracked by a ResizeObserver) */
50
- cssHeight;
51
- /** Device pixel ratio. Automatically updated via media queries */
52
- devicePixelRatio;
53
- /** Exact width of canvas in physical pixels (tracked by a ResizeObserver) */
54
- devicePixelWidth;
55
- /** Exact height of canvas in physical pixels (tracked by a ResizeObserver) */
56
- devicePixelHeight;
57
- /** Width of drawing buffer: automatically tracks this.pixelWidth if props.autoResize is true */
58
- drawingBufferWidth;
59
- /** Height of drawing buffer: automatically tracks this.pixelHeight if props.autoResize is true */
60
- drawingBufferHeight;
61
- _initializedResolvers = withResolvers();
62
- _resizeObserver;
63
- _intersectionObserver;
64
- _position;
65
- destroyed = false;
66
- toString() {
67
- return `${this[Symbol.toStringTag]}(${this.id})`;
68
- }
69
- constructor(props) {
70
- this.props = { ...CanvasContext.defaultProps, ...props };
71
- props = this.props;
72
- this.initialized = this._initializedResolvers.promise;
73
- // Create a canvas element if needed
74
- if (!isBrowser()) {
75
- // TODO - does this prevent app from using jsdom style polyfills?
76
- this.canvas = { width: props.width || 1, height: props.height || 1 };
77
- }
78
- else if (!props.canvas) {
79
- this.canvas = createCanvasElement(props);
80
- }
81
- else if (typeof props.canvas === 'string') {
82
- this.canvas = getCanvasFromDOM(props.canvas);
83
- }
84
- else {
85
- this.canvas = props.canvas;
86
- }
87
- if (CanvasContext.isHTMLCanvas(this.canvas)) {
88
- this.id = props.id || this.canvas.id;
89
- this.type = 'html-canvas';
90
- this.htmlCanvas = this.canvas;
91
- }
92
- else if (CanvasContext.isOffscreenCanvas(this.canvas)) {
93
- this.id = props.id || 'offscreen-canvas';
94
- this.type = 'offscreen-canvas';
95
- this.offscreenCanvas = this.canvas;
96
- }
97
- else {
98
- // TODO - Node.js support is currently untested (was used for headless-gl in luma v8)
99
- this.id = props.id || 'node-canvas-context';
100
- this.type = 'node';
101
- }
102
- // Initialize size variables to some sane values (these will be updated by ResizeObserver)
103
- this.cssWidth = this.htmlCanvas?.clientWidth || this.canvas.width;
104
- this.cssHeight = this.htmlCanvas?.clientHeight || this.canvas.height;
105
- this.devicePixelWidth = this.canvas.width;
106
- this.devicePixelHeight = this.canvas.height;
107
- this.drawingBufferWidth = this.canvas.width;
108
- this.drawingBufferHeight = this.canvas.height;
109
- this.devicePixelRatio = globalThis.devicePixelRatio || 1;
110
- this._position = [0, 0];
111
- if (CanvasContext.isHTMLCanvas(this.canvas)) {
112
- // Track visibility changes
113
- this._intersectionObserver = new IntersectionObserver(entries => this._handleIntersection(entries));
114
- this._intersectionObserver.observe(this.canvas);
115
- // Track size changes
116
- this._resizeObserver = new ResizeObserver(entries => this._handleResize(entries));
117
- try {
118
- this._resizeObserver.observe(this.canvas, { box: 'device-pixel-content-box' });
119
- }
120
- catch {
121
- // Safari fallback
122
- this._resizeObserver.observe(this.canvas, { box: 'content-box' });
123
- }
124
- // Track device pixel ratio changes.
125
- // Defer call to after construction completes to ensure `this.device` is available.
126
- setTimeout(() => this._observeDevicePixelRatio(), 0);
127
- // Track top/left position changes
128
- if (this.props.trackPosition) {
129
- this._trackPosition();
130
- }
131
- }
132
- }
133
- destroy() {
134
- this.destroyed = true;
135
- }
136
- setProps(props) {
137
- if ('useDevicePixels' in props) {
138
- this.props.useDevicePixels = props.useDevicePixels || false;
139
- this._updateDrawingBufferSize();
140
- }
141
- return this;
142
- }
143
- // SIZE METHODS
144
- /**
145
- * Returns the size covered by the canvas in CSS pixels
146
- * @note This can be different from the actual device pixel size of a canvas due to DPR scaling, and rounding to integer pixels
147
- * @note This is independent of the canvas' internal drawing buffer size (.width, .height).
148
- */
149
- getCSSSize() {
150
- return [this.cssWidth, this.cssHeight];
151
- }
152
- getPosition() {
153
- return this._position;
154
- }
155
- /**
156
- * Returns the size covered by the canvas in actual device pixels.
157
- * @note This can be different from the 'CSS' size of a canvas due to DPR scaling, and rounding to integer pixels
158
- * @note This is independent of the canvas' internal drawing buffer size (.width, .height).
159
- */
160
- getDevicePixelSize() {
161
- return [this.devicePixelWidth, this.devicePixelHeight];
162
- }
163
- /** Get the drawing buffer size (number of pixels GPU is rendering into, can be different from CSS size) */
164
- getDrawingBufferSize() {
165
- return [this.drawingBufferWidth, this.drawingBufferHeight];
166
- }
167
- /** Returns the biggest allowed framebuffer size. @todo Allow the application to limit this? */
168
- getMaxDrawingBufferSize() {
169
- const maxTextureDimension = this.device.limits.maxTextureDimension2D;
170
- return [maxTextureDimension, maxTextureDimension];
171
- }
172
- /** Update the canvas drawing buffer size. Called automatically if props.autoResize is true. */
173
- setDrawingBufferSize(width, height) {
174
- this.canvas.width = width;
175
- this.canvas.height = height;
176
- this.drawingBufferWidth = width;
177
- this.drawingBufferHeight = height;
178
- }
179
- /**
180
- * Returns the current DPR (number of physical pixels per CSS pixel), if props.useDevicePixels is true
181
- * @note This can be a fractional (non-integer) number, e.g. when the user zooms in the browser.
182
- * @note This function handles the non-HTML canvas cases
183
- */
184
- getDevicePixelRatio() {
185
- const dpr = typeof window !== 'undefined' && window.devicePixelRatio;
186
- return dpr || 1;
187
- }
188
- // DEPRECATED METHODS
189
- /**
190
- * Maps CSS pixel position to device pixel position
191
- */
192
- cssToDevicePixels(cssPixel, yInvert = true) {
193
- const ratio = this.cssToDeviceRatio();
194
- const [width, height] = this.getDrawingBufferSize();
195
- return scalePixels(cssPixel, ratio, width, height, yInvert);
196
- }
197
- /** @deprecated - use .getDevicePixelSize() */
198
- getPixelSize() {
199
- return this.getDevicePixelSize();
200
- }
201
- /** @deprecated - TODO which values should we use for aspect */
202
- getAspect() {
203
- const [width, height] = this.getDevicePixelSize();
204
- return width / height;
205
- }
206
- /** @deprecated Returns multiplier need to convert CSS size to Device size */
207
- cssToDeviceRatio() {
208
- try {
209
- const [drawingBufferWidth] = this.getDrawingBufferSize();
210
- const [cssWidth] = this.getCSSSize();
211
- return cssWidth ? drawingBufferWidth / cssWidth : 1;
212
- }
213
- catch {
214
- return 1;
215
- }
216
- }
217
- /** @deprecated Use canvasContext.setDrawingBufferSize() */
218
- resize(size) {
219
- this.setDrawingBufferSize(size.width, size.height);
220
- }
221
- // IMPLEMENTATION
222
- /**
223
- * Allows subclass constructor to override the canvas id for auto created canvases.
224
- * This can really help when debugging DOM in apps that create multiple devices
225
- */
226
- _setAutoCreatedCanvasId(id) {
227
- if (this.htmlCanvas?.id === 'lumagl-auto-created-canvas') {
228
- this.htmlCanvas.id = id;
229
- }
230
- }
231
- /** reacts to an observed intersection */
232
- _handleIntersection(entries) {
233
- const entry = entries.find(entry_ => entry_.target === this.canvas);
234
- if (!entry) {
235
- return;
236
- }
237
- // TODO - store intersection rectangle?
238
- const isVisible = entry.isIntersecting;
239
- if (this.isVisible !== isVisible) {
240
- this.isVisible = isVisible;
241
- this.device.props.onVisibilityChange(this);
242
- }
243
- }
244
- /**
245
- * Reacts to an observed resize by using the most accurate pixel size information the browser can provide
246
- * @see https://web.dev/articles/device-pixel-content-box
247
- * @see https://webgpufundamentals.org/webgpu/lessons/webgpu-resizing-the-canvas.html
248
- */
249
- _handleResize(entries) {
250
- const entry = entries.find(entry_ => entry_.target === this.canvas);
251
- if (!entry) {
252
- return;
253
- }
254
- // Update CSS size using content box size
255
- this.cssWidth = entry.contentBoxSize[0].inlineSize;
256
- this.cssHeight = entry.contentBoxSize[0].blockSize;
257
- // Update our drawing buffer size variables, saving the old values for logging
258
- const oldPixelSize = this.getDevicePixelSize();
259
- // Use the most accurate drawing buffer size information the current browser can provide
260
- // Note: content box sizes are guaranteed to be integers
261
- // Note: Safari falls back to contentBoxSize
262
- const devicePixelWidth = entry.devicePixelContentBoxSize?.[0].inlineSize ||
263
- entry.contentBoxSize[0].inlineSize * devicePixelRatio;
264
- const devicePixelHeight = entry.devicePixelContentBoxSize?.[0].blockSize ||
265
- entry.contentBoxSize[0].blockSize * devicePixelRatio;
266
- // Make sure we don't overflow the maximum supported texture size
267
- const [maxDevicePixelWidth, maxDevicePixelHeight] = this.getMaxDrawingBufferSize();
268
- this.devicePixelWidth = Math.max(1, Math.min(devicePixelWidth, maxDevicePixelWidth));
269
- this.devicePixelHeight = Math.max(1, Math.min(devicePixelHeight, maxDevicePixelHeight));
270
- this._updateDrawingBufferSize();
271
- // Inform the device
272
- this.device.props.onResize(this, { oldPixelSize });
273
- }
274
- _updateDrawingBufferSize() {
275
- // Update the canvas drawing buffer size
276
- if (this.props.autoResize) {
277
- if (typeof this.props.useDevicePixels === 'number') {
278
- const dpr = this.props.useDevicePixels;
279
- this.setDrawingBufferSize(this.cssWidth * dpr, this.cssHeight * dpr);
280
- }
281
- else if (this.props.useDevicePixels) {
282
- this.setDrawingBufferSize(this.devicePixelWidth, this.devicePixelHeight);
283
- }
284
- else {
285
- this.setDrawingBufferSize(this.cssWidth, this.cssHeight);
286
- }
287
- // Inform the subclass
288
- this._updateDevice();
289
- }
290
- // Resolve the initialized promise
291
- this._initializedResolvers.resolve();
292
- this.isInitialized = true;
293
- this.updatePosition();
294
- }
295
- /** Monitor DPR changes */
296
- _observeDevicePixelRatio() {
297
- const oldRatio = this.devicePixelRatio;
298
- this.devicePixelRatio = window.devicePixelRatio;
299
- this.updatePosition();
300
- // Inform the device
301
- this.device.props.onDevicePixelRatioChange(this, { oldRatio });
302
- // Set up a one time query against the current resolution.
303
- matchMedia(`(resolution: ${this.devicePixelRatio}dppx)`).addEventListener('change', () => this._observeDevicePixelRatio(), { once: true });
304
- }
305
- /** Start tracking positions with a timer */
306
- _trackPosition(intervalMs = 100) {
307
- const intervalId = setInterval(() => {
308
- if (this.destroyed) {
309
- clearInterval(intervalId);
310
- }
311
- else {
312
- this.updatePosition();
313
- }
314
- }, intervalMs);
315
- }
316
- /**
317
- * Calculated the absolute position of the canvas
318
- * @note - getBoundingClientRect() is normally cheap but can be expensive
319
- * if called before browser has finished a reflow. Should not be the case here.
320
- */
321
- updatePosition() {
322
- const newRect = this.htmlCanvas?.getBoundingClientRect();
323
- if (newRect) {
324
- // We only track position since we rely on the more precise ResizeObserver for size
325
- const position = [newRect.left, newRect.top];
326
- this._position ??= position;
327
- const positionChanged = position[0] !== this._position[0] || position[1] !== this._position[1];
328
- if (positionChanged) {
329
- const oldPosition = this._position;
330
- this._position = position;
331
- this.device.props.onPositionChange?.(this, { oldPosition });
332
- }
333
- }
334
- }
335
- }
336
- // HELPER FUNCTIONS
337
- /** Get a container element from a string or DOM element */
338
- function getContainer(container) {
339
- if (typeof container === 'string') {
340
- const element = document.getElementById(container);
341
- if (!element) {
342
- throw new Error(`${container} is not an HTML element`);
343
- }
344
- return element;
345
- }
346
- if (container) {
347
- return container;
348
- }
349
- return document.body;
350
- }
351
- /** Get a Canvas element from DOM id */
352
- function getCanvasFromDOM(canvasId) {
353
- const canvas = document.getElementById(canvasId);
354
- if (!CanvasContext.isHTMLCanvas(canvas)) {
355
- throw new Error('Object is not a canvas element');
356
- }
357
- return canvas;
358
- }
359
- /** Create a new canvas */
360
- function createCanvasElement(props) {
361
- const { width, height } = props;
362
- const newCanvas = document.createElement('canvas');
363
- newCanvas.id = uid('lumagl-auto-created-canvas');
364
- newCanvas.width = width || 1;
365
- newCanvas.height = height || 1;
366
- newCanvas.style.width = Number.isFinite(width) ? `${width}px` : '100%';
367
- newCanvas.style.height = Number.isFinite(height) ? `${height}px` : '100%';
368
- if (!props?.visible) {
369
- newCanvas.style.visibility = 'hidden';
370
- }
371
- // Insert the canvas in the DOM
372
- const container = getContainer(props?.container || null);
373
- container.insertBefore(newCanvas, container.firstChild);
374
- return newCanvas;
375
- }
376
- /**
377
- * Scales pixels linearly, handles edge cases
378
- * @param pixel
379
- * @param ratio
380
- * @param width
381
- * @param height
382
- * @param yInvert
383
- * @returns
384
- */
385
- function scalePixels(pixel, ratio, width, height, yInvert) {
386
- const point = pixel;
387
- const x = scaleX(point[0], ratio, width);
388
- let y = scaleY(point[1], ratio, height, yInvert);
389
- // Find boundaries of next pixel to provide valid range of device pixel locations
390
- let t = scaleX(point[0] + 1, ratio, width);
391
- // If next pixel's position is clamped to boundary, use it as is, otherwise subtract 1 for current pixel boundary
392
- const xHigh = t === width - 1 ? t : t - 1;
393
- t = scaleY(point[1] + 1, ratio, height, yInvert);
394
- let yHigh;
395
- if (yInvert) {
396
- // If next pixel's position is clamped to boundary, use it as is, otherwise clamp it to valid range
397
- t = t === 0 ? t : t + 1;
398
- // swap y and yHigh
399
- yHigh = y;
400
- y = t;
401
- }
402
- else {
403
- // If next pixel's position is clamped to boundary, use it as is, otherwise clamp it to valid range
404
- yHigh = t === height - 1 ? t : t - 1;
405
- // y remains same
406
- }
407
- return {
408
- x,
409
- y,
410
- // when ratio < 1, current css pixel and next css pixel may point to same device pixel, set width/height to 1 in those cases.
411
- width: Math.max(xHigh - x + 1, 1),
412
- height: Math.max(yHigh - y + 1, 1)
413
- };
414
- }
415
- function scaleX(x, ratio, width) {
416
- // since we are rounding to nearest, when ratio > 1, edge pixels may point to out of bounds value, clamp to the limit
417
- const r = Math.min(Math.round(x * ratio), width - 1);
418
- return r;
419
- }
420
- function scaleY(y, ratio, height, yInvert) {
421
- // since we are rounding to nearest, when ratio > 1, edge pixels may point to out of bounds value, clamp to the limit
422
- return yInvert
423
- ? Math.max(0, height - 1 - Math.round(y * ratio))
424
- : Math.min(Math.round(y * ratio), height - 1);
9
+ export class CanvasContext extends CanvasSurface {
10
+ static defaultProps = CanvasSurface.defaultProps;
425
11
  }
426
12
  //# sourceMappingURL=canvas-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-context.js","sourceRoot":"","sources":["../../src/adapter/canvas-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-context.js","sourceRoot":"","sources":["../../src/adapter/canvas-context.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAE/C;;;GAGG;AACH,MAAM,OAAgB,aAAc,SAAQ,aAAa;IACvD,MAAM,CAAU,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC"}