@adobe/data 0.7.2 → 0.7.3

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 (209) hide show
  1. package/dist/ecs/archetype/archetype.d.ts +3 -3
  2. package/dist/ecs/archetype/create-archetype.d.ts +4 -4
  3. package/dist/ecs/archetype/create-archetype.js.map +1 -1
  4. package/dist/ecs/archetype/create-archetype.test.js +6 -6
  5. package/dist/ecs/archetype/create-archetype.test.js.map +1 -1
  6. package/dist/ecs/archetype/delete-row.d.ts +2 -2
  7. package/dist/ecs/archetype/delete-row.js.map +1 -1
  8. package/dist/ecs/archetype/delete-row.test.js +4 -4
  9. package/dist/ecs/archetype/delete-row.test.js.map +1 -1
  10. package/dist/ecs/core-components.d.ts +3 -3
  11. package/dist/ecs/database/database.d.ts +4 -4
  12. package/dist/ecs/database/observe-select-entities.d.ts +2 -2
  13. package/dist/ecs/database/observe-select-entities.js.map +1 -1
  14. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  15. package/dist/ecs/database/observed/observed-database.d.ts +3 -3
  16. package/dist/ecs/database/replicate.js.map +1 -1
  17. package/dist/ecs/entity-location-table/create-entity-location-table.d.ts +1 -1
  18. package/dist/ecs/entity-location-table/create-entity-location-table.js +14 -1
  19. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  20. package/dist/ecs/entity-location-table/create-entity-location-table.test.js +14 -0
  21. package/dist/ecs/entity-location-table/create-entity-location-table.test.js.map +1 -1
  22. package/dist/ecs/entity.d.ts +9 -7
  23. package/dist/ecs/entity.js +5 -2
  24. package/dist/ecs/entity.js.map +1 -1
  25. package/dist/ecs/index.d.ts +1 -1
  26. package/dist/ecs/index.js +1 -1
  27. package/dist/ecs/index.js.map +1 -1
  28. package/dist/ecs/optional-components.d.ts +3 -0
  29. package/dist/ecs/optional-components.js +2 -0
  30. package/dist/ecs/optional-components.js.map +1 -0
  31. package/dist/ecs/required-components.d.ts +4 -0
  32. package/dist/ecs/required-components.js +2 -0
  33. package/dist/ecs/required-components.js.map +1 -0
  34. package/dist/ecs/store/core/core.d.ts +15 -15
  35. package/dist/ecs/store/core/create-core.d.ts +2 -1
  36. package/dist/ecs/store/core/create-core.js +29 -12
  37. package/dist/ecs/store/core/create-core.js.map +1 -1
  38. package/dist/ecs/store/core/create-core.test.d.ts +1 -1
  39. package/dist/ecs/store/core/create-core.test.js +30 -2
  40. package/dist/ecs/store/core/create-core.test.js.map +1 -1
  41. package/dist/ecs/store/core/select-entities.d.ts +2 -2
  42. package/dist/ecs/store/core/select-entities.js.map +1 -1
  43. package/dist/ecs/store/create-store.d.ts +2 -1
  44. package/dist/ecs/store/create-store.js +3 -1
  45. package/dist/ecs/store/create-store.js.map +1 -1
  46. package/dist/ecs/store/store.d.ts +6 -6
  47. package/dist/samples/todo/services/state-service/create-todo-database.d.ts +1 -1
  48. package/dist/samples/todo/services/state-service/create-todo-store.d.ts +1 -1
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +4 -3
  51. package/dist/blob/download-handle.d.ts +0 -4
  52. package/dist/blob/download-handle.js +0 -2
  53. package/dist/blob/download-handle.js.map +0 -1
  54. package/dist/blob/upload-handle.d.ts +0 -4
  55. package/dist/blob/upload-handle.js +0 -2
  56. package/dist/blob/upload-handle.js.map +0 -1
  57. package/dist/ecs/database/applied/applied-database.d.ts +0 -47
  58. package/dist/ecs/database/applied/applied-database.js +0 -22
  59. package/dist/ecs/database/applied/applied-database.js.map +0 -1
  60. package/dist/ecs/database/applied/applied-entry.d.ts +0 -30
  61. package/dist/ecs/database/applied/applied-entry.js +0 -84
  62. package/dist/ecs/database/applied/applied-entry.js.map +0 -1
  63. package/dist/ecs/database/applied/create-applied-database.d.ts +0 -8
  64. package/dist/ecs/database/applied/create-applied-database.js +0 -266
  65. package/dist/ecs/database/applied/create-applied-database.js.map +0 -1
  66. package/dist/ecs/database/applied/create-applied-database.test.d.ts +0 -1
  67. package/dist/ecs/database/applied/create-applied-database.test.js +0 -94
  68. package/dist/ecs/database/applied/create-applied-database.test.js.map +0 -1
  69. package/dist/ecs/database/create-applied-database.d.ts +0 -49
  70. package/dist/ecs/database/create-applied-database.js +0 -275
  71. package/dist/ecs/database/create-applied-database.js.map +0 -1
  72. package/dist/ecs/database/reconciling/applied-database.d.ts +0 -47
  73. package/dist/ecs/database/reconciling/applied-database.js +0 -22
  74. package/dist/ecs/database/reconciling/applied-database.js.map +0 -1
  75. package/dist/ecs/database/reconciling/applied-entry.d.ts +0 -30
  76. package/dist/ecs/database/reconciling/applied-entry.js +0 -84
  77. package/dist/ecs/database/reconciling/applied-entry.js.map +0 -1
  78. package/dist/ecs/database/reconciling/create-applied-database.d.ts +0 -8
  79. package/dist/ecs/database/reconciling/create-applied-database.js +0 -266
  80. package/dist/ecs/database/reconciling/create-applied-database.js.map +0 -1
  81. package/dist/ecs/database/reconciling/create-applied-database.test.d.ts +0 -1
  82. package/dist/ecs/database/reconciling/create-applied-database.test.js +0 -94
  83. package/dist/ecs/database/reconciling/create-applied-database.test.js.map +0 -1
  84. package/dist/ecs/store/store-schema/create-store-schema-test.d.ts +0 -1
  85. package/dist/ecs/store/store-schema/create-store-schema-test.js +0 -33
  86. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +0 -1
  87. package/dist/ecs/store/store-schema/create-store-schema.d.ts +0 -11
  88. package/dist/ecs/store/store-schema/create-store-schema.js +0 -31
  89. package/dist/ecs/store/store-schema/create-store-schema.js.map +0 -1
  90. package/dist/ecs/store/store-schema/index.d.ts +0 -2
  91. package/dist/ecs/store/store-schema/index.js +0 -24
  92. package/dist/ecs/store/store-schema/index.js.map +0 -1
  93. package/dist/ecs/store/store-schema/store-schema.d.ts +0 -12
  94. package/dist/ecs/store/store-schema/store-schema.js +0 -23
  95. package/dist/ecs/store/store-schema/store-schema.js.map +0 -1
  96. package/dist/ecs/world/create-world.d.ts +0 -7
  97. package/dist/ecs/world/create-world.js +0 -113
  98. package/dist/ecs/world/create-world.js.map +0 -1
  99. package/dist/ecs/world/create-world.test.d.ts +0 -1
  100. package/dist/ecs/world/create-world.test.js +0 -499
  101. package/dist/ecs/world/create-world.test.js.map +0 -1
  102. package/dist/ecs/world/index.d.ts +0 -5
  103. package/dist/ecs/world/index.js +0 -27
  104. package/dist/ecs/world/index.js.map +0 -1
  105. package/dist/ecs/world/system-phase.d.ts +0 -5
  106. package/dist/ecs/world/system-phase.js +0 -14
  107. package/dist/ecs/world/system-phase.js.map +0 -1
  108. package/dist/ecs/world/system.d.ts +0 -25
  109. package/dist/ecs/world/system.js +0 -2
  110. package/dist/ecs/world/system.js.map +0 -1
  111. package/dist/ecs/world/world-schema/create-world-schema-test.d.ts +0 -1
  112. package/dist/ecs/world/world-schema/create-world-schema-test.js +0 -55
  113. package/dist/ecs/world/world-schema/create-world-schema-test.js.map +0 -1
  114. package/dist/ecs/world/world-schema/create-world-schema.d.ts +0 -19
  115. package/dist/ecs/world/world-schema/create-world-schema.js +0 -33
  116. package/dist/ecs/world/world-schema/create-world-schema.js.map +0 -1
  117. package/dist/ecs/world/world-schema/index.d.ts +0 -2
  118. package/dist/ecs/world/world-schema/index.js +0 -24
  119. package/dist/ecs/world/world-schema/index.js.map +0 -1
  120. package/dist/ecs/world/world-schema/world-schema.d.ts +0 -18
  121. package/dist/ecs/world/world-schema/world-schema.js +0 -23
  122. package/dist/ecs/world/world-schema/world-schema.js.map +0 -1
  123. package/dist/ecs/world/world.d.ts +0 -11
  124. package/dist/ecs/world/world.js +0 -2
  125. package/dist/ecs/world/world.js.map +0 -1
  126. package/dist/graphics/camera/camera.d.ts +0 -62
  127. package/dist/graphics/camera/camera.js +0 -17
  128. package/dist/graphics/camera/camera.js.map +0 -1
  129. package/dist/graphics/camera/index.d.ts +0 -4
  130. package/dist/graphics/camera/index.js +0 -5
  131. package/dist/graphics/camera/index.js.map +0 -1
  132. package/dist/graphics/camera/screen-to-world-ray.d.ts +0 -12
  133. package/dist/graphics/camera/screen-to-world-ray.js +0 -49
  134. package/dist/graphics/camera/screen-to-world-ray.js.map +0 -1
  135. package/dist/graphics/camera/screen-to-world-ray.test.d.ts +0 -1
  136. package/dist/graphics/camera/screen-to-world-ray.test.js +0 -171
  137. package/dist/graphics/camera/screen-to-world-ray.test.js.map +0 -1
  138. package/dist/graphics/camera/to-view-projection.d.ts +0 -3
  139. package/dist/graphics/camera/to-view-projection.js +0 -8
  140. package/dist/graphics/camera/to-view-projection.js.map +0 -1
  141. package/dist/graphics/camera/world-to-screen.d.ts +0 -12
  142. package/dist/graphics/camera/world-to-screen.js +0 -38
  143. package/dist/graphics/camera/world-to-screen.js.map +0 -1
  144. package/dist/graphics/camera/world-to-screen.test.d.ts +0 -1
  145. package/dist/graphics/camera/world-to-screen.test.js +0 -124
  146. package/dist/graphics/camera/world-to-screen.test.js.map +0 -1
  147. package/dist/graphics/create-struct-gpu-buffer.d.ts +0 -7
  148. package/dist/graphics/create-struct-gpu-buffer.js +0 -17
  149. package/dist/graphics/create-struct-gpu-buffer.js.map +0 -1
  150. package/dist/graphics/extract-wgsl-bindings.d.ts +0 -5
  151. package/dist/graphics/extract-wgsl-bindings.js +0 -10
  152. package/dist/graphics/extract-wgsl-bindings.js.map +0 -1
  153. package/dist/graphics/frame.d.ts +0 -22
  154. package/dist/graphics/frame.js +0 -12
  155. package/dist/graphics/frame.js.map +0 -1
  156. package/dist/graphics/get-web-gpu-device-and-context.d.ts +0 -2
  157. package/dist/graphics/get-web-gpu-device-and-context.js +0 -21
  158. package/dist/graphics/get-web-gpu-device-and-context.js.map +0 -1
  159. package/dist/graphics/graphics-context.d.ts +0 -5
  160. package/dist/graphics/graphics-context.js +0 -2
  161. package/dist/graphics/graphics-context.js.map +0 -1
  162. package/dist/graphics/index.d.ts +0 -5
  163. package/dist/graphics/index.js +0 -5
  164. package/dist/graphics/index.js.map +0 -1
  165. package/dist/graphics/to-gpu-buffer.d.ts +0 -2
  166. package/dist/graphics/to-gpu-buffer.js +0 -14
  167. package/dist/graphics/to-gpu-buffer.js.map +0 -1
  168. package/dist/internal/array-buffer-like/grow.d.ts +0 -1
  169. package/dist/internal/array-buffer-like/grow.js +0 -9
  170. package/dist/internal/array-buffer-like/grow.js.map +0 -1
  171. package/dist/lit/elements/service-application.d.ts +0 -9
  172. package/dist/lit/elements/service-application.js +0 -55
  173. package/dist/lit/elements/service-application.js.map +0 -1
  174. package/dist/lit/elements/service-context.d.ts +0 -1
  175. package/dist/lit/elements/service-context.js +0 -24
  176. package/dist/lit/elements/service-context.js.map +0 -1
  177. package/dist/lit/elements/service-element.d.ts +0 -6
  178. package/dist/lit/elements/service-element.js +0 -43
  179. package/dist/lit/elements/service-element.js.map +0 -1
  180. package/dist/math/picking/get-closest-entity-to-line.d.ts +0 -4
  181. package/dist/math/picking/get-closest-entity-to-line.js +0 -30
  182. package/dist/math/picking/get-closest-entity-to-line.js.map +0 -1
  183. package/dist/math/picking/get-closest-entity-to-point.d.ts +0 -4
  184. package/dist/math/picking/get-closest-entity-to-point.js +0 -27
  185. package/dist/math/picking/get-closest-entity-to-point.js.map +0 -1
  186. package/dist/math/picking/get-intersecting-entities.d.ts +0 -12
  187. package/dist/math/picking/get-intersecting-entities.js +0 -15
  188. package/dist/math/picking/get-intersecting-entities.js.map +0 -1
  189. package/dist/math/picking/index.d.ts +0 -5
  190. package/dist/math/picking/index.js +0 -27
  191. package/dist/math/picking/index.js.map +0 -1
  192. package/dist/math/picking/pick-from-tables.d.ts +0 -19
  193. package/dist/math/picking/pick-from-tables.js +0 -63
  194. package/dist/math/picking/pick-from-tables.js.map +0 -1
  195. package/dist/math/picking/pick-result.d.ts +0 -10
  196. package/dist/math/picking/pick-result.js +0 -23
  197. package/dist/math/picking/pick-result.js.map +0 -1
  198. package/dist/old-ecs/privacy/helper-functions.d.ts +0 -43
  199. package/dist/old-ecs/privacy/helper-functions.js +0 -76
  200. package/dist/old-ecs/privacy/helper-functions.js.map +0 -1
  201. package/dist/old-ecs/privacy/helper-functions.test.d.ts +0 -1
  202. package/dist/old-ecs/privacy/helper-functions.test.js +0 -173
  203. package/dist/old-ecs/privacy/helper-functions.test.js.map +0 -1
  204. package/dist/table/compact-table.d.ts +0 -7
  205. package/dist/table/compact-table.js +0 -15
  206. package/dist/table/compact-table.js.map +0 -1
  207. package/dist/table/compact-table.test.d.ts +0 -1
  208. package/dist/table/compact-table.test.js +0 -121
  209. package/dist/table/compact-table.test.js.map +0 -1
@@ -1,171 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { screenToWorldRay } from "./screen-to-world-ray.js";
3
- import { toViewProjection } from "./to-view-projection.js";
4
- import { Mat4x4 } from "../../math/index.js";
5
- describe("screenToWorldRay", () => {
6
- const createTestCamera = () => ({
7
- aspect: 16 / 9,
8
- fieldOfView: Math.PI / 4, // 45 degrees
9
- nearPlane: 0.1,
10
- farPlane: 100,
11
- position: [0, 0, 5],
12
- target: [0, 0, 0],
13
- up: [0, 1, 0],
14
- });
15
- it("converts screen center to ray pointing forward", () => {
16
- const camera = createTestCamera();
17
- const canvasWidth = 1600;
18
- const canvasHeight = 900;
19
- const screenCenter = [canvasWidth / 2, canvasHeight / 2];
20
- // Compute the inverse view-projection matrix
21
- const viewProjection = toViewProjection(camera);
22
- const invViewProjection = Mat4x4.inverse(viewProjection);
23
- const ray = screenToWorldRay(screenCenter, invViewProjection, canvasWidth, canvasHeight);
24
- // Ray should start at near plane point (not camera position)
25
- expect(ray.a[0]).toBeCloseTo(0, 1);
26
- expect(ray.a[1]).toBeCloseTo(0, 1);
27
- expect(ray.a[2]).toBeCloseTo(5, 1); // Near plane is actually at z = 5
28
- // Ray should point roughly toward the target (forward direction)
29
- const rayDirection = [
30
- ray.b[0] - ray.a[0],
31
- ray.b[1] - ray.a[1],
32
- ray.b[2] - ray.a[2]
33
- ];
34
- // Normalize the direction
35
- const length = Math.sqrt(rayDirection[0] ** 2 + rayDirection[1] ** 2 + rayDirection[2] ** 2);
36
- const normalizedDirection = [
37
- rayDirection[0] / length,
38
- rayDirection[1] / length,
39
- rayDirection[2] / length
40
- ];
41
- // Should point roughly forward (negative Z direction, into the scene)
42
- expect(normalizedDirection[0]).toBeCloseTo(0, 1);
43
- expect(normalizedDirection[1]).toBeCloseTo(0, 1);
44
- expect(normalizedDirection[2]).toBeCloseTo(-1, 1);
45
- });
46
- it("converts screen top-left to ray pointing left and up", () => {
47
- const camera = createTestCamera();
48
- const canvasWidth = 1600;
49
- const canvasHeight = 900;
50
- const screenTopLeft = [0, 0];
51
- // Compute the inverse view-projection matrix
52
- const viewProjection = toViewProjection(camera);
53
- const invViewProjection = Mat4x4.inverse(viewProjection);
54
- const ray = screenToWorldRay(screenTopLeft, invViewProjection, canvasWidth, canvasHeight);
55
- // Ray should start at near plane point
56
- expect(ray.a[2]).toBeCloseTo(5, 1); // Near plane
57
- // Ray should point left and up
58
- const rayDirection = [
59
- ray.b[0] - ray.a[0],
60
- ray.b[1] - ray.a[1],
61
- ray.b[2] - ray.a[2]
62
- ];
63
- // Normalize the direction
64
- const length = Math.sqrt(rayDirection[0] ** 2 + rayDirection[1] ** 2 + rayDirection[2] ** 2);
65
- const normalizedDirection = [
66
- rayDirection[0] / length,
67
- rayDirection[1] / length,
68
- rayDirection[2] / length
69
- ];
70
- // Should point left (negative X), up (positive Y), and forward (negative Z, into scene)
71
- expect(normalizedDirection[0]).toBeLessThan(0);
72
- expect(normalizedDirection[1]).toBeGreaterThan(0);
73
- expect(normalizedDirection[2]).toBeLessThan(0);
74
- });
75
- it("converts screen bottom-right to ray pointing right and down", () => {
76
- const camera = createTestCamera();
77
- const canvasWidth = 1600;
78
- const canvasHeight = 900;
79
- const screenBottomRight = [canvasWidth, canvasHeight];
80
- // Compute the inverse view-projection matrix
81
- const viewProjection = toViewProjection(camera);
82
- const invViewProjection = Mat4x4.inverse(viewProjection);
83
- const ray = screenToWorldRay(screenBottomRight, invViewProjection, canvasWidth, canvasHeight);
84
- // Ray should start at near plane point
85
- expect(ray.a[2]).toBeCloseTo(5, 1); // Near plane
86
- // Ray should point right and down
87
- const rayDirection = [
88
- ray.b[0] - ray.a[0],
89
- ray.b[1] - ray.a[1],
90
- ray.b[2] - ray.a[2]
91
- ];
92
- // Normalize the direction
93
- const length = Math.sqrt(rayDirection[0] ** 2 + rayDirection[1] ** 2 + rayDirection[2] ** 2);
94
- const normalizedDirection = [
95
- rayDirection[0] / length,
96
- rayDirection[1] / length,
97
- rayDirection[2] / length
98
- ];
99
- // Should point right (positive X), down (negative Y), and forward (negative Z, into scene)
100
- expect(normalizedDirection[0]).toBeGreaterThan(0);
101
- expect(normalizedDirection[1]).toBeLessThan(0);
102
- expect(normalizedDirection[2]).toBeLessThan(0);
103
- });
104
- it("respects custom ray length", () => {
105
- const camera = createTestCamera();
106
- const canvasWidth = 1600;
107
- const canvasHeight = 900;
108
- const screenCenter = [canvasWidth / 2, canvasHeight / 2];
109
- const customLength = 50;
110
- // Compute the inverse view-projection matrix
111
- const viewProjection = toViewProjection(camera);
112
- const invViewProjection = Mat4x4.inverse(viewProjection);
113
- const ray = screenToWorldRay(screenCenter, invViewProjection, canvasWidth, canvasHeight, customLength);
114
- // Ray should start at near plane point
115
- expect(ray.a[2]).toBeCloseTo(5, 1); // Near plane
116
- // Ray should have the specified length
117
- const rayDirection = [
118
- ray.b[0] - ray.a[0],
119
- ray.b[1] - ray.a[1],
120
- ray.b[2] - ray.a[2]
121
- ];
122
- const length = Math.sqrt(rayDirection[0] ** 2 + rayDirection[1] ** 2 + rayDirection[2] ** 2);
123
- expect(length).toBeCloseTo(customLength, 1);
124
- });
125
- it("works with different camera positions", () => {
126
- const camera = {
127
- aspect: 16 / 9,
128
- fieldOfView: Math.PI / 4,
129
- nearPlane: 0.1,
130
- farPlane: 100,
131
- position: [10, 5, 15],
132
- target: [0, 0, 0],
133
- up: [0, 1, 0],
134
- };
135
- const canvasWidth = 1600;
136
- const canvasHeight = 900;
137
- const screenCenter = [canvasWidth / 2, canvasHeight / 2];
138
- // Compute the inverse view-projection matrix
139
- const viewProjection = toViewProjection(camera);
140
- const invViewProjection = Mat4x4.inverse(viewProjection);
141
- const ray = screenToWorldRay(screenCenter, invViewProjection, canvasWidth, canvasHeight);
142
- // Ray should start at near plane point (not camera position)
143
- // The actual values depend on the camera setup, so let's just check they're reasonable
144
- expect(Math.abs(ray.a[0])).toBeLessThan(20);
145
- expect(Math.abs(ray.a[1])).toBeLessThan(20);
146
- expect(ray.a[2]).toBeCloseTo(15, 1); // Near plane should be close to camera z
147
- // Ray should point toward the target
148
- const rayDirection = [
149
- ray.b[0] - ray.a[0],
150
- ray.b[1] - ray.a[1],
151
- ray.b[2] - ray.a[2]
152
- ];
153
- // Find the closest point on the ray to the target
154
- const dx = ray.b[0] - ray.a[0];
155
- const dy = ray.b[1] - ray.a[1];
156
- const dz = ray.b[2] - ray.a[2];
157
- const t = ((camera.target[0] - ray.a[0]) * dx +
158
- (camera.target[1] - ray.a[1]) * dy +
159
- (camera.target[2] - ray.a[2]) * dz) / (dx * dx + dy * dy + dz * dz);
160
- const closest = [
161
- ray.a[0] + t * dx,
162
- ray.a[1] + t * dy,
163
- ray.a[2] + t * dz
164
- ];
165
- const dist = Math.sqrt((closest[0] - camera.target[0]) ** 2 +
166
- (closest[1] - camera.target[1]) ** 2 +
167
- (closest[2] - camera.target[2]) ** 2);
168
- expect(dist).toBeLessThan(1.0); // Ray passes close to the target
169
- });
170
- });
171
- //# sourceMappingURL=screen-to-world-ray.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screen-to-world-ray.test.js","sourceRoot":"","sources":["../../../src/graphics/camera/screen-to-world-ray.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Mat4x4 } from "../../math/index.js";
2
- import type { Camera } from "./camera.js";
3
- export declare const toViewProjection: (camera: Camera) => Mat4x4;
@@ -1,8 +0,0 @@
1
- import { Mat4x4 } from "../../math/index.js";
2
- export const toViewProjection = (camera) => {
3
- const perspective = Mat4x4.perspective(camera.fieldOfView, camera.aspect, camera.nearPlane, camera.farPlane);
4
- const lookAt = Mat4x4.lookAt(camera.position, camera.target, camera.up);
5
- const viewProjection = Mat4x4.multiply(perspective, lookAt);
6
- return viewProjection;
7
- };
8
- //# sourceMappingURL=to-view-projection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-view-projection.js","sourceRoot":"","sources":["../../../src/graphics/camera/to-view-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAU,EAAE;IACvD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Vec3 } from "../../math/index.js";
2
- import type { Camera } from "./camera.js";
3
- /**
4
- * Converts a world space coordinate to screen space coordinates and depth.
5
- *
6
- * @param worldPosition - The 3D world position to convert
7
- * @param camera - The camera resource containing position, target, FOV, etc.
8
- * @param canvasWidth - The width of the canvas in pixels
9
- * @param canvasHeight - The height of the canvas in pixels
10
- * @returns Screen space coordinates and depth [x, y, depth] where (0,0) is top-left and (width,height) is bottom-right, depth is 0-1 (near=0, far=1) or 2 for behind camera
11
- */
12
- export declare const worldToScreen: (worldPosition: Vec3, camera: Camera, canvasWidth: number, canvasHeight: number) => [number, number, number];
@@ -1,38 +0,0 @@
1
- import { Mat4x4 } from "../../math/index.js";
2
- /**
3
- * Converts a world space coordinate to screen space coordinates and depth.
4
- *
5
- * @param worldPosition - The 3D world position to convert
6
- * @param camera - The camera resource containing position, target, FOV, etc.
7
- * @param canvasWidth - The width of the canvas in pixels
8
- * @param canvasHeight - The height of the canvas in pixels
9
- * @returns Screen space coordinates and depth [x, y, depth] where (0,0) is top-left and (width,height) is bottom-right, depth is 0-1 (near=0, far=1) or 2 for behind camera
10
- */
11
- export const worldToScreen = (worldPosition, camera, canvasWidth, canvasHeight) => {
12
- // Create the view-projection matrix (same as used in the shader)
13
- const perspective = Mat4x4.perspective(camera.fieldOfView, camera.aspect, camera.nearPlane, camera.farPlane);
14
- const lookAt = Mat4x4.lookAt(camera.position, camera.target, camera.up);
15
- const viewProjection = Mat4x4.multiply(perspective, lookAt);
16
- // Transform world position to clip space
17
- const clipSpace = Mat4x4.multiplyVec4(viewProjection, [...worldPosition, 1]);
18
- // Check if point is behind camera (W < 0)
19
- if (clipSpace[3] <= 0) {
20
- // Return invalid coordinates for points behind camera
21
- return [canvasWidth * 2, canvasHeight * 2, 2.0];
22
- }
23
- // Perform perspective divide to get normalized device coordinates (NDC)
24
- const ndcX = clipSpace[0] / clipSpace[3];
25
- const ndcY = clipSpace[1] / clipSpace[3];
26
- const ndcZ = clipSpace[2] / clipSpace[3];
27
- // Convert NDC to screen coordinates
28
- // NDC: (-1,-1) is bottom-left, (1,1) is top-right
29
- // Screen: (0,0) is top-left, (width,height) is bottom-right
30
- const screenX = (ndcX + 1) * 0.5 * canvasWidth;
31
- const screenY = (1 - ndcY) * 0.5 * canvasHeight; // Flip Y axis
32
- // Calculate normalized depth (0 to 1)
33
- // The perspective matrix uses reversed depth (near=1, far=0)
34
- // So we need to invert the depth calculation
35
- const depth = 1.0 - (ndcZ + 1) * 0.5;
36
- return [screenX, screenY, depth];
37
- };
38
- //# sourceMappingURL=world-to-screen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"world-to-screen.js","sourceRoot":"","sources":["../../../src/graphics/camera/world-to-screen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,aAAmB,EACnB,MAAc,EACd,WAAmB,EACnB,YAAoB,EACI,EAAE;IAC1B,iEAAiE;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE5D,yCAAyC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7E,0CAA0C;IAC1C,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,sDAAsD;QACtD,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,wEAAwE;IACxE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAEzC,oCAAoC;IACpC,kDAAkD;IAClD,4DAA4D;IAC5D,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,cAAc;IAE/D,sCAAsC;IACtC,6DAA6D;IAC7D,6CAA6C;IAC7C,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAErC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,124 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { worldToScreen } from "./world-to-screen.js";
3
- // Helper function to create a standard camera for testing
4
- const createTestCamera = () => ({
5
- aspect: 16 / 9,
6
- fieldOfView: Math.PI / 4,
7
- nearPlane: 0.1,
8
- farPlane: 100.0,
9
- position: [0, 0, 10],
10
- target: [0, 0, 0],
11
- up: [0, 1, 0],
12
- });
13
- describe("worldToScreen", () => {
14
- const camera = createTestCamera();
15
- const canvasWidth = 1600;
16
- const canvasHeight = 900;
17
- it("should convert world position at origin to screen center", () => {
18
- const [screenX, screenY, depth] = worldToScreen([0, 0, 0], camera, canvasWidth, canvasHeight);
19
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
20
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
21
- expect(depth).toBeGreaterThanOrEqual(0);
22
- expect(depth).toBeLessThanOrEqual(1);
23
- });
24
- it("should convert positive X world position to right side of screen", () => {
25
- const [screenX, screenY, depth] = worldToScreen([5, 0, 0], camera, canvasWidth, canvasHeight);
26
- expect(screenX).toBeGreaterThan(canvasWidth / 2);
27
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
28
- expect(depth).toBeGreaterThanOrEqual(0);
29
- expect(depth).toBeLessThanOrEqual(1);
30
- });
31
- it("should convert negative X world position to left side of screen", () => {
32
- const [screenX, screenY, depth] = worldToScreen([-5, 0, 0], camera, canvasWidth, canvasHeight);
33
- expect(screenX).toBeLessThan(canvasWidth / 2);
34
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
35
- expect(depth).toBeGreaterThanOrEqual(0);
36
- expect(depth).toBeLessThanOrEqual(1);
37
- });
38
- it("should convert positive Y world position to top of screen", () => {
39
- const [screenX, screenY, depth] = worldToScreen([0, 5, 0], camera, canvasWidth, canvasHeight);
40
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
41
- expect(screenY).toBeLessThan(canvasHeight / 2);
42
- expect(depth).toBeGreaterThanOrEqual(0);
43
- expect(depth).toBeLessThanOrEqual(1);
44
- });
45
- it("should convert negative Y world position to bottom of screen", () => {
46
- const [screenX, screenY, depth] = worldToScreen([0, -5, 0], camera, canvasWidth, canvasHeight);
47
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
48
- expect(screenY).toBeGreaterThan(canvasHeight / 2);
49
- expect(depth).toBeGreaterThanOrEqual(0);
50
- expect(depth).toBeLessThanOrEqual(1);
51
- });
52
- it("should handle positions behind camera", () => {
53
- const [screenX, screenY, depth] = worldToScreen([0, 0, 20], camera, canvasWidth, canvasHeight);
54
- // Should be behind camera, so screen coordinates might be invalid and depth should be 2
55
- expect(screenX).toBeGreaterThan(canvasWidth);
56
- expect(screenY).toBeGreaterThan(canvasHeight);
57
- expect(depth).toBe(2);
58
- });
59
- it("should handle positions very close to camera", () => {
60
- const [screenX, screenY, depth] = worldToScreen([0, 0, 0.5], camera, canvasWidth, canvasHeight);
61
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
62
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
63
- expect(depth).toBeGreaterThanOrEqual(0);
64
- expect(depth).toBeLessThanOrEqual(1);
65
- });
66
- it("should handle different canvas aspect ratios", () => {
67
- const [squareX, squareY, squareDepth] = worldToScreen([0, 0, 0], camera, 1000, 1000);
68
- const [wideX, wideY, wideDepth] = worldToScreen([0, 0, 0], camera, 2000, 1000);
69
- expect(squareX).toBeCloseTo(500, 0);
70
- expect(squareY).toBeCloseTo(500, 0);
71
- expect(wideX).toBeCloseTo(1000, 0);
72
- expect(wideY).toBeCloseTo(500, 0);
73
- expect(squareDepth).toBeCloseTo(wideDepth, 2);
74
- });
75
- it("should return consistent depth values", () => {
76
- const [x1, y1, depth1] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
77
- const [x2, y2, depth2] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
78
- expect(depth1).toBeCloseTo(depth2, 6);
79
- });
80
- describe("depth calculation", () => {
81
- it("should return ~0.5 for position at near plane", () => {
82
- const [, , depth] = worldToScreen([0, 0, 0.1], camera, canvasWidth, canvasHeight);
83
- expect(depth).toBeCloseTo(0.5, 2);
84
- });
85
- it("should return 2 for position at far plane (behind camera)", () => {
86
- const [, , depth] = worldToScreen([0, 0, 100], camera, canvasWidth, canvasHeight);
87
- expect(depth).toBe(2);
88
- });
89
- it("should return ~0.5 for position at middle distance in front of camera", () => {
90
- const [, , depth] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
91
- expect(depth).toBeCloseTo(0.5, 2);
92
- });
93
- it("should return values between 0 and 1 for positions in range", () => {
94
- const [, , depth1] = worldToScreen([0, 0, 1], camera, canvasWidth, canvasHeight);
95
- const [, , depth2] = worldToScreen([0, 0, 2], camera, canvasWidth, canvasHeight);
96
- const [, , depth3] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
97
- expect(depth1).toBeGreaterThanOrEqual(0);
98
- expect(depth1).toBeLessThanOrEqual(1);
99
- expect(depth2).toBeGreaterThanOrEqual(0);
100
- expect(depth2).toBeLessThanOrEqual(1);
101
- expect(depth3).toBeGreaterThanOrEqual(0);
102
- expect(depth3).toBeLessThanOrEqual(1);
103
- });
104
- it("should handle positions behind camera", () => {
105
- const [, , depth] = worldToScreen([0, 0, 20], camera, canvasWidth, canvasHeight);
106
- expect(depth).toBe(2);
107
- });
108
- it("should handle positions very close to camera", () => {
109
- const [, , depth] = worldToScreen([0, 0, 0.5], camera, canvasWidth, canvasHeight);
110
- expect(depth).toBeCloseTo(0.5, 2);
111
- });
112
- it("should be consistent for visible positions", () => {
113
- const worldPos = [2, 1, 5];
114
- const [screenX, screenY, depth] = worldToScreen(worldPos, camera, canvasWidth, canvasHeight);
115
- expect(depth).toBeGreaterThanOrEqual(0);
116
- expect(depth).toBeLessThanOrEqual(1);
117
- expect(screenX).toBeGreaterThanOrEqual(0);
118
- expect(screenX).toBeLessThanOrEqual(canvasWidth);
119
- expect(screenY).toBeGreaterThanOrEqual(0);
120
- expect(screenY).toBeLessThanOrEqual(canvasHeight);
121
- });
122
- });
123
- });
124
- //# sourceMappingURL=world-to-screen.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"world-to-screen.test.js","sourceRoot":"","sources":["../../../src/graphics/camera/world-to-screen.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { FromSchema, Schema } from "../schema/schema.js";
2
- export declare const createStructGPUBuffer: <S extends Schema>(args: {
3
- device: GPUDevice;
4
- schema: S;
5
- elements: FromSchema<S>[];
6
- usage: GPUBufferUsageFlags;
7
- }) => GPUBuffer;
@@ -1,17 +0,0 @@
1
- import { createStructBuffer, getStructLayout } from "../typed-buffer/index.js";
2
- export const createStructGPUBuffer = (args) => {
3
- const { device, schema, elements, usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST } = args;
4
- const layout = getStructLayout(schema);
5
- const buffer = device.createBuffer({
6
- size: Math.max(elements.length, 1) * layout.size,
7
- usage: usage,
8
- mappedAtCreation: true,
9
- });
10
- const typedBuffer = createStructBuffer(schema, buffer.getMappedRange());
11
- for (let i = 0; i < elements.length; i++) {
12
- typedBuffer.set(i, elements[i]);
13
- }
14
- buffer.unmap();
15
- return buffer;
16
- };
17
- //# sourceMappingURL=create-struct-gpu-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-struct-gpu-buffer.js","sourceRoot":"","sources":["../../src/graphics/create-struct-gpu-buffer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,IAKC,EACQ,EAAE;IACX,MAAM,EACF,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAC3D,GAAG,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAE,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI;QAChD,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA"}
@@ -1,5 +0,0 @@
1
- export declare function extractWGSLBindings(wgsl: string): {
2
- name: string;
3
- binding: number;
4
- group: number;
5
- }[];
@@ -1,10 +0,0 @@
1
- export function extractWGSLBindings(wgsl) {
2
- const regex = /@binding\((\d+)\)\s+@group\((\d+)\)\s+var<[^>]+>\s+(\w+)\s*:/g;
3
- const result = [];
4
- let match;
5
- while ((match = regex.exec(wgsl))) {
6
- result.push({ name: match[3], binding: +match[1], group: +match[2] });
7
- }
8
- return result;
9
- }
10
- //# sourceMappingURL=extract-wgsl-bindings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract-wgsl-bindings.js","sourceRoot":"","sources":["../../src/graphics/extract-wgsl-bindings.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,+DAA+D,CAAC;IAC9E,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1,22 +0,0 @@
1
- import { FromSchema } from "../schema/schema.js";
2
- export declare const FrameSchema: {
3
- readonly type: "object";
4
- readonly properties: {
5
- readonly count: {
6
- readonly type: "number";
7
- readonly default: 0;
8
- };
9
- readonly deltaTime: {
10
- readonly type: "number";
11
- readonly default: 0;
12
- };
13
- };
14
- readonly required: readonly ["count", "deltaTime"];
15
- readonly additionalProperties: false;
16
- readonly default: {
17
- readonly count: number;
18
- readonly deltaTime: number;
19
- };
20
- readonly transient: true;
21
- };
22
- export type Frame = FromSchema<typeof FrameSchema>;
@@ -1,12 +0,0 @@
1
- export const FrameSchema = {
2
- type: "object",
3
- properties: {
4
- count: { type: "number", default: 0 },
5
- deltaTime: { type: "number", default: 0 },
6
- },
7
- required: ["count", "deltaTime"],
8
- additionalProperties: false,
9
- default: { count: 0, deltaTime: 1 / 60 },
10
- transient: true,
11
- };
12
- //# sourceMappingURL=frame.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/graphics/frame.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;QACrC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;KAC5C;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;IAChC,oBAAoB,EAAE,KAAK;IAC3B,OAAO,EAAE,EAAE,KAAK,EAAE,CAAW,EAAE,SAAS,EAAE,CAAC,GAAG,EAAY,EAAE;IAC5D,SAAS,EAAE,IAAI;CACQ,CAAC"}
@@ -1,2 +0,0 @@
1
- import { GraphicsContext } from "./graphics-context.js";
2
- export declare const getWebGPUGraphicsContext: (canvas: HTMLCanvasElement) => Promise<GraphicsContext>;
@@ -1,21 +0,0 @@
1
- export const getWebGPUGraphicsContext = async (canvas) => {
2
- if (!canvas) {
3
- throw new Error('Canvas not found');
4
- }
5
- const adapter = await navigator.gpu?.requestAdapter();
6
- if (!adapter) {
7
- throw new Error('No GPU adapter found');
8
- }
9
- const device = await adapter.requestDevice();
10
- const context = canvas.getContext('webgpu');
11
- if (!context) {
12
- throw new Error('No WebGPU context');
13
- }
14
- context.configure({
15
- device,
16
- format: navigator.gpu.getPreferredCanvasFormat(),
17
- alphaMode: 'premultiplied',
18
- });
19
- return { context, device, canvas };
20
- };
21
- //# sourceMappingURL=get-web-gpu-device-and-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-web-gpu-device-and-context.js","sourceRoot":"","sources":["../../src/graphics/get-web-gpu-device-and-context.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,MAAyB,EAC7C,EAAE;IACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;IAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,SAAS,CAAC;QACd,MAAM;QACN,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE;QAChD,SAAS,EAAE,eAAe;KAC7B,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC,CAAA"}
@@ -1,5 +0,0 @@
1
- export type GraphicsContext = {
2
- readonly canvas: HTMLCanvasElement;
3
- readonly device: GPUDevice;
4
- readonly context: GPUCanvasContext;
5
- };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=graphics-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphics-context.js","sourceRoot":"","sources":["../../src/graphics/graphics-context.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export * from './graphics-context.js';
2
- export * from './get-web-gpu-device-and-context.js';
3
- export * from './create-struct-gpu-buffer.js';
4
- export * from './to-gpu-buffer.js';
5
- export { type Camera } from './camera/index.js';
@@ -1,5 +0,0 @@
1
- export * from './graphics-context.js';
2
- export * from './get-web-gpu-device-and-context.js';
3
- export * from './create-struct-gpu-buffer.js';
4
- export * from './to-gpu-buffer.js';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphics/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC"}
@@ -1,2 +0,0 @@
1
- import { TypedBuffer } from "../typed-buffer/index.js";
2
- export declare const toGPUBuffer: <T>(buffer: TypedBuffer<T>, device: GPUDevice, byteLength?: number, offset?: number) => Promise<GPUBuffer>;
@@ -1,14 +0,0 @@
1
- import { copyToGPUBuffer } from "../typed-buffer/index.js";
2
- export const toGPUBuffer = async (buffer, device, byteLength, offset) => {
3
- const array = buffer.getTypedArray();
4
- byteLength ??= array.byteLength;
5
- offset ??= 0;
6
- const gpuBuffer = device.createBuffer({
7
- size: byteLength,
8
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
9
- mappedAtCreation: true,
10
- });
11
- await copyToGPUBuffer(buffer, device, gpuBuffer, byteLength, offset);
12
- return gpuBuffer;
13
- };
14
- //# sourceMappingURL=to-gpu-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-gpu-buffer.js","sourceRoot":"","sources":["../../src/graphics/to-gpu-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAExE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC5B,MAAsB,EACtB,MAAiB,EACjB,UAAmB,EACnB,MAAe,EACG,EAAE;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,KAAK,CAAC,CAAC;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;QACvD,gBAAgB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrE,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export declare function grow<T extends ArrayBufferLike>(arrayBuffer: T, newCapacity: number): T;
@@ -1,9 +0,0 @@
1
- import { copy } from "./copy.js";
2
- export function grow(arrayBuffer, newCapacity) {
3
- // create a new array buffer using the same constructor, copy the data, and return it
4
- const constructor = arrayBuffer.constructor;
5
- const newArrayBuffer = new constructor(newCapacity);
6
- copy(arrayBuffer, newArrayBuffer);
7
- return newArrayBuffer;
8
- }
9
- //# sourceMappingURL=grow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grow.js","sourceRoot":"","sources":["../../../src/internal/array-buffer-like/grow.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,UAAU,IAAI,CAA4B,WAAc,EAAE,WAAmB;IAC/E,qFAAqF;IACrF,MAAM,WAAW,GAAG,WAAW,CAAC,WAAsC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClC,OAAO,cAAc,CAAC;AAC1B,CAAC"}
@@ -1,9 +0,0 @@
1
- import { LitElement, PropertyValues } from "lit";
2
- import { Service } from "../../service/index.js";
3
- export declare abstract class ServiceApplication<S extends Service> extends LitElement {
4
- protected service: S;
5
- protected abstract createService(): Promise<S>;
6
- updated(changedProperties: PropertyValues): Promise<void>;
7
- disconnectedCallback(): void;
8
- render(): import("lit").TemplateResult<1>;
9
- }