@flighthq/surface 0.3.0-next.906.07cea63 → 0.5.1-edge.1467.7e2fc7d

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 (236) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +17 -0
  3. package/dist/canvasSurface.d.ts +5 -0
  4. package/dist/canvasSurface.d.ts.map +1 -0
  5. package/dist/canvasSurface.js +24 -0
  6. package/dist/canvasSurface.js.map +1 -0
  7. package/dist/contract.d.ts +4 -40
  8. package/dist/contract.d.ts.map +1 -1
  9. package/dist/contract.js +4 -40
  10. package/dist/contract.js.map +1 -1
  11. package/dist/glSurface.d.ts +5 -0
  12. package/dist/glSurface.d.ts.map +1 -0
  13. package/dist/glSurface.js +29 -0
  14. package/dist/glSurface.js.map +1 -0
  15. package/dist/index.d.ts +4 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +4 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/surface.d.ts +4 -15
  20. package/dist/surface.d.ts.map +1 -1
  21. package/dist/surface.js +18 -82
  22. package/dist/surface.js.map +1 -1
  23. package/dist/surfaceDisplay.d.ts +4 -0
  24. package/dist/surfaceDisplay.d.ts.map +1 -0
  25. package/dist/surfaceDisplay.js +11 -0
  26. package/dist/surfaceDisplay.js.map +1 -0
  27. package/dist/wgpuSurface.d.ts +5 -0
  28. package/dist/wgpuSurface.d.ts.map +1 -0
  29. package/dist/wgpuSurface.js +30 -0
  30. package/dist/wgpuSurface.js.map +1 -0
  31. package/package.json +6 -5
  32. package/src/canvasSurface.test.ts +68 -0
  33. package/src/glSurface.test.ts +99 -0
  34. package/src/surface.test.ts +32 -63
  35. package/src/surfaceDisplay.test.ts +45 -0
  36. package/src/wgpuSurface.test.ts +74 -0
  37. package/dist/surfaceAffine.d.ts +0 -27
  38. package/dist/surfaceAffine.d.ts.map +0 -1
  39. package/dist/surfaceAffine.js +0 -159
  40. package/dist/surfaceAffine.js.map +0 -1
  41. package/dist/surfaceAlpha.d.ts +0 -27
  42. package/dist/surfaceAlpha.d.ts.map +0 -1
  43. package/dist/surfaceAlpha.js +0 -83
  44. package/dist/surfaceAlpha.js.map +0 -1
  45. package/dist/surfaceBevel.d.ts +0 -24
  46. package/dist/surfaceBevel.d.ts.map +0 -1
  47. package/dist/surfaceBevel.js +0 -102
  48. package/dist/surfaceBevel.js.map +0 -1
  49. package/dist/surfaceBlur.d.ts +0 -57
  50. package/dist/surfaceBlur.d.ts.map +0 -1
  51. package/dist/surfaceBlur.js +0 -263
  52. package/dist/surfaceBlur.js.map +0 -1
  53. package/dist/surfaceChannel.d.ts +0 -24
  54. package/dist/surfaceChannel.d.ts.map +0 -1
  55. package/dist/surfaceChannel.js +0 -127
  56. package/dist/surfaceChannel.js.map +0 -1
  57. package/dist/surfaceColorMatrix.d.ts +0 -57
  58. package/dist/surfaceColorMatrix.d.ts.map +0 -1
  59. package/dist/surfaceColorMatrix.js +0 -127
  60. package/dist/surfaceColorMatrix.js.map +0 -1
  61. package/dist/surfaceCompare.d.ts +0 -18
  62. package/dist/surfaceCompare.d.ts.map +0 -1
  63. package/dist/surfaceCompare.js +0 -64
  64. package/dist/surfaceCompare.js.map +0 -1
  65. package/dist/surfaceComposite.d.ts +0 -54
  66. package/dist/surfaceComposite.d.ts.map +0 -1
  67. package/dist/surfaceComposite.js +0 -262
  68. package/dist/surfaceComposite.js.map +0 -1
  69. package/dist/surfaceConvolution.d.ts +0 -17
  70. package/dist/surfaceConvolution.d.ts.map +0 -1
  71. package/dist/surfaceConvolution.js +0 -103
  72. package/dist/surfaceConvolution.js.map +0 -1
  73. package/dist/surfaceCopy.d.ts +0 -23
  74. package/dist/surfaceCopy.d.ts.map +0 -1
  75. package/dist/surfaceCopy.js +0 -78
  76. package/dist/surfaceCopy.js.map +0 -1
  77. package/dist/surfaceCoverage.d.ts +0 -11
  78. package/dist/surfaceCoverage.d.ts.map +0 -1
  79. package/dist/surfaceCoverage.js +0 -29
  80. package/dist/surfaceCoverage.js.map +0 -1
  81. package/dist/surfaceCrop.d.ts +0 -33
  82. package/dist/surfaceCrop.d.ts.map +0 -1
  83. package/dist/surfaceCrop.js +0 -177
  84. package/dist/surfaceCrop.js.map +0 -1
  85. package/dist/surfaceDisplacement.d.ts +0 -22
  86. package/dist/surfaceDisplacement.d.ts.map +0 -1
  87. package/dist/surfaceDisplacement.js +0 -131
  88. package/dist/surfaceDisplacement.js.map +0 -1
  89. package/dist/surfaceDissolve.d.ts +0 -21
  90. package/dist/surfaceDissolve.d.ts.map +0 -1
  91. package/dist/surfaceDissolve.js +0 -97
  92. package/dist/surfaceDissolve.js.map +0 -1
  93. package/dist/surfaceDraw.d.ts +0 -8
  94. package/dist/surfaceDraw.d.ts.map +0 -1
  95. package/dist/surfaceDraw.js +0 -14
  96. package/dist/surfaceDraw.js.map +0 -1
  97. package/dist/surfaceEncode.d.ts +0 -3
  98. package/dist/surfaceEncode.d.ts.map +0 -1
  99. package/dist/surfaceEncode.js +0 -18
  100. package/dist/surfaceEncode.js.map +0 -1
  101. package/dist/surfaceFill.d.ts +0 -12
  102. package/dist/surfaceFill.d.ts.map +0 -1
  103. package/dist/surfaceFill.js +0 -85
  104. package/dist/surfaceFill.js.map +0 -1
  105. package/dist/surfaceFingerprint.d.ts +0 -26
  106. package/dist/surfaceFingerprint.d.ts.map +0 -1
  107. package/dist/surfaceFingerprint.js +0 -99
  108. package/dist/surfaceFingerprint.js.map +0 -1
  109. package/dist/surfaceFlip.d.ts +0 -16
  110. package/dist/surfaceFlip.d.ts.map +0 -1
  111. package/dist/surfaceFlip.js +0 -98
  112. package/dist/surfaceFlip.js.map +0 -1
  113. package/dist/surfaceFormat.d.ts +0 -26
  114. package/dist/surfaceFormat.d.ts.map +0 -1
  115. package/dist/surfaceFormat.js +0 -80
  116. package/dist/surfaceFormat.js.map +0 -1
  117. package/dist/surfaceFrom.d.ts +0 -14
  118. package/dist/surfaceFrom.d.ts.map +0 -1
  119. package/dist/surfaceFrom.js +0 -91
  120. package/dist/surfaceFrom.js.map +0 -1
  121. package/dist/surfaceGradient.d.ts +0 -36
  122. package/dist/surfaceGradient.d.ts.map +0 -1
  123. package/dist/surfaceGradient.js +0 -176
  124. package/dist/surfaceGradient.js.map +0 -1
  125. package/dist/surfaceGradientFill.d.ts +0 -32
  126. package/dist/surfaceGradientFill.d.ts.map +0 -1
  127. package/dist/surfaceGradientFill.js +0 -120
  128. package/dist/surfaceGradientFill.js.map +0 -1
  129. package/dist/surfaceHistogram.d.ts +0 -20
  130. package/dist/surfaceHistogram.d.ts.map +0 -1
  131. package/dist/surfaceHistogram.js +0 -61
  132. package/dist/surfaceHistogram.js.map +0 -1
  133. package/dist/surfaceImageChannel.d.ts +0 -2
  134. package/dist/surfaceImageChannel.d.ts.map +0 -1
  135. package/dist/surfaceImageChannel.js +0 -2
  136. package/dist/surfaceImageChannel.js.map +0 -1
  137. package/dist/surfaceMedian.d.ts +0 -14
  138. package/dist/surfaceMedian.d.ts.map +0 -1
  139. package/dist/surfaceMedian.js +0 -77
  140. package/dist/surfaceMedian.js.map +0 -1
  141. package/dist/surfaceMorphological.d.ts +0 -29
  142. package/dist/surfaceMorphological.d.ts.map +0 -1
  143. package/dist/surfaceMorphological.js +0 -81
  144. package/dist/surfaceMorphological.js.map +0 -1
  145. package/dist/surfaceNoise.d.ts +0 -48
  146. package/dist/surfaceNoise.d.ts.map +0 -1
  147. package/dist/surfaceNoise.js +0 -245
  148. package/dist/surfaceNoise.js.map +0 -1
  149. package/dist/surfacePaletteMap.d.ts +0 -17
  150. package/dist/surfacePaletteMap.d.ts.map +0 -1
  151. package/dist/surfacePaletteMap.js +0 -45
  152. package/dist/surfacePaletteMap.js.map +0 -1
  153. package/dist/surfacePixel.d.ts +0 -9
  154. package/dist/surfacePixel.d.ts.map +0 -1
  155. package/dist/surfacePixel.js +0 -36
  156. package/dist/surfacePixel.js.map +0 -1
  157. package/dist/surfacePixelate.d.ts +0 -13
  158. package/dist/surfacePixelate.d.ts.map +0 -1
  159. package/dist/surfacePixelate.js +0 -61
  160. package/dist/surfacePixelate.js.map +0 -1
  161. package/dist/surfaceQuery.d.ts +0 -13
  162. package/dist/surfaceQuery.d.ts.map +0 -1
  163. package/dist/surfaceQuery.js +0 -46
  164. package/dist/surfaceQuery.js.map +0 -1
  165. package/dist/surfaceRegion.d.ts +0 -20
  166. package/dist/surfaceRegion.d.ts.map +0 -1
  167. package/dist/surfaceRegion.js +0 -28
  168. package/dist/surfaceRegion.js.map +0 -1
  169. package/dist/surfaceResize.d.ts +0 -17
  170. package/dist/surfaceResize.d.ts.map +0 -1
  171. package/dist/surfaceResize.js +0 -191
  172. package/dist/surfaceResize.js.map +0 -1
  173. package/dist/surfaceRotate.d.ts +0 -32
  174. package/dist/surfaceRotate.d.ts.map +0 -1
  175. package/dist/surfaceRotate.js +0 -143
  176. package/dist/surfaceRotate.js.map +0 -1
  177. package/dist/surfaceShadow.d.ts +0 -72
  178. package/dist/surfaceShadow.d.ts.map +0 -1
  179. package/dist/surfaceShadow.js +0 -175
  180. package/dist/surfaceShadow.js.map +0 -1
  181. package/dist/surfaceSharpen.d.ts +0 -16
  182. package/dist/surfaceSharpen.d.ts.map +0 -1
  183. package/dist/surfaceSharpen.js +0 -47
  184. package/dist/surfaceSharpen.js.map +0 -1
  185. package/dist/surfaceTone.d.ts +0 -28
  186. package/dist/surfaceTone.d.ts.map +0 -1
  187. package/dist/surfaceTone.js +0 -69
  188. package/dist/surfaceTone.js.map +0 -1
  189. package/dist/surfaceTransform.d.ts +0 -40
  190. package/dist/surfaceTransform.d.ts.map +0 -1
  191. package/dist/surfaceTransform.js +0 -163
  192. package/dist/surfaceTransform.js.map +0 -1
  193. package/dist/surfaceWarp.d.ts +0 -48
  194. package/dist/surfaceWarp.d.ts.map +0 -1
  195. package/dist/surfaceWarp.js +0 -284
  196. package/dist/surfaceWarp.js.map +0 -1
  197. package/src/surfaceAffine.test.ts +0 -98
  198. package/src/surfaceAlpha.test.ts +0 -113
  199. package/src/surfaceBevel.test.ts +0 -67
  200. package/src/surfaceBlur.test.ts +0 -240
  201. package/src/surfaceChannel.test.ts +0 -97
  202. package/src/surfaceColorMatrix.test.ts +0 -220
  203. package/src/surfaceCompare.test.ts +0 -92
  204. package/src/surfaceComposite.test.ts +0 -265
  205. package/src/surfaceConvolution.test.ts +0 -136
  206. package/src/surfaceCopy.test.ts +0 -54
  207. package/src/surfaceCoverage.test.ts +0 -39
  208. package/src/surfaceCrop.test.ts +0 -116
  209. package/src/surfaceDisplacement.test.ts +0 -142
  210. package/src/surfaceDissolve.test.ts +0 -99
  211. package/src/surfaceDraw.test.ts +0 -74
  212. package/src/surfaceEncode.test.ts +0 -18
  213. package/src/surfaceFill.test.ts +0 -89
  214. package/src/surfaceFingerprint.test.ts +0 -103
  215. package/src/surfaceFlip.test.ts +0 -59
  216. package/src/surfaceFormat.test.ts +0 -124
  217. package/src/surfaceFrom.test.ts +0 -62
  218. package/src/surfaceGradient.test.ts +0 -91
  219. package/src/surfaceGradientFill.test.ts +0 -107
  220. package/src/surfaceHistogram.test.ts +0 -70
  221. package/src/surfaceImageChannel.test.ts +0 -19
  222. package/src/surfaceMedian.test.ts +0 -45
  223. package/src/surfaceMorphological.test.ts +0 -75
  224. package/src/surfaceNoise.test.ts +0 -169
  225. package/src/surfacePaletteMap.test.ts +0 -55
  226. package/src/surfacePixel.test.ts +0 -117
  227. package/src/surfacePixelate.test.ts +0 -46
  228. package/src/surfaceQuery.test.ts +0 -48
  229. package/src/surfaceRegion.test.ts +0 -34
  230. package/src/surfaceResize.test.ts +0 -112
  231. package/src/surfaceRotate.test.ts +0 -119
  232. package/src/surfaceShadow.test.ts +0 -165
  233. package/src/surfaceSharpen.test.ts +0 -50
  234. package/src/surfaceTone.test.ts +0 -104
  235. package/src/surfaceTransform.test.ts +0 -134
  236. package/src/surfaceWarp.test.ts +0 -124
package/LICENSE.md ADDED
@@ -0,0 +1,9 @@
1
+ # MIT License
2
+
3
+ Copyright (c) 2013-2026 Joshua Granick and other contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ # @flighthq/surface
2
+
3
+ Surface allocation, ownership tracking, and lifecycle
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install @flighthq/surface
9
+ ```
10
+
11
+ Import the supported application-facing API from `@flighthq/surface`. The `@flighthq/surface/contract` export is the wider package-to-package contract used to compose Flight itself.
12
+
13
+ This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
+
15
+ - [Flight project](https://github.com/flighthq/flight)
16
+ - [Source for @flighthq/surface@0.5.1-edge.1467.7e2fc7d](https://github.com/flighthq/flight/tree/7e2fc7df5378313ceaf21ba8d6ef39cc18a6f4ad/packages/surface)
17
+ - [License](https://github.com/flighthq/flight/blob/7e2fc7df5378313ceaf21ba8d6ef39cc18a6f4ad/LICENSE.md)
@@ -0,0 +1,5 @@
1
+ import type { AppWindow, CanvasSurface, HostCanvasCapability, NativeSurfaceHandle } from '@flighthq/types/contract';
2
+ export declare function createCanvasSurface(capability: Readonly<HostCanvasCapability>, window: Readonly<AppWindow>, width: number, height: number, options?: Readonly<CanvasRenderingContext2DSettings>): CanvasSurface | null;
3
+ export declare function createCanvasSurfaceFromNativeHandle(capability: Readonly<HostCanvasCapability>, handle: NativeSurfaceHandle, options?: Readonly<CanvasRenderingContext2DSettings>): CanvasSurface | null;
4
+ export declare function destroyCanvasSurface(capability: Readonly<HostCanvasCapability>, surface: Readonly<CanvasSurface>): void;
5
+ //# sourceMappingURL=canvasSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSurface.d.ts","sourceRoot":"","sources":["../src/canvasSurface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EAEb,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAC1C,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,CAAC,gCAAgC,CAAC,GACnD,aAAa,GAAG,IAAI,CAItB;AAGD,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAC1C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,gCAAgC,CAAC,GACnD,aAAa,GAAG,IAAI,CAOtB;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAC1C,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC/B,IAAI,CAEN"}
@@ -0,0 +1,24 @@
1
+ import { finishEntity } from '@flighthq/entity/contract';
2
+ import { allocateSurface } from './surface';
3
+ // Allocates a drawable in the given window, sized in device pixels, and acquires a 2D context on it.
4
+ // Returns null when the host cannot rasterize 2D on it.
5
+ export function createCanvasSurface(capability, window, width, height, options) {
6
+ const handle = capability.create(window, width, height, options);
7
+ if (handle === null)
8
+ return null;
9
+ return createCanvasSurfaceFromNativeHandle(capability, handle, options);
10
+ }
11
+ // Acquires a 2D context on a drawable the caller already owns. The caller keeps ownership of it.
12
+ export function createCanvasSurfaceFromNativeHandle(capability, handle, options) {
13
+ const surface = allocateSurface(handle);
14
+ surface.__brand = 'CanvasSurface';
15
+ const context = capability.acquire(surface, options);
16
+ if (context === null)
17
+ return null;
18
+ surface.context = context;
19
+ return finishEntity(surface);
20
+ }
21
+ export function destroyCanvasSurface(capability, surface) {
22
+ capability.release(surface);
23
+ }
24
+ //# sourceMappingURL=canvasSurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasSurface.js","sourceRoot":"","sources":["../src/canvasSurface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AASzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qGAAqG;AACrG,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,CACjC,UAA0C,EAC1C,MAA2B,EAC3B,KAAa,EACb,MAAc,EACd,OAAoD;IAEpD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,mCAAmC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,mCAAmC,CACjD,UAA0C,EAC1C,MAA2B,EAC3B,OAAoD;IAEpD,MAAM,OAAO,GAAG,eAAe,CAAgB,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,OAAO,GAAG,eAAwB,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAwB,EAAE,OAAO,CAAC,CAAC;IACtE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAA6C,CAAC,OAAO,GAAG,OAAO,CAAC;IACjE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAA0C,EAC1C,OAAgC;IAEhC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
@@ -1,42 +1,6 @@
1
+ export * from './canvasSurface';
2
+ export * from './glSurface';
1
3
  export * from './surface';
2
- export * from './surfaceAffine';
3
- export * from './surfaceAlpha';
4
- export * from './surfaceBevel';
5
- export * from './surfaceBlur';
6
- export * from './surfaceChannel';
7
- export * from './surfaceColorMatrix';
8
- export * from './surfaceCompare';
9
- export * from './surfaceComposite';
10
- export * from './surfaceConvolution';
11
- export * from './surfaceCopy';
12
- export * from './surfaceCoverage';
13
- export * from './surfaceCrop';
14
- export * from './surfaceDisplacement';
15
- export * from './surfaceDissolve';
16
- export * from './surfaceDraw';
17
- export * from './surfaceEncode';
18
- export * from './surfaceFill';
19
- export * from './surfaceFingerprint';
20
- export * from './surfaceFlip';
21
- export * from './surfaceFormat';
22
- export * from './surfaceFrom';
23
- export * from './surfaceGradient';
24
- export * from './surfaceGradientFill';
25
- export * from './surfaceHistogram';
26
- export * from './surfaceImageChannel';
27
- export * from './surfaceMedian';
28
- export * from './surfaceMorphological';
29
- export * from './surfaceNoise';
30
- export * from './surfacePaletteMap';
31
- export * from './surfacePixel';
32
- export * from './surfacePixelate';
33
- export * from './surfaceQuery';
34
- export * from './surfaceRegion';
35
- export * from './surfaceResize';
36
- export * from './surfaceRotate';
37
- export * from './surfaceShadow';
38
- export * from './surfaceSharpen';
39
- export * from './surfaceTone';
40
- export * from './surfaceTransform';
41
- export * from './surfaceWarp';
4
+ export * from './surfaceDisplay';
5
+ export * from './wgpuSurface';
42
6
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
package/dist/contract.js CHANGED
@@ -1,42 +1,6 @@
1
+ export * from './canvasSurface';
2
+ export * from './glSurface';
1
3
  export * from './surface';
2
- export * from './surfaceAffine';
3
- export * from './surfaceAlpha';
4
- export * from './surfaceBevel';
5
- export * from './surfaceBlur';
6
- export * from './surfaceChannel';
7
- export * from './surfaceColorMatrix';
8
- export * from './surfaceCompare';
9
- export * from './surfaceComposite';
10
- export * from './surfaceConvolution';
11
- export * from './surfaceCopy';
12
- export * from './surfaceCoverage';
13
- export * from './surfaceCrop';
14
- export * from './surfaceDisplacement';
15
- export * from './surfaceDissolve';
16
- export * from './surfaceDraw';
17
- export * from './surfaceEncode';
18
- export * from './surfaceFill';
19
- export * from './surfaceFingerprint';
20
- export * from './surfaceFlip';
21
- export * from './surfaceFormat';
22
- export * from './surfaceFrom';
23
- export * from './surfaceGradient';
24
- export * from './surfaceGradientFill';
25
- export * from './surfaceHistogram';
26
- export * from './surfaceImageChannel';
27
- export * from './surfaceMedian';
28
- export * from './surfaceMorphological';
29
- export * from './surfaceNoise';
30
- export * from './surfacePaletteMap';
31
- export * from './surfacePixel';
32
- export * from './surfacePixelate';
33
- export * from './surfaceQuery';
34
- export * from './surfaceRegion';
35
- export * from './surfaceResize';
36
- export * from './surfaceRotate';
37
- export * from './surfaceShadow';
38
- export * from './surfaceSharpen';
39
- export * from './surfaceTone';
40
- export * from './surfaceTransform';
41
- export * from './surfaceWarp';
4
+ export * from './surfaceDisplay';
5
+ export * from './wgpuSurface';
42
6
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AppWindow, GlContextOptions, GlSurface, HostGlCapability, NativeSurfaceHandle } from '@flighthq/types/contract';
2
+ export declare function createGlSurface(capability: Readonly<HostGlCapability>, window: Readonly<AppWindow>, width: number, height: number, options?: Readonly<GlContextOptions>): GlSurface | null;
3
+ export declare function createGlSurfaceFromNativeHandle(capability: Readonly<HostGlCapability>, handle: NativeSurfaceHandle, options?: Readonly<GlContextOptions>): GlSurface | null;
4
+ export declare function destroyGlSurface(capability: Readonly<HostGlCapability>, surface: Readonly<GlSurface>): void;
5
+ //# sourceMappingURL=glSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glSurface.d.ts","sourceRoot":"","sources":["../src/glSurface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EAET,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,eAAe,CAC7B,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACtC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACnC,SAAS,GAAG,IAAI,CAIlB;AAID,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACtC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACnC,SAAS,GAAG,IAAI,CASlB;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAE3G"}
@@ -0,0 +1,29 @@
1
+ import { finishEntity } from '@flighthq/entity/contract';
2
+ import { allocateSurface } from './surface';
3
+ // Allocates a drawable in the given window, sized in device pixels, and acquires a GL context on it. The
4
+ // window is what the host needs to make a drawable at all — the document on web, the SDL_Window on SDL —
5
+ // and is not retained: a surface is not one-to-one with a window, and welding one on would assert that it
6
+ // is. Returns null when the host cannot allocate a drawable or the driver refuses a context.
7
+ export function createGlSurface(capability, window, width, height, options) {
8
+ const handle = capability.create(window, width, height, options);
9
+ if (handle === null)
10
+ return null;
11
+ return createGlSurfaceFromNativeHandle(capability, handle, options);
12
+ }
13
+ // Acquires a GL context on a drawable the caller already owns — an adopted canvas or native window. The
14
+ // caller keeps ownership of the drawable; destroyGlSurface releases the context, never the drawable.
15
+ export function createGlSurfaceFromNativeHandle(capability, handle, options) {
16
+ const surface = allocateSurface(handle);
17
+ surface.__brand = 'GlSurface';
18
+ // The runtime is already attached, which is all `acquire` reads; the context it returns is the last
19
+ // field the entity needs before it is finished.
20
+ const context = capability.acquire(surface, options);
21
+ if (context === null)
22
+ return null;
23
+ surface.context = context;
24
+ return finishEntity(surface);
25
+ }
26
+ export function destroyGlSurface(capability, surface) {
27
+ capability.release(surface);
28
+ }
29
+ //# sourceMappingURL=glSurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glSurface.js","sourceRoot":"","sources":["../src/glSurface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAUzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,yGAAyG;AACzG,yGAAyG;AACzG,0GAA0G;AAC1G,6FAA6F;AAC7F,MAAM,UAAU,eAAe,CAC7B,UAAsC,EACtC,MAA2B,EAC3B,KAAa,EACb,MAAc,EACd,OAAoC;IAEpC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,wGAAwG;AACxG,qGAAqG;AACrG,MAAM,UAAU,+BAA+B,CAC7C,UAAsC,EACtC,MAA2B,EAC3B,OAAoC;IAEpC,MAAM,OAAO,GAAG,eAAe,CAAY,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,OAAO,GAAG,WAAoB,CAAC;IACvC,oGAAoG;IACpG,gDAAgD;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAoB,EAAE,OAAO,CAAC,CAAC;IAClE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAyC,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7D,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAsC,EAAE,OAA4B;IACnG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,5 @@
1
- export { ImageChannel, SURFACE_NOISE_CHANNEL_A, SURFACE_NOISE_CHANNEL_B, SURFACE_NOISE_CHANNEL_G, SURFACE_NOISE_CHANNEL_R, applySurfaceColorScaleBias, applySurfaceCurve, applySurfaceLevels, applySurfacePaletteMap, applySurfaceThreshold, bevelSurface, blurSurfacePixelsHorizontal, blurSurfacePixelsHorizontalWeighted, blurSurfacePixelsVertical, blurSurfacePixelsVerticalWeighted, boxBlurSurface, buildSurfaceBrightnessColorMatrix, buildSurfaceContrastColorMatrix, buildSurfaceGradientRamp, buildSurfaceGrayscaleColorMatrix, buildSurfaceHueRotationColorMatrix, buildSurfaceInvertColorMatrix, buildSurfaceSaturationColorMatrix, buildSurfaceSepiaColorMatrix, cloneSurface, colorMatrixSurface, compareSurface, compareSurfaceFingerprints, compositeSurfacePixels, compositeSurfaceRegion, computeGaussianKernel, concatSurfaceColorMatrix, convertSurfaceAlphaType, convertSurfacePixelOrder, convolveSurface, copySurfaceAlpha, copySurfaceChannel, copySurfacePixels, createImageResourceFromSurface, createSurface, createSurfaceFingerprint, createSurfaceFromCanvas, createSurfaceFromImageResource, createSurfaceFromImageSource, createSurfaceRegion, cropSurface, dilateSurface, displaceSurface, dissolveSurfacePixels, drawSurface, dropShadowSurface, encodeSurface, equalizeSurfaceHistogram, erodeSurface, extendSurface, extractSurfacePixels, extractSurfacePixels32, fillSurfaceLinearGradient, fillSurfaceNoise, fillSurfacePerlinNoise, fillSurfaceRadialGradient, fillSurfaceRectangle, fillSurfaceTurbulence, flipSurfaceHorizontal, flipSurfaceVertical, floodFillSurface, formatSurfaceFingerprint, gaussianBlurSurface, getSurfaceColorBoundsRectangle, getSurfaceCoverage, getSurfaceHistogram, getSurfaceMismatch, getSurfacePixel, getSurfacePixelChannel, getSurfacePixelLuminance, getSurfacePixelRgb, glowSurface, gradientBevelSurface, gradientGlowSurface, innerGlowSurface, innerShadowSurface, medianSurface, mergeSurface, mergeSurfaceChannels, multiplySurfaceAlpha, parseSurfaceFingerprint, pixelateSurface, premultiplySurfacePixels, resizeSurface, rotateSurface, rotateSurface180, rotateSurfaceClockwise, rotateSurfaceCounterClockwise, scrollSurface, setSurfaceAlpha, setSurfaceColorMatrixIdentity, setSurfacePixel, setSurfacePixelRgb, setSurfaceRegion, sharpenSurface, splitSurfaceChannels, transformSurface, trimSurface, unpremultiplySurfacePixels, warpSurface, warpSurfaceQuad, writeSurfacePixels, writeSurfacePixels32, } from './contract';
1
+ export { createCanvasSurface, createCanvasSurfaceFromNativeHandle, destroyCanvasSurface } from './contract';
2
+ export { createGlSurface, createGlSurfaceFromNativeHandle, destroyGlSurface } from './contract';
3
+ export { createWgpuSurface, createWgpuSurfaceFromNativeHandle, destroyWgpuSurface } from './contract';
4
+ export { resizeSurface, setSurfaceDisplaySize } from './contract';
2
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,2BAA2B,EAC3B,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EACjC,cAAc,EACd,iCAAiC,EACjC,+BAA+B,EAC/B,wBAAwB,EACxB,gCAAgC,EAChC,kCAAkC,EAClC,6BAA6B,EAC7B,iCAAiC,EACjC,4BAA4B,EAC5B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACvB,8BAA8B,EAC9B,4BAA4B,EAC5B,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,eAAe,EACf,6BAA6B,EAC7B,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,0BAA0B,EAC1B,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mCAAmC,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,+BAA+B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,5 @@
1
- export { ImageChannel, SURFACE_NOISE_CHANNEL_A, SURFACE_NOISE_CHANNEL_B, SURFACE_NOISE_CHANNEL_G, SURFACE_NOISE_CHANNEL_R, applySurfaceColorScaleBias, applySurfaceCurve, applySurfaceLevels, applySurfacePaletteMap, applySurfaceThreshold, bevelSurface, blurSurfacePixelsHorizontal, blurSurfacePixelsHorizontalWeighted, blurSurfacePixelsVertical, blurSurfacePixelsVerticalWeighted, boxBlurSurface, buildSurfaceBrightnessColorMatrix, buildSurfaceContrastColorMatrix, buildSurfaceGradientRamp, buildSurfaceGrayscaleColorMatrix, buildSurfaceHueRotationColorMatrix, buildSurfaceInvertColorMatrix, buildSurfaceSaturationColorMatrix, buildSurfaceSepiaColorMatrix, cloneSurface, colorMatrixSurface, compareSurface, compareSurfaceFingerprints, compositeSurfacePixels, compositeSurfaceRegion, computeGaussianKernel, concatSurfaceColorMatrix, convertSurfaceAlphaType, convertSurfacePixelOrder, convolveSurface, copySurfaceAlpha, copySurfaceChannel, copySurfacePixels, createImageResourceFromSurface, createSurface, createSurfaceFingerprint, createSurfaceFromCanvas, createSurfaceFromImageResource, createSurfaceFromImageSource, createSurfaceRegion, cropSurface, dilateSurface, displaceSurface, dissolveSurfacePixels, drawSurface, dropShadowSurface, encodeSurface, equalizeSurfaceHistogram, erodeSurface, extendSurface, extractSurfacePixels, extractSurfacePixels32, fillSurfaceLinearGradient, fillSurfaceNoise, fillSurfacePerlinNoise, fillSurfaceRadialGradient, fillSurfaceRectangle, fillSurfaceTurbulence, flipSurfaceHorizontal, flipSurfaceVertical, floodFillSurface, formatSurfaceFingerprint, gaussianBlurSurface, getSurfaceColorBoundsRectangle, getSurfaceCoverage, getSurfaceHistogram, getSurfaceMismatch, getSurfacePixel, getSurfacePixelChannel, getSurfacePixelLuminance, getSurfacePixelRgb, glowSurface, gradientBevelSurface, gradientGlowSurface, innerGlowSurface, innerShadowSurface, medianSurface, mergeSurface, mergeSurfaceChannels, multiplySurfaceAlpha, parseSurfaceFingerprint, pixelateSurface, premultiplySurfacePixels, resizeSurface, rotateSurface, rotateSurface180, rotateSurfaceClockwise, rotateSurfaceCounterClockwise, scrollSurface, setSurfaceAlpha, setSurfaceColorMatrixIdentity, setSurfacePixel, setSurfacePixelRgb, setSurfaceRegion, sharpenSurface, splitSurfaceChannels, transformSurface, trimSurface, unpremultiplySurfacePixels, warpSurface, warpSurfaceQuad, writeSurfacePixels, writeSurfacePixels32, } from './contract';
1
+ export { createCanvasSurface, createCanvasSurfaceFromNativeHandle, destroyCanvasSurface } from './contract';
2
+ export { createGlSurface, createGlSurfaceFromNativeHandle, destroyGlSurface } from './contract';
3
+ export { createWgpuSurface, createWgpuSurfaceFromNativeHandle, destroyWgpuSurface } from './contract';
4
+ export { resizeSurface, setSurfaceDisplaySize } from './contract';
2
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,2BAA2B,EAC3B,mCAAmC,EACnC,yBAAyB,EACzB,iCAAiC,EACjC,cAAc,EACd,iCAAiC,EACjC,+BAA+B,EAC/B,wBAAwB,EACxB,gCAAgC,EAChC,kCAAkC,EAClC,6BAA6B,EAC7B,iCAAiC,EACjC,4BAA4B,EAC5B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,8BAA8B,EAC9B,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACvB,8BAA8B,EAC9B,4BAA4B,EAC5B,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACxB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,eAAe,EACf,6BAA6B,EAC7B,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,0BAA0B,EAC1B,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mCAAmC,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,+BAA+B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
package/dist/surface.d.ts CHANGED
@@ -1,16 +1,5 @@
1
- import type { AlphaType, Surface } from '@flighthq/types/contract';
2
- export declare function cloneSurface(source: Readonly<Surface>): Surface;
3
- /**
4
- * Converts the alpha representation of `out` in place between `'straight'` and
5
- * `'premultiplied'`. If `out.alphaType` already matches `target`, this is a
6
- * no-op (neither pixel data nor the metadata field changes).
7
- *
8
- * - `'straight' → 'premultiplied'`: RGB channels are multiplied by alpha/255.
9
- * - `'premultiplied' → 'straight'`: RGB channels are divided by alpha/255.
10
- * Pixels with alpha=0 are left as `(0,0,0,0)`.
11
- *
12
- * Updates `out.alphaType` to `target` after conversion.
13
- */
14
- export declare function convertSurfaceAlphaType(out: Surface, target: AlphaType): void;
15
- export declare function createSurface(width: number, height: number, color?: number): Surface;
1
+ import type { EntityConstruction, NativeSurfaceHandle, Surface, SurfaceRuntime } from '@flighthq/types/contract';
2
+ export declare function allocateSurface<T extends Surface>(handle: NativeSurfaceHandle): EntityConstruction<T>;
3
+ export declare function getSurfaceHandle(surface: Readonly<Surface>): NativeSurfaceHandle;
4
+ export declare function getSurfaceRuntime(surface: Readonly<Surface>): SurfaceRuntime;
16
5
  //# sourceMappingURL=surface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAY/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA6B7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAyBvF"}
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAOjH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,mBAAmB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAMrG;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAEhF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,cAAc,CAE5E"}
package/dist/surface.js CHANGED
@@ -1,86 +1,22 @@
1
- import { createEntity } from '@flighthq/entity/contract';
2
- import { invalidateImageResource } from '@flighthq/image/contract';
3
- export function cloneSurface(source) {
4
- return createEntity({
5
- alphaType: source.alphaType,
6
- colorSpace: source.colorSpace,
7
- compressed: null,
8
- data: new Uint8ClampedArray(source.data),
9
- format: source.format,
10
- height: source.height,
11
- source: null,
12
- version: 0,
13
- width: source.width,
14
- });
1
+ import { allocateEntity, createEntityRuntime } from '@flighthq/entity/contract';
2
+ import { EntityRuntimeKey } from '@flighthq/types/contract';
3
+ // Allocates a surface entity around a drawable the host just created, before any context is acquired on
4
+ // it. The handle goes on the runtime because it is a platform object that only the allocating host may
5
+ // narrow; the entity carries no trace of it, which is what keeps the portable layers free of DOM and
6
+ // native types. Per-kind factories add their own context field and finish the entity.
7
+ export function allocateSurface(handle) {
8
+ const surface = allocateEntity();
9
+ const runtime = createEntityRuntime();
10
+ runtime.handle = handle;
11
+ surface[EntityRuntimeKey] = runtime;
12
+ return surface;
15
13
  }
16
- /**
17
- * Converts the alpha representation of `out` in place between `'straight'` and
18
- * `'premultiplied'`. If `out.alphaType` already matches `target`, this is a
19
- * no-op (neither pixel data nor the metadata field changes).
20
- *
21
- * - `'straight' → 'premultiplied'`: RGB channels are multiplied by alpha/255.
22
- * - `'premultiplied' → 'straight'`: RGB channels are divided by alpha/255.
23
- * Pixels with alpha=0 are left as `(0,0,0,0)`.
24
- *
25
- * Updates `out.alphaType` to `target` after conversion.
26
- */
27
- export function convertSurfaceAlphaType(out, target) {
28
- if (out.alphaType === target)
29
- return;
30
- const data = out.data;
31
- const len = out.width * out.height * 4;
32
- if (target === 'premultiplied') {
33
- for (let i = 0; i < len; i += 4) {
34
- const a = data[i + 3] / 255;
35
- data[i] = Math.round(data[i] * a);
36
- data[i + 1] = Math.round(data[i + 1] * a);
37
- data[i + 2] = Math.round(data[i + 2] * a);
38
- }
39
- }
40
- else {
41
- for (let i = 0; i < len; i += 4) {
42
- const a = data[i + 3];
43
- if (a === 0) {
44
- data[i] = 0;
45
- data[i + 1] = 0;
46
- data[i + 2] = 0;
47
- }
48
- else {
49
- const inv = 255 / a;
50
- data[i] = Math.min(255, Math.round(data[i] * inv));
51
- data[i + 1] = Math.min(255, Math.round(data[i + 1] * inv));
52
- data[i + 2] = Math.min(255, Math.round(data[i + 2] * inv));
53
- }
54
- }
55
- }
56
- // Mutate the alphaType metadata field.
57
- out.alphaType = target;
58
- invalidateImageResource(out);
14
+ // The drawable a surface was built around. Hosts narrow this to their own platform type; portable code
15
+ // passes the surface itself and never reads through here.
16
+ export function getSurfaceHandle(surface) {
17
+ return getSurfaceRuntime(surface).handle;
59
18
  }
60
- export function createSurface(width, height, color = 0) {
61
- const data = new Uint8ClampedArray(width * height * 4);
62
- if (color !== 0) {
63
- const r = (color >>> 24) & 0xff;
64
- const g = (color >> 16) & 0xff;
65
- const b = (color >> 8) & 0xff;
66
- const a = color & 0xff;
67
- for (let i = 0; i < data.length; i += 4) {
68
- data[i] = r;
69
- data[i + 1] = g;
70
- data[i + 2] = b;
71
- data[i + 3] = a;
72
- }
73
- }
74
- return createEntity({
75
- alphaType: 'straight',
76
- colorSpace: 'srgb',
77
- compressed: null,
78
- data,
79
- format: 'rgba8unorm',
80
- height,
81
- source: null,
82
- version: 0,
83
- width,
84
- });
19
+ export function getSurfaceRuntime(surface) {
20
+ return surface[EntityRuntimeKey];
85
21
  }
86
22
  //# sourceMappingURL=surface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wGAAwG;AACxG,uGAAuG;AACvG,qGAAqG;AACrG,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAoB,MAA2B;IAC5E,MAAM,OAAO,GAAG,cAAc,EAAK,CAAC;IACpC,MAAM,OAAO,GAAG,mBAAmB,EAAoB,CAAC;IACxD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC;IACpC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uGAAuG;AACvG,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAA0B;IAC1D,OAAO,OAAO,CAAC,gBAAgB,CAAmB,CAAC;AACrD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HostSurfaceDisplayCapability, HostSurfaceResizeCapability, Surface } from '@flighthq/types/contract';
2
+ export declare function resizeSurface(capability: Readonly<HostSurfaceResizeCapability>, surface: Readonly<Surface>, width: number, height: number): void;
3
+ export declare function setSurfaceDisplaySize(capability: Readonly<HostSurfaceDisplayCapability>, surface: Readonly<Surface>, width: number, height: number): void;
4
+ //# sourceMappingURL=surfaceDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaceDisplay.d.ts","sourceRoot":"","sources":["../src/surfaceDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,QAAQ,CAAC,2BAA2B,CAAC,EACjD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAEN;AAID,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAClD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAEN"}
@@ -0,0 +1,11 @@
1
+ // Resizes a surface's backing store, in device pixels. The context or acquisition reads the new size
2
+ // live, so nothing on the surface has to be updated alongside it.
3
+ export function resizeSurface(capability, surface, width, height) {
4
+ capability.resize(surface, width, height);
5
+ }
6
+ // Sets the size a surface is presented at, in logical pixels. Independent of the backing-store size: the
7
+ // ratio is the app's render scale, which equals the device pixel ratio only when the app chooses that.
8
+ export function setSurfaceDisplaySize(capability, surface, width, height) {
9
+ capability.setDisplaySize(surface, width, height);
10
+ }
11
+ //# sourceMappingURL=surfaceDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaceDisplay.js","sourceRoot":"","sources":["../src/surfaceDisplay.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAC3B,UAAiD,EACjD,OAA0B,EAC1B,KAAa,EACb,MAAc;IAEd,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,yGAAyG;AACzG,uGAAuG;AACvG,MAAM,UAAU,qBAAqB,CACnC,UAAkD,EAClD,OAA0B,EAC1B,KAAa,EACb,MAAc;IAEd,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AppWindow, HostWgpuCapability, NativeSurfaceHandle, WgpuHostAcquisitionOptions, WgpuSurface } from '@flighthq/types/contract';
2
+ export declare function createWgpuSurface(capability: Readonly<HostWgpuCapability>, window: Readonly<AppWindow>, width: number, height: number, options?: Readonly<WgpuHostAcquisitionOptions>): Promise<WgpuSurface | null>;
3
+ export declare function createWgpuSurfaceFromNativeHandle(capability: Readonly<HostWgpuCapability>, handle: NativeSurfaceHandle, options?: Readonly<WgpuHostAcquisitionOptions>): Promise<WgpuSurface | null>;
4
+ export declare function destroyWgpuSurface(capability: Readonly<HostWgpuCapability>, surface: Readonly<WgpuSurface>): void;
5
+ //# sourceMappingURL=wgpuSurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuSurface.d.ts","sourceRoot":"","sources":["../src/wgpuSurface.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EAET,kBAAkB,EAClB,mBAAmB,EAEnB,0BAA0B,EAC1B,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAQlC,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACxC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,CAAC,0BAA0B,CAAC,GAC7C,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAI7B;AAGD,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACxC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,0BAA0B,CAAC,GAC7C,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAW7B;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAEjH"}
@@ -0,0 +1,30 @@
1
+ import { finishEntity } from '@flighthq/entity/contract';
2
+ import { allocateSurface } from './surface';
3
+ // Allocates a drawable in the given window, sized in device pixels, and acquires a WebGPU device and
4
+ // presentation context for it. Returns null when the environment cannot provide WebGPU at all — no
5
+ // drawable, no adapter, no device — which is an expected outcome on a machine without it rather than API
6
+ // misuse, so it reports through the return value like every other expected failure here.
7
+ export async function createWgpuSurface(capability, window, width, height, options) {
8
+ const handle = capability.create(window, width, height);
9
+ if (handle === null)
10
+ return null;
11
+ return createWgpuSurfaceFromNativeHandle(capability, handle, options);
12
+ }
13
+ // Acquires a device and presentation context for a drawable the caller already owns.
14
+ export async function createWgpuSurfaceFromNativeHandle(capability, handle, options) {
15
+ const surface = allocateSurface(handle);
16
+ surface.__brand = 'WgpuSurface';
17
+ let acquisition;
18
+ try {
19
+ acquisition = await capability.acquire(surface, options ?? {});
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ surface.acquisition = acquisition;
25
+ return finishEntity(surface);
26
+ }
27
+ export function destroyWgpuSurface(capability, surface) {
28
+ capability.release(surface.acquisition);
29
+ }
30
+ //# sourceMappingURL=wgpuSurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuSurface.js","sourceRoot":"","sources":["../src/wgpuSurface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAWzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qGAAqG;AACrG,mGAAmG;AACnG,yGAAyG;AACzG,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAwC,EACxC,MAA2B,EAC3B,KAAa,EACb,MAAc,EACd,OAA8C;IAE9C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,iCAAiC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,UAAwC,EACxC,MAA2B,EAC3B,OAA8C;IAE9C,MAAM,OAAO,GAAG,eAAe,CAAc,MAAM,CAAC,CAAC;IACrD,OAAO,CAAC,OAAO,GAAG,aAAsB,CAAC;IACzC,IAAI,WAAgC,CAAC;IACrC,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAsB,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACA,OAA2C,CAAC,WAAW,GAAG,WAAW,CAAC;IACvE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAwC,EAAE,OAA8B;IACzG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "name": "@flighthq/surface",
3
- "version": "0.3.0-next.906.07cea63",
3
+ "version": "0.5.1-edge.1467.7e2fc7d",
4
+ "author": "Joshua Granick and other contributors",
5
+ "license": "MIT",
4
6
  "repository": {
5
7
  "type": "git",
6
8
  "url": "https://github.com/flighthq/flight.git",
@@ -36,13 +38,12 @@
36
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
39
  },
38
40
  "dependencies": {
39
- "@flighthq/image": "0.3.0-next.906.07cea63",
40
- "@flighthq/entity": "0.3.0-next.906.07cea63",
41
- "@flighthq/types": "0.3.0-next.906.07cea63"
41
+ "@flighthq/entity": "0.5.1-edge.1467.7e2fc7d",
42
+ "@flighthq/types": "0.5.1-edge.1467.7e2fc7d"
42
43
  },
43
44
  "devDependencies": {
44
45
  "typescript": "^5.3.0"
45
46
  },
46
- "description": "Pixel-level image manipulation using browser ImageData",
47
+ "description": "Surface allocation, ownership tracking, and lifecycle",
47
48
  "sideEffects": false
48
49
  }
@@ -0,0 +1,68 @@
1
+ import { finishEntity } from '@flighthq/entity/contract';
2
+ import type { AppWindow, CanvasSurface, Entity, HostCanvasCapability } from '@flighthq/types/contract';
3
+
4
+ import { createCanvasSurface, createCanvasSurfaceFromNativeHandle, destroyCanvasSurface } from './canvasSurface';
5
+ import { allocateSurface, getSurfaceHandle } from './surface';
6
+
7
+ function canvasCapability(fields: HostCanvasCapability): HostCanvasCapability {
8
+ return finishEntity(Object.assign(allocateSurface(null), fields) as never) as unknown as HostCanvasCapability;
9
+ }
10
+
11
+ const appWindow = {} as AppWindow;
12
+ const context = {} as CanvasRenderingContext2D;
13
+
14
+ describe('createCanvasSurface', () => {
15
+ it('allocates a drawable in the window and acquires a 2D context on it', () => {
16
+ const create = vi.fn(() => 'canvas');
17
+ const acquire = vi.fn(() => context);
18
+ const surface = createCanvasSurface(canvasCapability({ acquire, create, release() {} }), appWindow, 320, 240);
19
+
20
+ expect(surface!.__brand).toBe('CanvasSurface');
21
+ expect(surface!.context).toBe(context);
22
+ expect(getSurfaceHandle(surface!)).toBe('canvas');
23
+ expect(create).toHaveBeenCalledExactlyOnceWith(appWindow, 320, 240, undefined);
24
+ });
25
+
26
+ it('returns null without acquiring when the window cannot yield a drawable', () => {
27
+ const acquire = vi.fn(() => context);
28
+ expect(
29
+ createCanvasSurface(canvasCapability({ acquire, create: () => null, release() {} }), appWindow, 8, 8),
30
+ ).toBeNull();
31
+ expect(acquire).not.toHaveBeenCalled();
32
+ });
33
+
34
+ it('returns null when the drawable cannot rasterize 2D', () => {
35
+ expect(
36
+ createCanvasSurface(
37
+ canvasCapability({ acquire: () => null, create: () => 'canvas', release() {} }),
38
+ appWindow,
39
+ 8,
40
+ 8,
41
+ ),
42
+ ).toBeNull();
43
+ });
44
+ });
45
+
46
+ describe('createCanvasSurfaceFromNativeHandle', () => {
47
+ it('adopts a drawable the caller owns without allocating one', () => {
48
+ const create = vi.fn(() => 'unused');
49
+ const surface = createCanvasSurfaceFromNativeHandle(
50
+ canvasCapability({ acquire: () => context, create, release() {} }),
51
+ 'adopted',
52
+ );
53
+
54
+ expect(getSurfaceHandle(surface!)).toBe('adopted');
55
+ expect(create).not.toHaveBeenCalled();
56
+ });
57
+ });
58
+
59
+ describe('destroyCanvasSurface', () => {
60
+ it('releases the surface through the capability', () => {
61
+ const release = vi.fn();
62
+ const capability = canvasCapability({ acquire: () => context, create: () => 'canvas', release });
63
+ const surface = createCanvasSurface(capability, appWindow, 8, 8) as CanvasSurface;
64
+ destroyCanvasSurface(capability, surface);
65
+
66
+ expect(release).toHaveBeenCalledExactlyOnceWith(surface);
67
+ });
68
+ });