@aura3d/rendering 1.4.5 → 1.5.0

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 (199) hide show
  1. package/dist/CascadedShadowMaps.d.ts +9 -1
  2. package/dist/CascadedShadowMaps.d.ts.map +1 -1
  3. package/dist/CascadedShadowMaps.js +68 -0
  4. package/dist/CascadedShadowMaps.js.map +1 -1
  5. package/dist/ClusteredForwardLighting.d.ts +28 -0
  6. package/dist/ClusteredForwardLighting.d.ts.map +1 -0
  7. package/dist/ClusteredForwardLighting.js +156 -0
  8. package/dist/ClusteredForwardLighting.js.map +1 -0
  9. package/dist/DepthPass.d.ts +14 -1
  10. package/dist/DepthPass.d.ts.map +1 -1
  11. package/dist/DepthPass.js +19 -4
  12. package/dist/DepthPass.js.map +1 -1
  13. package/dist/EnvironmentMapResources.d.ts +59 -1
  14. package/dist/EnvironmentMapResources.d.ts.map +1 -1
  15. package/dist/EnvironmentMapResources.js +140 -100
  16. package/dist/EnvironmentMapResources.js.map +1 -1
  17. package/dist/EnvironmentPlatform.d.ts +3 -2
  18. package/dist/EnvironmentPlatform.d.ts.map +1 -1
  19. package/dist/EnvironmentPlatform.js +99 -44
  20. package/dist/EnvironmentPlatform.js.map +1 -1
  21. package/dist/ForwardPass.d.ts +37 -0
  22. package/dist/ForwardPass.d.ts.map +1 -1
  23. package/dist/ForwardPass.js +234 -7
  24. package/dist/ForwardPass.js.map +1 -1
  25. package/dist/Geometry.d.ts +19 -0
  26. package/dist/Geometry.d.ts.map +1 -1
  27. package/dist/Geometry.js +64 -0
  28. package/dist/Geometry.js.map +1 -1
  29. package/dist/IBL.d.ts.map +1 -1
  30. package/dist/IBL.js +0 -1
  31. package/dist/IBL.js.map +1 -1
  32. package/dist/LightCollector.d.ts +5 -1
  33. package/dist/LightCollector.d.ts.map +1 -1
  34. package/dist/LightCollector.js +16 -3
  35. package/dist/LightCollector.js.map +1 -1
  36. package/dist/LightUniforms.d.ts +26 -1
  37. package/dist/LightUniforms.d.ts.map +1 -1
  38. package/dist/LightUniforms.js +140 -8
  39. package/dist/LightUniforms.js.map +1 -1
  40. package/dist/LightingRig.d.ts +77 -0
  41. package/dist/LightingRig.d.ts.map +1 -1
  42. package/dist/LightingRig.js +100 -11
  43. package/dist/LightingRig.js.map +1 -1
  44. package/dist/MeshConsolidation.d.ts +63 -0
  45. package/dist/MeshConsolidation.d.ts.map +1 -0
  46. package/dist/MeshConsolidation.js +251 -0
  47. package/dist/MeshConsolidation.js.map +1 -0
  48. package/dist/PMREM.d.ts +13 -1
  49. package/dist/PMREM.d.ts.map +1 -1
  50. package/dist/PMREM.js +18 -4
  51. package/dist/PMREM.js.map +1 -1
  52. package/dist/PostProcessPass.d.ts +24 -2
  53. package/dist/PostProcessPass.d.ts.map +1 -1
  54. package/dist/PostProcessPass.js +136 -18
  55. package/dist/PostProcessPass.js.map +1 -1
  56. package/dist/PrimitiveSubmissionAudit.d.ts +195 -0
  57. package/dist/PrimitiveSubmissionAudit.d.ts.map +1 -0
  58. package/dist/PrimitiveSubmissionAudit.js +280 -0
  59. package/dist/PrimitiveSubmissionAudit.js.map +1 -0
  60. package/dist/ProductTurntableFixtures.d.ts.map +1 -1
  61. package/dist/ProductTurntableFixtures.js +93 -13
  62. package/dist/ProductTurntableFixtures.js.map +1 -1
  63. package/dist/ReflectionProbe.d.ts +59 -0
  64. package/dist/ReflectionProbe.d.ts.map +1 -1
  65. package/dist/ReflectionProbe.js +224 -0
  66. package/dist/ReflectionProbe.js.map +1 -1
  67. package/dist/ReflectionSurfaces.d.ts +4 -2
  68. package/dist/ReflectionSurfaces.d.ts.map +1 -1
  69. package/dist/ReflectionSurfaces.js +13 -8
  70. package/dist/ReflectionSurfaces.js.map +1 -1
  71. package/dist/RenderBackend.d.ts +1 -1
  72. package/dist/RenderBackend.d.ts.map +1 -1
  73. package/dist/RenderBackend.js +5 -1
  74. package/dist/RenderBackend.js.map +1 -1
  75. package/dist/RenderDevice.d.ts +13 -2
  76. package/dist/RenderDevice.d.ts.map +1 -1
  77. package/dist/RenderDevice.js +5 -2
  78. package/dist/RenderDevice.js.map +1 -1
  79. package/dist/Renderer.d.ts +41 -1
  80. package/dist/Renderer.d.ts.map +1 -1
  81. package/dist/Renderer.js +406 -61
  82. package/dist/Renderer.js.map +1 -1
  83. package/dist/RendererPostprocessPlan.d.ts +10 -3
  84. package/dist/RendererPostprocessPlan.d.ts.map +1 -1
  85. package/dist/RendererPostprocessPlan.js +25 -5
  86. package/dist/RendererPostprocessPlan.js.map +1 -1
  87. package/dist/RendererVisualPipelineReport.d.ts +3 -2
  88. package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
  89. package/dist/RendererVisualPipelineReport.js +2 -0
  90. package/dist/RendererVisualPipelineReport.js.map +1 -1
  91. package/dist/ScreenSpaceLineMaterial.d.ts +34 -0
  92. package/dist/ScreenSpaceLineMaterial.d.ts.map +1 -0
  93. package/dist/ScreenSpaceLineMaterial.js +93 -0
  94. package/dist/ScreenSpaceLineMaterial.js.map +1 -0
  95. package/dist/ShaderChunks.d.ts +7 -0
  96. package/dist/ShaderChunks.d.ts.map +1 -1
  97. package/dist/ShaderChunks.js +137 -0
  98. package/dist/ShaderChunks.js.map +1 -1
  99. package/dist/ShaderLibrary.d.ts +17 -0
  100. package/dist/ShaderLibrary.d.ts.map +1 -1
  101. package/dist/ShaderLibrary.js +940 -98
  102. package/dist/ShaderLibrary.js.map +1 -1
  103. package/dist/ShadowPass.d.ts +10 -0
  104. package/dist/ShadowPass.d.ts.map +1 -1
  105. package/dist/ShadowPass.js +8 -1
  106. package/dist/ShadowPass.js.map +1 -1
  107. package/dist/SkinnedLitMaterial.d.ts +6 -0
  108. package/dist/SkinnedLitMaterial.d.ts.map +1 -1
  109. package/dist/SkinnedLitMaterial.js +22 -8
  110. package/dist/SkinnedLitMaterial.js.map +1 -1
  111. package/dist/SkinnedUnlitMaterial.d.ts +8 -0
  112. package/dist/SkinnedUnlitMaterial.d.ts.map +1 -1
  113. package/dist/SkinnedUnlitMaterial.js +26 -9
  114. package/dist/SkinnedUnlitMaterial.js.map +1 -1
  115. package/dist/SpecularPrefilter.d.ts +42 -0
  116. package/dist/SpecularPrefilter.d.ts.map +1 -0
  117. package/dist/SpecularPrefilter.js +480 -0
  118. package/dist/SpecularPrefilter.js.map +1 -0
  119. package/dist/TerrainFixtures.d.ts +24 -0
  120. package/dist/TerrainFixtures.d.ts.map +1 -1
  121. package/dist/TerrainFixtures.js +96 -0
  122. package/dist/TerrainFixtures.js.map +1 -1
  123. package/dist/Texture.d.ts +7 -0
  124. package/dist/Texture.d.ts.map +1 -1
  125. package/dist/Texture.js +9 -0
  126. package/dist/Texture.js.map +1 -1
  127. package/dist/VertexFormat.d.ts +34 -1
  128. package/dist/VertexFormat.d.ts.map +1 -1
  129. package/dist/VertexFormat.js +61 -0
  130. package/dist/VertexFormat.js.map +1 -1
  131. package/dist/WebGL2Device.d.ts +48 -0
  132. package/dist/WebGL2Device.d.ts.map +1 -1
  133. package/dist/WebGL2Device.js +1298 -44
  134. package/dist/WebGL2Device.js.map +1 -1
  135. package/dist/WebGPUDevice.d.ts +7 -2
  136. package/dist/WebGPUDevice.d.ts.map +1 -1
  137. package/dist/WebGPUDevice.js +111 -17
  138. package/dist/WebGPUDevice.js.map +1 -1
  139. package/dist/WebGPUSkinningLimits.d.ts +14 -0
  140. package/dist/WebGPUSkinningLimits.d.ts.map +1 -0
  141. package/dist/WebGPUSkinningLimits.js +14 -0
  142. package/dist/WebGPUSkinningLimits.js.map +1 -0
  143. package/dist/cartoon/CartoonMaterialStyle.d.ts +19 -0
  144. package/dist/cartoon/CartoonMaterialStyle.d.ts.map +1 -0
  145. package/dist/cartoon/CartoonMaterialStyle.js +13 -0
  146. package/dist/cartoon/CartoonMaterialStyle.js.map +1 -0
  147. package/dist/cartoon/CartoonRenderPreset.d.ts +36 -0
  148. package/dist/cartoon/CartoonRenderPreset.d.ts.map +1 -0
  149. package/dist/cartoon/CartoonRenderPreset.js +23 -0
  150. package/dist/cartoon/CartoonRenderPreset.js.map +1 -0
  151. package/dist/cartoon/CartoonToonMaterial.d.ts +130 -0
  152. package/dist/cartoon/CartoonToonMaterial.d.ts.map +1 -0
  153. package/dist/cartoon/CartoonToonMaterial.js +303 -0
  154. package/dist/cartoon/CartoonToonMaterial.js.map +1 -0
  155. package/dist/cartoon/CartoonVisualQuality.d.ts +28 -0
  156. package/dist/cartoon/CartoonVisualQuality.d.ts.map +1 -0
  157. package/dist/cartoon/CartoonVisualQuality.js +39 -0
  158. package/dist/cartoon/CartoonVisualQuality.js.map +1 -0
  159. package/dist/cartoon/applyCartoonRenderPreset.d.ts +79 -0
  160. package/dist/cartoon/applyCartoonRenderPreset.d.ts.map +1 -0
  161. package/dist/cartoon/applyCartoonRenderPreset.js +88 -0
  162. package/dist/cartoon/applyCartoonRenderPreset.js.map +1 -0
  163. package/dist/cartoon/index.d.ts +6 -0
  164. package/dist/cartoon/index.d.ts.map +1 -0
  165. package/dist/cartoon/index.js +6 -0
  166. package/dist/cartoon/index.js.map +1 -0
  167. package/dist/index.d.ts +26 -15
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +15 -9
  170. package/dist/index.js.map +1 -1
  171. package/dist/postprocess/NativeLdrEffectLuts.d.ts +93 -0
  172. package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -0
  173. package/dist/postprocess/NativeLdrEffectLuts.js +202 -0
  174. package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -0
  175. package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  176. package/dist/production-runtime/PBRHDRPipeline.js +3 -0
  177. package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
  178. package/dist/production-runtime/ProductionRendererTypes.d.ts +1 -0
  179. package/dist/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
  180. package/dist/production-runtime/ProductionRendererTypes.js.map +1 -1
  181. package/dist/production-runtime/ProductionWebGL2Renderer.d.ts.map +1 -1
  182. package/dist/production-runtime/ProductionWebGL2Renderer.js +5 -3
  183. package/dist/production-runtime/ProductionWebGL2Renderer.js.map +1 -1
  184. package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  185. package/dist/production-runtime/ProductionWebGPURenderer.js +9 -5
  186. package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  187. package/dist/production-runtime/TransmissionBackdropCapture.d.ts +5 -0
  188. package/dist/production-runtime/TransmissionBackdropCapture.d.ts.map +1 -1
  189. package/dist/production-runtime/TransmissionBackdropCapture.js +40 -0
  190. package/dist/production-runtime/TransmissionBackdropCapture.js.map +1 -1
  191. package/dist/production-runtime/environment/HDRLoader.d.ts +6 -0
  192. package/dist/production-runtime/environment/HDRLoader.d.ts.map +1 -1
  193. package/dist/production-runtime/environment/HDRLoader.js +19 -0
  194. package/dist/production-runtime/environment/HDRLoader.js.map +1 -1
  195. package/dist/production-runtime/index.d.ts +3 -1
  196. package/dist/production-runtime/index.d.ts.map +1 -1
  197. package/dist/production-runtime/index.js +1 -0
  198. package/dist/production-runtime/index.js.map +1 -1
  199. package/package.json +3 -3
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Per-primitive submission diagnostics.
3
+ *
4
+ * ## Why an aggregate draw-call count was not enough
5
+ *
6
+ * The renderer already reports `drawCalls`, and that single number is what finally *disproved* the
7
+ * "renderer drops secondary glTF mesh primitives" diagnosis: `turboRaceCar` reported `drawCalls: 10` for a
8
+ * 5-primitive asset (5 primitives x 2 passes), so nothing was being dropped.
9
+ *
10
+ * But arriving at that took reading a probe JSON and reasoning about pass multipliers by hand. A count cannot
11
+ * answer the questions that actually matter when a part is missing from a frame:
12
+ *
13
+ * - *which* primitive is absent, by label
14
+ * - whether it was skipped for a missing geometry/material binding rather than never enqueued
15
+ * - whether its transform is degenerate (a zero-scale matrix draws nothing and reports no error)
16
+ * - whether it is transparent, and therefore ordering-dependent
17
+ * - whether its index range exceeds its vertex count, which silently truncates
18
+ *
19
+ * Each of those was hypothesised during the false diagnosis and checked by hand. This module makes them a
20
+ * measurement instead, so the next investigation starts from a table rather than from a count.
21
+ *
22
+ * ## Scope boundary, stated plainly
23
+ *
24
+ * This audits the **submission path**: what the renderer was asked to draw and whether each request is
25
+ * internally coherent. It is not GPU evidence. It cannot prove a pixel was written, and it deliberately does
26
+ * not claim to -- rendered proof comes from retained screenshots. `WebGL2Device`'s `errorCheckMode: "strict"`
27
+ * remains the source of real `gl.getError()` results; a caller may pass those in via `glErrorsByLabel`.
28
+ */
29
+ import type { Bounds3 } from "./Geometry.js";
30
+ import type { RenderItem } from "./ForwardPass.js";
31
+ /** Why a primitive would not reach the GPU, or `null` when it is submittable. */
32
+ export type PrimitiveSubmissionBlocker =
33
+ /** Geometry carries no vertices, so there is nothing to rasterize. */
34
+ "empty-vertex-buffer"
35
+ /** An index range reaches beyond the available indices and would truncate or read garbage. */
36
+ | "index-range-overflow"
37
+ /** An index value exceeds the vertex count, which draws undefined geometry. */
38
+ | "index-out-of-vertex-range"
39
+ /** The model matrix is not finite; a NaN transform silently removes geometry with no GL error. */
40
+ | "non-finite-transform"
41
+ /** The model matrix collapses the primitive to zero volume. */
42
+ | "degenerate-transform"
43
+ /** No material bound, so the pass has no shader to draw with. */
44
+ | "missing-material";
45
+ /**
46
+ * Per-primitive frustum result.
47
+ *
48
+ * ## Why a three-way verdict rather than a boolean
49
+ *
50
+ * The renderer already counts `culledObjects` and `frustumTestedObjects` in aggregate, but a count cannot say
51
+ * *which* primitive was culled. That left a real ambiguity in the per-draw GL proof: a primitive reporting
52
+ * `writtenPixels: 0` with a null pixel bounding box could equally be culled before submission, submitted but
53
+ * drawn entirely off-screen, or genuinely broken. Those three demand different responses -- expected behaviour,
54
+ * a camera-framing bug, and a renderer bug respectively -- and conflating them is how the original
55
+ * "renderer drops wheel primitives" misdiagnosis became plausible.
56
+ *
57
+ * `not-tested` is distinct from `inside` on purpose: items with a draw range or morph targets are deliberately
58
+ * exempt from culling, and reporting them as "inside the frustum" would claim a test that never ran.
59
+ */
60
+ export type PrimitiveFrustumVerdict =
61
+ /** World bounds intersect the frustum; the primitive should reach the rasterizer. */
62
+ "inside"
63
+ /** World bounds lie entirely outside the frustum; the renderer would legitimately skip it. */
64
+ | "culled"
65
+ /** Exempt from culling (draw range or morph targets), so no test was performed. */
66
+ | "not-tested"
67
+ /** No camera was supplied, so the question was not asked. */
68
+ | "no-camera";
69
+ /** One primitive's submission record. */
70
+ export interface PrimitiveSubmissionRecord {
71
+ /** Caller-supplied label, or a synthesised index when absent. */
72
+ readonly label: string;
73
+ /**
74
+ * Source identity, for correlating a record back to the asset and glTF primitive it came from.
75
+ *
76
+ * The original missing-wheel investigation had to correlate "which primitive did not draw" against a glTF by
77
+ * hand, because the audit recorded only a label. `assetId` / `meshIndex` / `primitiveIndex` are optional
78
+ * because a synthetic or procedurally-built primitive has no glTF provenance -- but when a loader supplies
79
+ * them, "wheelBackL did not draw" becomes "mesh 3 primitive 0 of turboRaceCar did not draw".
80
+ */
81
+ readonly assetId: string | undefined;
82
+ readonly meshIndex: number | undefined;
83
+ readonly primitiveIndex: number | undefined;
84
+ /** Submission order index, always present, so every record is addressable even without glTF provenance. */
85
+ readonly submissionIndex: number;
86
+ /**
87
+ * Index component type as reported by the buffer, e.g. `uint16` / `uint32`.
88
+ *
89
+ * Recorded because an index-type downcast was one of the hypotheses for the missing wheels: a uint32 index
90
+ * buffer silently narrowed to uint16 draws garbage or nothing for vertices past 65535.
91
+ */
92
+ readonly indexType: string | undefined;
93
+ /**
94
+ * Material alpha mode, cutoff and effective opacity.
95
+ *
96
+ * These three decide whether a primitive is discarded by blending or alpha testing rather than by geometry --
97
+ * the failure mode where an opaque tyre mesh vanishes because it inherited a transparent material. `blended`
98
+ * already records *that* a material blends; these record *why* and *how much*.
99
+ */
100
+ readonly alphaMode: string | undefined;
101
+ readonly alphaCutoff: number | undefined;
102
+ readonly effectiveOpacity: number;
103
+ /**
104
+ * Whether every texture the material references is uploaded and ready.
105
+ *
106
+ * `undefined` when the caller did not report texture state. A primitive drawing with an unready texture is a
107
+ * distinct failure from one that never drew, and conflating them sent the original investigation down the
108
+ * wrong path.
109
+ */
110
+ readonly texturesReady: boolean | undefined;
111
+ readonly vertexCount: number;
112
+ readonly indexCount: number;
113
+ readonly topology: string;
114
+ /** Instance count; 1 for non-instanced primitives. */
115
+ readonly instanceCount: number;
116
+ readonly materialName: string | undefined;
117
+ /** True when the material blends, making draw order significant. */
118
+ readonly blended: boolean;
119
+ /** Local-space bounds as reported by the geometry. */
120
+ readonly localBounds: Bounds3;
121
+ /** Whether a model matrix was supplied at all. */
122
+ readonly hasModelMatrix: boolean;
123
+ /** Uniform scale magnitude implied by the model matrix, or 1 when none was supplied. */
124
+ readonly transformScale: number;
125
+ readonly skinned: boolean;
126
+ readonly morphed: boolean;
127
+ /** GL error reported for this primitive, when the caller supplied real device errors. */
128
+ readonly glError: string | undefined;
129
+ /** Frustum result for this primitive against the supplied camera matrix. */
130
+ readonly frustum: PrimitiveFrustumVerdict;
131
+ /** World-space bounds the frustum test used, so an unexpected verdict is diagnosable. */
132
+ readonly worldBounds: Bounds3 | undefined;
133
+ /** Reasons this primitive would not draw. Empty means submittable. */
134
+ readonly blockers: readonly PrimitiveSubmissionBlocker[];
135
+ }
136
+ export interface PrimitiveSubmissionAudit {
137
+ readonly kind: "aura-primitive-submission-audit";
138
+ /** Every primitive handed in, in submission order. */
139
+ readonly records: readonly PrimitiveSubmissionRecord[];
140
+ /** Primitives with no blockers. */
141
+ readonly submittable: number;
142
+ /** Primitives that would not reach the GPU. */
143
+ readonly blocked: number;
144
+ /** Distinct materials in use, which bounds achievable batching. */
145
+ readonly distinctMaterials: number;
146
+ /** Labels of blocked primitives, so a failure names the missing part. */
147
+ readonly blockedLabels: readonly string[];
148
+ /** Primitives whose world bounds fall outside the frustum. */
149
+ readonly culled: number;
150
+ /** Labels of culled primitives, so "missing from the frame" is attributable rather than inferred. */
151
+ readonly culledLabels: readonly string[];
152
+ /**
153
+ * Expected draw calls for a given pass count.
154
+ *
155
+ * Encoded because reading `drawCalls: 10` and knowing it means "5 primitives, 2 passes" required prior
156
+ * knowledge of the pipeline. Making the multiplier explicit is what turns that number into evidence.
157
+ */
158
+ expectedDrawCalls(passCount: number): number;
159
+ }
160
+ export interface PrimitiveSubmissionAuditOptions {
161
+ /** Real `gl.getError()` results keyed by primitive label, from a device in `strict` error-check mode. */
162
+ readonly glErrorsByLabel?: Readonly<Record<string, string>> | undefined;
163
+ /**
164
+ * View-projection matrix to test each primitive's world bounds against.
165
+ *
166
+ * Supplied as a raw matrix rather than a camera object so a caller can audit against whatever matrix it actually
167
+ * rendered with -- including one it built by hand -- instead of a reconstruction that might differ.
168
+ */
169
+ readonly viewProjectionMatrix?: Float32Array | readonly number[] | undefined;
170
+ /**
171
+ * glTF provenance per primitive label, so a record can name the asset and primitive it came from.
172
+ *
173
+ * Supplied by the caller rather than read off the render item because `RenderItem` is renderer-facing and
174
+ * deliberately knows nothing about glTF. A loader that has the mapping can hand it in; one that does not
175
+ * still gets a complete audit with `undefined` provenance.
176
+ */
177
+ readonly provenanceByLabel?: Readonly<Record<string, {
178
+ readonly assetId?: string | undefined;
179
+ readonly meshIndex?: number | undefined;
180
+ readonly primitiveIndex?: number | undefined;
181
+ }>> | undefined;
182
+ /** Texture-readiness per primitive label, from whatever tracks upload state. */
183
+ readonly texturesReadyByLabel?: Readonly<Record<string, boolean>> | undefined;
184
+ }
185
+ /**
186
+ * Audit a render-item list for submission coherence.
187
+ *
188
+ * Pure and synchronous: it inspects the same structures the forward pass consumes, so it can run in a unit test
189
+ * without a device, a canvas, or a browser. That matters because the failure it guards against was diagnosed
190
+ * with a browser and still reached the wrong conclusion.
191
+ */
192
+ export declare function auditPrimitiveSubmission(items: readonly RenderItem[], options?: PrimitiveSubmissionAuditOptions): PrimitiveSubmissionAudit;
193
+ /** Render an audit as human-readable lines, one per primitive. */
194
+ export declare function formatPrimitiveSubmissionAudit(audit: PrimitiveSubmissionAudit): readonly string[];
195
+ //# sourceMappingURL=PrimitiveSubmissionAudit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveSubmissionAudit.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/PrimitiveSubmissionAudit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Per-primitive submission diagnostics.
3
+ *
4
+ * ## Why an aggregate draw-call count was not enough
5
+ *
6
+ * The renderer already reports `drawCalls`, and that single number is what finally *disproved* the
7
+ * "renderer drops secondary glTF mesh primitives" diagnosis: `turboRaceCar` reported `drawCalls: 10` for a
8
+ * 5-primitive asset (5 primitives x 2 passes), so nothing was being dropped.
9
+ *
10
+ * But arriving at that took reading a probe JSON and reasoning about pass multipliers by hand. A count cannot
11
+ * answer the questions that actually matter when a part is missing from a frame:
12
+ *
13
+ * - *which* primitive is absent, by label
14
+ * - whether it was skipped for a missing geometry/material binding rather than never enqueued
15
+ * - whether its transform is degenerate (a zero-scale matrix draws nothing and reports no error)
16
+ * - whether it is transparent, and therefore ordering-dependent
17
+ * - whether its index range exceeds its vertex count, which silently truncates
18
+ *
19
+ * Each of those was hypothesised during the false diagnosis and checked by hand. This module makes them a
20
+ * measurement instead, so the next investigation starts from a table rather than from a count.
21
+ *
22
+ * ## Scope boundary, stated plainly
23
+ *
24
+ * This audits the **submission path**: what the renderer was asked to draw and whether each request is
25
+ * internally coherent. It is not GPU evidence. It cannot prove a pixel was written, and it deliberately does
26
+ * not claim to -- rendered proof comes from retained screenshots. `WebGL2Device`'s `errorCheckMode: "strict"`
27
+ * remains the source of real `gl.getError()` results; a caller may pass those in via `glErrorsByLabel`.
28
+ */
29
+ /**
30
+ * Audit a render-item list for submission coherence.
31
+ *
32
+ * Pure and synchronous: it inspects the same structures the forward pass consumes, so it can run in a unit test
33
+ * without a device, a canvas, or a browser. That matters because the failure it guards against was diagnosed
34
+ * with a browser and still reached the wrong conclusion.
35
+ */
36
+ export function auditPrimitiveSubmission(items, options = {}) {
37
+ const records = [];
38
+ for (const [index, item] of items.entries()) {
39
+ const label = item.label ?? `primitive-${index}`;
40
+ const geometry = item.geometry;
41
+ const vertexCount = geometry.vertexBuffer.vertexCount;
42
+ const indexBuffer = geometry.indexBuffer;
43
+ const availableIndices = indexBuffer?.data.length ?? 0;
44
+ const drawRange = item.drawRange;
45
+ const indexCount = drawRange?.count ?? availableIndices;
46
+ const material = item.material;
47
+ /*
48
+ * `RenderMaterial` is `Material | MaterialInstance`, and only `Material` carries `name`/`renderState`
49
+ * directly -- an instance wraps a `baseMaterial`. Resolving through the wrapper means an instanced material
50
+ * is audited by the same rules as a direct one, rather than silently reporting `<none>`.
51
+ */
52
+ const baseMaterial = material && "baseMaterial" in material ? material.baseMaterial : material;
53
+ const blockers = [];
54
+ if (vertexCount <= 0)
55
+ blockers.push("empty-vertex-buffer");
56
+ if (!material)
57
+ blockers.push("missing-material");
58
+ if (indexBuffer) {
59
+ const start = drawRange?.start ?? 0;
60
+ if (start + indexCount > availableIndices)
61
+ blockers.push("index-range-overflow");
62
+ // An index beyond the vertex count draws undefined geometry rather than failing loudly.
63
+ let maxIndex = -1;
64
+ for (const value of indexBuffer.data)
65
+ maxIndex = Math.max(maxIndex, value);
66
+ if (vertexCount > 0 && maxIndex >= vertexCount)
67
+ blockers.push("index-out-of-vertex-range");
68
+ }
69
+ const modelMatrix = item.modelMatrix;
70
+ let transformScale = 1;
71
+ if (modelMatrix) {
72
+ const values = Array.from(modelMatrix);
73
+ if (values.length !== 16 || !values.every((value) => Number.isFinite(value))) {
74
+ blockers.push("non-finite-transform");
75
+ }
76
+ else {
77
+ // Magnitude of the three basis vectors: a zero on any axis flattens the primitive away.
78
+ const axisLengths = [0, 1, 2].map((axis) => Math.hypot(values[axis * 4] ?? 0, values[axis * 4 + 1] ?? 0, values[axis * 4 + 2] ?? 0));
79
+ transformScale = Math.min(...axisLengths);
80
+ if (transformScale <= 1e-9)
81
+ blockers.push("degenerate-transform");
82
+ }
83
+ }
84
+ /*
85
+ * Alpha state, read from the real material APIs rather than guessed.
86
+ *
87
+ * These decide whether a primitive is discarded by blending or alpha testing rather than by geometry -- the
88
+ * failure mode where an opaque tyre mesh vanishes because it inherited a transparent material. `blended`
89
+ * already records *that* a material blends; these record why and by how much.
90
+ *
91
+ * `alphaCutoff` comes from the `u_alphaCutoff` uniform the PBR/unlit materials declare, and opacity from the
92
+ * alpha channel of `u_baseColorFactor`. `effectiveOpacity` defaults to 1 when unstated: reporting an unknown
93
+ * opacity as 0 would invent a discard reason the renderer never applied.
94
+ */
95
+ const cutoffParameter = baseMaterial?.getParameter?.("u_alphaCutoff");
96
+ const alphaCutoff = typeof cutoffParameter === "number" ? cutoffParameter : undefined;
97
+ const baseColorFactor = baseMaterial?.getParameter?.("u_baseColorFactor");
98
+ const declaredAlpha = Array.isArray(baseColorFactor) && baseColorFactor.length >= 4
99
+ ? baseColorFactor[3]
100
+ : undefined;
101
+ const effectiveOpacity = typeof declaredAlpha === "number" && Number.isFinite(declaredAlpha)
102
+ ? Math.min(1, Math.max(0, declaredAlpha))
103
+ : 1;
104
+ /*
105
+ * Alpha mode, derived from the state the renderer actually uses.
106
+ *
107
+ * There is no glTF-style `alphaMode` field on `RenderState`; the equivalent facts are `blend` plus a nonzero
108
+ * cutoff. Mapping them to glTF's vocabulary keeps the record readable next to a source asset without
109
+ * inventing a field the renderer does not have.
110
+ */
111
+ const alphaMode = baseMaterial?.renderState?.blend === true
112
+ ? "BLEND"
113
+ : alphaCutoff !== undefined && alphaCutoff > 0 ? "MASK" : "OPAQUE";
114
+ // `IndexBuffer` already tracks its own component type, so this is read rather than inferred.
115
+ const indexType = indexBuffer?.type;
116
+ const provenance = options.provenanceByLabel?.[label];
117
+ const frustumResult = evaluateFrustum(item, geometry.bounds, options.viewProjectionMatrix);
118
+ records.push({
119
+ label,
120
+ assetId: provenance?.assetId,
121
+ meshIndex: provenance?.meshIndex,
122
+ primitiveIndex: provenance?.primitiveIndex,
123
+ submissionIndex: index,
124
+ indexType,
125
+ alphaMode,
126
+ alphaCutoff,
127
+ effectiveOpacity,
128
+ texturesReady: options.texturesReadyByLabel?.[label],
129
+ vertexCount,
130
+ indexCount,
131
+ topology: geometry.topology,
132
+ instanceCount: instanceCountFor(item),
133
+ materialName: baseMaterial?.name,
134
+ blended: baseMaterial?.renderState?.blend === true,
135
+ localBounds: geometry.bounds,
136
+ hasModelMatrix: Boolean(modelMatrix),
137
+ transformScale: round4(transformScale),
138
+ skinned: Boolean(item.skinning),
139
+ morphed: Boolean(item.morphTargets && (item.morphWeights?.length ?? 0) > 0),
140
+ glError: options.glErrorsByLabel?.[label],
141
+ frustum: frustumResult.verdict,
142
+ worldBounds: frustumResult.worldBounds,
143
+ blockers
144
+ });
145
+ }
146
+ const blockedRecords = records.filter((record) => record.blockers.length > 0);
147
+ const culledRecords = records.filter((record) => record.frustum === "culled");
148
+ const distinctMaterials = new Set(records.map((record) => record.materialName ?? "<none>")).size;
149
+ return {
150
+ kind: "aura-primitive-submission-audit",
151
+ records,
152
+ submittable: records.length - blockedRecords.length,
153
+ blocked: blockedRecords.length,
154
+ distinctMaterials,
155
+ blockedLabels: blockedRecords.map((record) => record.label),
156
+ culled: culledRecords.length,
157
+ culledLabels: culledRecords.map((record) => record.label),
158
+ expectedDrawCalls: (passCount) => Math.max(0, Math.trunc(passCount)) * (records.length - blockedRecords.length)
159
+ };
160
+ }
161
+ /**
162
+ * Instance count for a render item.
163
+ *
164
+ * `instanceTransforms` is a flat mat4 array, so its length divided by 16 is the instance count. Returns 1 for a
165
+ * non-instanced item, matching how a single draw is counted.
166
+ */
167
+ function instanceCountFor(item) {
168
+ const transforms = item.instanceTransforms;
169
+ if (!transforms)
170
+ return 1;
171
+ const length = Array.isArray(transforms) ? transforms.length : transforms.length;
172
+ return Math.max(1, Math.trunc(length / 16));
173
+ }
174
+ function round4(value) {
175
+ const rounded = Math.round(value * 10_000) / 10_000;
176
+ return rounded === 0 ? 0 : rounded;
177
+ }
178
+ /** Render an audit as human-readable lines, one per primitive. */
179
+ export function formatPrimitiveSubmissionAudit(audit) {
180
+ const lines = [
181
+ `primitives=${audit.records.length} submittable=${audit.submittable} blocked=${audit.blocked} ` +
182
+ `culled=${audit.culled} materials=${audit.distinctMaterials}`
183
+ ];
184
+ for (const record of audit.records) {
185
+ const status = record.blockers.length === 0 ? "OK " : "BLOCKED";
186
+ lines.push(` ${status} ${record.label} verts=${record.vertexCount} idx=${record.indexCount} ` +
187
+ `mat=${record.materialName ?? "<none>"}${record.blended ? " (blended)" : ""} scale=${record.transformScale} ` +
188
+ `frustum=${record.frustum}`);
189
+ for (const blocker of record.blockers)
190
+ lines.push(` x ${blocker}`);
191
+ if (record.glError)
192
+ lines.push(` x gl-error: ${record.glError}`);
193
+ }
194
+ return lines;
195
+ }
196
+ /**
197
+ * Classify one primitive against a view-projection frustum.
198
+ *
199
+ * Transforms the geometry's local bounds by the model matrix into world space, then tests the resulting AABB
200
+ * against the six frustum planes extracted from the matrix. The transformed AABB is returned alongside the verdict
201
+ * because "culled" is only actionable if you can see *where* the renderer thought the primitive was -- a wrong
202
+ * model matrix and a wrong camera produce the same verdict but need different fixes.
203
+ */
204
+ function evaluateFrustum(item, localBounds, viewProjectionMatrix) {
205
+ if (!viewProjectionMatrix)
206
+ return { verdict: "no-camera", worldBounds: undefined };
207
+ /*
208
+ * Mirrors the renderer's own exemption rule (`isFrustumCullableRenderItem`): a draw range or morph targets make
209
+ * the geometry's static bounds an unreliable proxy, so those items are never culled. Reporting them as `inside`
210
+ * would claim a test that did not run.
211
+ */
212
+ if (item.drawRange !== undefined || item.morphTargets !== undefined || item.morphWeights !== undefined) {
213
+ return { verdict: "not-tested", worldBounds: undefined };
214
+ }
215
+ const matrix = Array.from(viewProjectionMatrix);
216
+ if (matrix.length !== 16 || !matrix.every((value) => Number.isFinite(value))) {
217
+ return { verdict: "no-camera", worldBounds: undefined };
218
+ }
219
+ const worldBounds = transformBounds(localBounds, item.modelMatrix);
220
+ if (!worldBounds)
221
+ return { verdict: "not-tested", worldBounds: undefined };
222
+ return {
223
+ verdict: boundsIntersectFrustum(worldBounds, matrix) ? "inside" : "culled",
224
+ worldBounds
225
+ };
226
+ }
227
+ /** Transform local AABB corners by a model matrix and re-bound them in world space. */
228
+ function transformBounds(bounds, modelMatrix) {
229
+ const matrix = modelMatrix ? Array.from(modelMatrix) : IDENTITY_MATRIX;
230
+ if (matrix.length !== 16 || !matrix.every((value) => Number.isFinite(value)))
231
+ return undefined;
232
+ const min = [Infinity, Infinity, Infinity];
233
+ const max = [-Infinity, -Infinity, -Infinity];
234
+ for (const x of [bounds.min[0], bounds.max[0]]) {
235
+ for (const y of [bounds.min[1], bounds.max[1]]) {
236
+ for (const z of [bounds.min[2], bounds.max[2]]) {
237
+ const worldX = (matrix[0] ?? 0) * x + (matrix[4] ?? 0) * y + (matrix[8] ?? 0) * z + (matrix[12] ?? 0);
238
+ const worldY = (matrix[1] ?? 0) * x + (matrix[5] ?? 0) * y + (matrix[9] ?? 0) * z + (matrix[13] ?? 0);
239
+ const worldZ = (matrix[2] ?? 0) * x + (matrix[6] ?? 0) * y + (matrix[10] ?? 0) * z + (matrix[14] ?? 0);
240
+ min[0] = Math.min(min[0], worldX);
241
+ max[0] = Math.max(max[0], worldX);
242
+ min[1] = Math.min(min[1], worldY);
243
+ max[1] = Math.max(max[1], worldY);
244
+ min[2] = Math.min(min[2], worldZ);
245
+ max[2] = Math.max(max[2], worldZ);
246
+ }
247
+ }
248
+ }
249
+ return min.every(Number.isFinite) ? { min, max } : undefined;
250
+ }
251
+ /**
252
+ * Six-plane AABB frustum test.
253
+ *
254
+ * Uses the standard clip-space plane extraction and the "nearest corner" test: for each plane, pick the AABB corner
255
+ * furthest along the plane normal, and reject only when even that corner is behind the plane. Testing the nearest
256
+ * corner instead would cull boxes that straddle a plane, which is a false negative that hides geometry.
257
+ */
258
+ function boundsIntersectFrustum(bounds, m) {
259
+ const planes = [
260
+ [(m[3] ?? 0) + (m[0] ?? 0), (m[7] ?? 0) + (m[4] ?? 0), (m[11] ?? 0) + (m[8] ?? 0), (m[15] ?? 0) + (m[12] ?? 0)],
261
+ [(m[3] ?? 0) - (m[0] ?? 0), (m[7] ?? 0) - (m[4] ?? 0), (m[11] ?? 0) - (m[8] ?? 0), (m[15] ?? 0) - (m[12] ?? 0)],
262
+ [(m[3] ?? 0) + (m[1] ?? 0), (m[7] ?? 0) + (m[5] ?? 0), (m[11] ?? 0) + (m[9] ?? 0), (m[15] ?? 0) + (m[13] ?? 0)],
263
+ [(m[3] ?? 0) - (m[1] ?? 0), (m[7] ?? 0) - (m[5] ?? 0), (m[11] ?? 0) - (m[9] ?? 0), (m[15] ?? 0) - (m[13] ?? 0)],
264
+ [(m[3] ?? 0) + (m[2] ?? 0), (m[7] ?? 0) + (m[6] ?? 0), (m[11] ?? 0) + (m[10] ?? 0), (m[15] ?? 0) + (m[14] ?? 0)],
265
+ [(m[3] ?? 0) - (m[2] ?? 0), (m[7] ?? 0) - (m[6] ?? 0), (m[11] ?? 0) - (m[10] ?? 0), (m[15] ?? 0) - (m[14] ?? 0)]
266
+ ];
267
+ for (const [nx, ny, nz, d] of planes) {
268
+ const length = Math.hypot(nx, ny, nz);
269
+ if (length <= 1e-12)
270
+ continue;
271
+ const cornerX = nx >= 0 ? bounds.max[0] : bounds.min[0];
272
+ const cornerY = ny >= 0 ? bounds.max[1] : bounds.min[1];
273
+ const cornerZ = nz >= 0 ? bounds.max[2] : bounds.min[2];
274
+ if ((nx * cornerX + ny * cornerY + nz * cornerZ + d) / length < 0)
275
+ return false;
276
+ }
277
+ return true;
278
+ }
279
+ const IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
280
+ //# sourceMappingURL=PrimitiveSubmissionAudit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrimitiveSubmissionAudit.js","sourceRoot":"","sources":["../../../../packages/rendering/src/PrimitiveSubmissionAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAoKH;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAA4B,EAC5B,UAA2C,EAAE;IAE7C,MAAM,OAAO,GAAgC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,KAAK,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC;QACtD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QACzC,MAAM,gBAAgB,GAAG,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,UAAU,GAAG,SAAS,EAAE,KAAK,IAAI,gBAAgB,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B;;;;WAIG;QACH,MAAM,YAAY,GAAG,QAAQ,IAAI,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/F,MAAM,QAAQ,GAAiC,EAAE,CAAC;QAElD,IAAI,WAAW,IAAI,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEjD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC;YACpC,IAAI,KAAK,GAAG,UAAU,GAAG,gBAAgB;gBAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACjF,wFAAwF;YACxF,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC3E,IAAI,WAAW,GAAG,CAAC,IAAI,QAAQ,IAAI,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7E,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,wFAAwF;gBACxF,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CACpD,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EACrB,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EACzB,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAC1B,CAAC,CAAC;gBACH,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC1C,IAAI,cAAc,IAAI,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED;;;;;;;;;;WAUG;QACH,MAAM,eAAe,GAAG,YAAY,EAAE,YAAY,EAAE,CAAC,eAAe,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,eAAe,GAAG,YAAY,EAAE,YAAY,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC;YACjF,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,gBAAgB,GAAG,OAAO,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1F,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC,CAAC;QACN;;;;;;WAMG;QACH,MAAM,SAAS,GAAG,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,IAAI;YACzD,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,6FAA6F;QAC7F,MAAM,SAAS,GAAG,WAAW,EAAE,IAAI,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAE3F,OAAO,CAAC,IAAI,CAAC;YACX,KAAK;YACL,OAAO,EAAE,UAAU,EAAE,OAAO;YAC5B,SAAS,EAAE,UAAU,EAAE,SAAS;YAChC,cAAc,EAAE,UAAU,EAAE,cAAc;YAC1C,eAAe,EAAE,KAAK;YACtB,SAAS;YACT,SAAS;YACT,WAAW;YACX,gBAAgB;YAChB,aAAa,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC;YACpD,WAAW;YACX,UAAU;YACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC;YACrC,YAAY,EAAE,YAAY,EAAE,IAAI;YAChC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,KAAK,IAAI;YAClD,WAAW,EAAE,QAAQ,CAAC,MAAM;YAC5B,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC;YACpC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;YACtC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3E,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC;YACzC,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;IAC9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjG,OAAO;QACL,IAAI,EAAE,iCAAiC;QACvC,OAAO;QACP,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM;QACnD,OAAO,EAAE,cAAc,CAAC,MAAM;QAC9B,iBAAiB;QACjB,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3D,MAAM,EAAE,aAAa,CAAC,MAAM;QAC5B,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QACzD,iBAAiB,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;KACxH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,IAAgB;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC;IAC3C,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IACjF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;IACpD,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACrC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,8BAA8B,CAAC,KAA+B;IAC5E,MAAM,KAAK,GAAG;QACZ,cAAc,KAAK,CAAC,OAAO,CAAC,MAAM,gBAAgB,KAAK,CAAC,WAAW,YAAY,KAAK,CAAC,OAAO,GAAG;YAC/F,UAAU,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,iBAAiB,EAAE;KAC9D,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,KAAK,CAAC,IAAI,CACR,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,WAAW,QAAQ,MAAM,CAAC,UAAU,GAAG;YACnF,OAAO,MAAM,CAAC,YAAY,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,cAAc,GAAG;YAC7G,WAAW,MAAM,CAAC,OAAO,EAAE,CAC5B,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,IAAgB,EAChB,WAAoB,EACpB,oBAAkE;IAElE,IAAI,CAAC,oBAAoB;QAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACnF;;;;OAIG;IACH,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAE3E,OAAO;QACL,OAAO,EAAE,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC1E,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,SAAS,eAAe,CACtB,MAAe,EACf,WAAyD;IAEzD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/F,MAAM,GAAG,GAA6B,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,GAAG,GAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtG,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtG,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,MAAe,EAAE,CAAoB;IACnE,MAAM,MAAM,GAA2D;QACrE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;KACjH,CAAC;IACF,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,MAAM,IAAI,KAAK;YAAE,SAAS;QAC9B,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAClF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,eAAe,GAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProductTurntableFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ProductTurntableFixtures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProductTurntableFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ProductTurntableFixtures.ts"],"names":[],"mappings":"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"}