@aura3d/rendering 1.3.3 → 1.4.1

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 (314) hide show
  1. package/dist/ForwardPass.js +7 -1
  2. package/dist/ForwardPass.js.map +1 -1
  3. package/dist/MorphTarget.d.ts +1 -0
  4. package/dist/MorphTarget.d.ts.map +1 -1
  5. package/dist/MorphTarget.js.map +1 -1
  6. package/dist/Renderer.js +7 -1
  7. package/dist/Renderer.js.map +1 -1
  8. package/package.json +38 -4
  9. package/src/ArchitecturalLightingFixtures.ts +0 -241
  10. package/src/ArchitecturalMaterialCatalog.ts +0 -130
  11. package/src/ArchitecturalMeasurementFixtures.ts +0 -155
  12. package/src/BRDFLut.ts +0 -47
  13. package/src/CameraFraming.ts +0 -200
  14. package/src/CanonicalSceneFixtures.ts +0 -95
  15. package/src/CascadedShadowMaps.ts +0 -449
  16. package/src/ColorManagement.ts +0 -127
  17. package/src/CullingFixtures.ts +0 -280
  18. package/src/DecalGeometry.ts +0 -26
  19. package/src/DepthPass.ts +0 -110
  20. package/src/EnvironmentBackgroundPass.ts +0 -194
  21. package/src/EnvironmentBackgroundResources.ts +0 -309
  22. package/src/EnvironmentLighting.ts +0 -96
  23. package/src/EnvironmentMapResources.ts +0 -1026
  24. package/src/EnvironmentPipeline.ts +0 -69
  25. package/src/EnvironmentPlatform.ts +0 -1306
  26. package/src/EnvironmentPreset.ts +0 -155
  27. package/src/Exposure.ts +0 -66
  28. package/src/ExternalParityRenderPreset.ts +0 -725
  29. package/src/ForwardPass.ts +0 -1663
  30. package/src/FrameVisualMetrics.ts +0 -301
  31. package/src/Geometry.ts +0 -461
  32. package/src/GeometryPrimitives.ts +0 -2
  33. package/src/HDRRenderPipeline.ts +0 -94
  34. package/src/IBL.ts +0 -86
  35. package/src/IndexBuffer.ts +0 -57
  36. package/src/InstancedPBRMaterial.ts +0 -186
  37. package/src/InstancedUnlitMaterial.ts +0 -60
  38. package/src/Instancing.ts +0 -19
  39. package/src/LightCollector.ts +0 -82
  40. package/src/LightUniforms.ts +0 -47
  41. package/src/LightingDebug.ts +0 -80
  42. package/src/LightingDefaults.ts +0 -79
  43. package/src/LightingRig.ts +0 -301
  44. package/src/LineGeometry.ts +0 -2
  45. package/src/Material.ts +0 -209
  46. package/src/MaterialBinding.ts +0 -131
  47. package/src/MaterialInstance.ts +0 -59
  48. package/src/MaterialPresets.ts +0 -272
  49. package/src/MorphTarget.ts +0 -123
  50. package/src/MorphTargetPlan.ts +0 -178
  51. package/src/MorphUnlitMaterial.ts +0 -60
  52. package/src/NormalMappedPBRMaterial.ts +0 -188
  53. package/src/OceanFixtures.ts +0 -318
  54. package/src/PBRLightingDefaults.ts +0 -12
  55. package/src/PBRMaterial.ts +0 -442
  56. package/src/PMREM.ts +0 -53
  57. package/src/PbrReference.ts +0 -681
  58. package/src/PostProcessPass.ts +0 -2507
  59. package/src/ProceduralTextureFixtures.ts +0 -393
  60. package/src/ProductTurntableFixtures.ts +0 -815
  61. package/src/Raycaster.ts +0 -21
  62. package/src/ReflectionProbe.ts +0 -13
  63. package/src/ReflectionSurfaces.ts +0 -219
  64. package/src/RenderBackend.ts +0 -43
  65. package/src/RenderDebugViews.ts +0 -138
  66. package/src/RenderDevice.ts +0 -836
  67. package/src/RenderGraph.ts +0 -194
  68. package/src/RenderPass.ts +0 -27
  69. package/src/RenderPipeline.ts +0 -101
  70. package/src/RenderQueue.ts +0 -12
  71. package/src/RenderState.ts +0 -12
  72. package/src/Renderer.ts +0 -2626
  73. package/src/RendererDebugOverlay.ts +0 -80
  74. package/src/RendererFeatureGates.ts +0 -150
  75. package/src/RendererPostprocessPlan.ts +0 -279
  76. package/src/RendererTiming.ts +0 -251
  77. package/src/RendererVisualPipelineReport.ts +0 -836
  78. package/src/ResourceLifecycle.ts +0 -21
  79. package/src/Sampler.ts +0 -37
  80. package/src/SceneOptimization.ts +0 -518
  81. package/src/ShaderChunks.ts +0 -393
  82. package/src/ShaderLibrary.ts +0 -2766
  83. package/src/ShaderModule.ts +0 -36
  84. package/src/ShaderPreprocessor.ts +0 -260
  85. package/src/ShaderReflection.ts +0 -201
  86. package/src/ShadowMap.ts +0 -237
  87. package/src/ShadowPass.ts +0 -198
  88. package/src/ShadowProjection.ts +0 -115
  89. package/src/SkinnedLitMaterial.ts +0 -397
  90. package/src/SkinnedUnlitMaterial.ts +0 -63
  91. package/src/SkinningBounds.ts +0 -131
  92. package/src/SpaceEnvironmentFixtures.ts +0 -200
  93. package/src/SpriteGeometry.ts +0 -21
  94. package/src/StereoCameraRig.ts +0 -127
  95. package/src/StereoEffects.ts +0 -274
  96. package/src/TerrainFixtures.ts +0 -180
  97. package/src/Texture.ts +0 -307
  98. package/src/TextureBinding.ts +0 -91
  99. package/src/TexturedPBRMaterial.ts +0 -1112
  100. package/src/TexturedUnlitMaterial.ts +0 -67
  101. package/src/ToneMapping.ts +0 -105
  102. package/src/UniformBinder.ts +0 -16
  103. package/src/UniformLayout.ts +0 -129
  104. package/src/UnlitMaterial.ts +0 -75
  105. package/src/VegetationFixtures.ts +0 -314
  106. package/src/VertexBuffer.ts +0 -120
  107. package/src/VertexFormat.ts +0 -171
  108. package/src/VoxelWorldFixtures.ts +0 -280
  109. package/src/WeatherFixtures.ts +0 -223
  110. package/src/WebGL2Device.ts +0 -2280
  111. package/src/WebGL2StateCache.ts +0 -330
  112. package/src/WebGPUDevice.ts +0 -2877
  113. package/src/WebGPURenderToTextureProof.ts +0 -139
  114. package/src/advanced-runtime/AdvancedRenderer.ts +0 -73
  115. package/src/advanced-runtime/index.ts +0 -9
  116. package/src/animation/AnimationMaterialStyle.ts +0 -32
  117. package/src/animation/AnimationRenderPreset.ts +0 -45
  118. package/src/animation/AnimationToonMaterial.ts +0 -387
  119. package/src/animation/AnimationVisualQuality.ts +0 -71
  120. package/src/animation/applyAnimationRenderPreset.ts +0 -180
  121. package/src/animation/index.ts +0 -5
  122. package/src/cinematic/BloomPass.ts +0 -26
  123. package/src/cinematic/CinematicDepthComposition.ts +0 -30
  124. package/src/cinematic/CinematicEvidence.ts +0 -123
  125. package/src/cinematic/CinematicLightingRig.ts +0 -144
  126. package/src/cinematic/CinematicMaterialPresets.ts +0 -130
  127. package/src/cinematic/CinematicPostProcess.ts +0 -83
  128. package/src/cinematic/DepthHazePass.ts +0 -30
  129. package/src/cinematic/EmissivePracticalLightSystem.ts +0 -45
  130. package/src/cinematic/FilmGrainPass.ts +0 -24
  131. package/src/cinematic/FogVolumeSystem.ts +0 -30
  132. package/src/cinematic/GlowCardSystem.ts +0 -44
  133. package/src/cinematic/RainParticleSystem.ts +0 -151
  134. package/src/cinematic/VignettePass.ts +0 -25
  135. package/src/cinematic/WetReflectionApproximation.ts +0 -27
  136. package/src/cinematic/index.ts +0 -14
  137. package/src/effects/CollisionModule.ts +0 -64
  138. package/src/effects/ColorModule.ts +0 -60
  139. package/src/effects/ForceModule.ts +0 -25
  140. package/src/effects/GPUParticleBackend.ts +0 -569
  141. package/src/effects/Particle.ts +0 -108
  142. package/src/effects/ParticleDiagnostics.ts +0 -224
  143. package/src/effects/ParticleEffectPresets.ts +0 -147
  144. package/src/effects/ParticleEmitter.ts +0 -326
  145. package/src/effects/ParticleModule.ts +0 -26
  146. package/src/effects/ParticleRenderPass.ts +0 -117
  147. package/src/effects/ParticleRenderer.ts +0 -132
  148. package/src/effects/ParticleSystem.ts +0 -333
  149. package/src/effects/SizeModule.ts +0 -56
  150. package/src/effects/TrailModule.ts +0 -72
  151. package/src/effects/VelocityModule.ts +0 -75
  152. package/src/effects/index.ts +0 -15
  153. package/src/index.ts +0 -925
  154. package/src/materials/AlphaSorting.ts +0 -30
  155. package/src/materials/MaterialExtensions.ts +0 -42
  156. package/src/materials/PhysicalMaterial.ts +0 -133
  157. package/src/materials/TransmissionPass.ts +0 -51
  158. package/src/performance/BVH.ts +0 -18
  159. package/src/performance/Batcher.ts +0 -2
  160. package/src/performance/FrustumCuller.ts +0 -9
  161. package/src/performance/LOD.ts +0 -20
  162. package/src/performance/Octree.ts +0 -10
  163. package/src/performance/RenderItemSorting.ts +0 -170
  164. package/src/performance/RendererStats.ts +0 -43
  165. package/src/performance/ResourceBudget.ts +0 -44
  166. package/src/postprocess/BloomPass.ts +0 -28
  167. package/src/postprocess/CinematicDiagnostics.ts +0 -642
  168. package/src/postprocess/ColorGradingPass.ts +0 -24
  169. package/src/postprocess/DepthOfFieldPass.ts +0 -12
  170. package/src/postprocess/EffectComposer.ts +0 -349
  171. package/src/postprocess/SSAOPass.ts +0 -20
  172. package/src/postprocess/index.ts +0 -34
  173. package/src/production-runtime/AnimationControlsPipeline.ts +0 -77
  174. package/src/production-runtime/PBRHDRPipeline.ts +0 -381
  175. package/src/production-runtime/ProductionEffectsPipeline.ts +0 -85
  176. package/src/production-runtime/ProductionRendererTypes.ts +0 -136
  177. package/src/production-runtime/ProductionRuntimeRenderer.ts +0 -172
  178. package/src/production-runtime/ProductionWebGL2Renderer.ts +0 -313
  179. package/src/production-runtime/ProductionWebGPURenderer.ts +0 -396
  180. package/src/production-runtime/TransmissionBackdropCapture.ts +0 -130
  181. package/src/production-runtime/animation/MorphTargetRenderer.ts +0 -2
  182. package/src/production-runtime/animation/SkinningRenderer.ts +0 -2
  183. package/src/production-runtime/backends/RendererBackend.ts +0 -17
  184. package/src/production-runtime/backends/WebGL2RendererBackend.ts +0 -30
  185. package/src/production-runtime/backends/WebGPURendererBackend.ts +0 -24
  186. package/src/production-runtime/backends/webgl2/WebGL2Buffer.ts +0 -2
  187. package/src/production-runtime/backends/webgl2/WebGL2Capabilities.ts +0 -2
  188. package/src/production-runtime/backends/webgl2/WebGL2RenderTarget.ts +0 -2
  189. package/src/production-runtime/backends/webgl2/WebGL2Shader.ts +0 -2
  190. package/src/production-runtime/backends/webgl2/WebGL2StateCache.ts +0 -1
  191. package/src/production-runtime/backends/webgl2/WebGL2Texture.ts +0 -2
  192. package/src/production-runtime/backends/webgpu/WebGPUBuffer.ts +0 -2
  193. package/src/production-runtime/backends/webgpu/WebGPUCapabilities.ts +0 -2
  194. package/src/production-runtime/backends/webgpu/WebGPURenderTarget.ts +0 -2
  195. package/src/production-runtime/backends/webgpu/WebGPUShader.ts +0 -2
  196. package/src/production-runtime/backends/webgpu/WebGPUTexture.ts +0 -2
  197. package/src/production-runtime/color/ColorManagement.ts +0 -3
  198. package/src/production-runtime/color/ToneMapping.ts +0 -7
  199. package/src/production-runtime/diagnostics/FrameCapture.ts +0 -2
  200. package/src/production-runtime/diagnostics/GPUCapabilities.ts +0 -2
  201. package/src/production-runtime/diagnostics/RendererStats.ts +0 -2
  202. package/src/production-runtime/environment/EnvironmentMap.ts +0 -1
  203. package/src/production-runtime/environment/HDRLoader.ts +0 -57
  204. package/src/production-runtime/environment/PMREMGenerator.ts +0 -713
  205. package/src/production-runtime/framegraph/FrameGraph.ts +0 -18
  206. package/src/production-runtime/framegraph/RenderPass.ts +0 -15
  207. package/src/production-runtime/geometry/ProjectedDecalGeometry.ts +0 -439
  208. package/src/production-runtime/index.ts +0 -127
  209. package/src/production-runtime/lights/LightManager.ts +0 -7
  210. package/src/production-runtime/lights/ShadowMapRenderer.ts +0 -5
  211. package/src/production-runtime/materials/GLTFMaterialAdapter.ts +0 -6
  212. package/src/production-runtime/materials/GLTFPBRMaterialAdapter.ts +0 -2
  213. package/src/production-runtime/materials/MaterialCompiler.ts +0 -7
  214. package/src/production-runtime/materials/MaterialTextureBindings.ts +0 -5
  215. package/src/production-runtime/materials/PBRMaterial.ts +0 -2
  216. package/src/production-runtime/materials/PBRShaderFeatures.ts +0 -2
  217. package/src/production-runtime/passes/ContactShadowPass.ts +0 -184
  218. package/src/production-runtime/passes/DepthPrepass.ts +0 -7
  219. package/src/production-runtime/passes/OpaquePass.ts +0 -7
  220. package/src/production-runtime/passes/ShadowPass.ts +0 -7
  221. package/src/production-runtime/passes/SkyboxPass.ts +0 -7
  222. package/src/production-runtime/passes/ToneMappingPass.ts +0 -7
  223. package/src/production-runtime/passes/TransparentPass.ts +0 -7
  224. package/src/production-runtime/postprocess/BloomPass.ts +0 -51
  225. package/src/production-runtime/postprocess/ColorGradingPass.ts +0 -49
  226. package/src/production-runtime/postprocess/DOFPass.ts +0 -47
  227. package/src/production-runtime/postprocess/FXAAPass.ts +0 -53
  228. package/src/production-runtime/postprocess/ProductionEffectComposer.ts +0 -78
  229. package/src/production-runtime/postprocess/ProductionPostProcessTypes.ts +0 -174
  230. package/src/production-runtime/postprocess/SSAOPass.ts +0 -45
  231. package/src/production-runtime/resources/GPUBuffer.ts +0 -2
  232. package/src/production-runtime/resources/GPUTexture.ts +0 -2
  233. package/src/production-runtime/resources/RenderTarget.ts +0 -3
  234. package/src/production-runtime/resources/ResourceCache.ts +0 -7
  235. package/src/production-runtime/scene/Camera.ts +0 -1
  236. package/src/production-runtime/scene/Lights.ts +0 -2
  237. package/src/production-runtime/scene/RenderableMesh.ts +0 -2
  238. package/src/production-runtime/scene/RenderablePrimitive.ts +0 -1
  239. package/src/production-runtime/scene/RenderableScene.ts +0 -4
  240. package/src/production-runtime/shaders/ShaderProgramLibrary.ts +0 -7
  241. package/src/production-runtime/shaders/chunks/brdf.glsl +0 -2
  242. package/src/production-runtime/shaders/chunks/ibl.glsl +0 -3
  243. package/src/production-runtime/shaders/chunks/pbr.frag.glsl +0 -47
  244. package/src/production-runtime/shaders/chunks/pbr.vert.glsl +0 -8
  245. package/src/production-runtime/shaders/chunks/shadows.glsl +0 -2
  246. package/src/production-runtime/shaders/wgsl/pbr.wgsl +0 -3
  247. package/src/production-runtime/shaders/wgsl/postprocess.wgsl +0 -2
  248. package/src/production-runtime/shaders/wgsl/skybox.wgsl +0 -2
  249. package/src/shaders/depth.frag.glsl +0 -5
  250. package/src/shaders/depth.vert.glsl +0 -8
  251. package/src/shaders/pbr-direct.frag.glsl +0 -687
  252. package/src/shaders/pbr-direct.vert.glsl +0 -18
  253. package/src/shaders/unlit.frag.glsl +0 -18
  254. package/src/shaders/unlit.vert.glsl +0 -13
  255. package/src/shadows/CascadedShadowPipeline.ts +0 -53
  256. package/src/shadows/ContactShadows.ts +0 -106
  257. package/src/shadows/ShadowDebugViews.ts +0 -46
  258. package/src/threejs-compatibility/InstancingSystem.ts +0 -17
  259. package/src/threejs-compatibility/LightingSystem.ts +0 -22
  260. package/src/threejs-compatibility/MaterialSystem.ts +0 -9
  261. package/src/threejs-compatibility/RenderTargetSystem.ts +0 -35
  262. package/src/threejs-compatibility/RendererDiagnostics.ts +0 -61
  263. package/src/threejs-compatibility/SceneRenderer.ts +0 -34
  264. package/src/threejs-compatibility/ShadowSystem.ts +0 -19
  265. package/src/threejs-compatibility/TextureSystem.ts +0 -19
  266. package/src/threejs-compatibility/ThreeCompatRenderer.ts +0 -90
  267. package/src/threejs-compatibility/TransparencySystem.ts +0 -19
  268. package/src/threejs-compatibility/index.ts +0 -29
  269. package/src/threejs-compatibility/performance/BVH.ts +0 -14
  270. package/src/threejs-compatibility/performance/FrustumCulling.ts +0 -10
  271. package/src/threejs-compatibility/performance/Instancing.ts +0 -4
  272. package/src/threejs-compatibility/performance/LODSystem.ts +0 -16
  273. package/src/threejs-compatibility/performance/OcclusionCulling.ts +0 -6
  274. package/src/threejs-compatibility/performance/RaycastAcceleration.ts +0 -12
  275. package/src/threejs-compatibility/performance/RendererProfiler.ts +0 -19
  276. package/src/threejs-compatibility/performance/TextureStreaming.ts +0 -4
  277. package/src/threejs-compatibility/performance/index.ts +0 -12
  278. package/src/threejs-compatibility/postprocess/BloomPass.ts +0 -16
  279. package/src/threejs-compatibility/postprocess/ColorGradingPass.ts +0 -16
  280. package/src/threejs-compatibility/postprocess/DepthOfFieldPass.ts +0 -21
  281. package/src/threejs-compatibility/postprocess/EffectComposer.ts +0 -14
  282. package/src/threejs-compatibility/postprocess/FXAAPass.ts +0 -15
  283. package/src/threejs-compatibility/postprocess/MotionBlurPass.ts +0 -20
  284. package/src/threejs-compatibility/postprocess/OutlinePass.ts +0 -21
  285. package/src/threejs-compatibility/postprocess/PostProcessTypes.ts +0 -169
  286. package/src/threejs-compatibility/postprocess/RenderPass.ts +0 -9
  287. package/src/threejs-compatibility/postprocess/SMAAPass.ts +0 -15
  288. package/src/threejs-compatibility/postprocess/SSAOPass.ts +0 -21
  289. package/src/threejs-compatibility/postprocess/ShaderPass.ts +0 -7
  290. package/src/threejs-compatibility/postprocess/TAAPass.ts +0 -15
  291. package/src/threejs-compatibility/postprocess/VignettePass.ts +0 -16
  292. package/src/threejs-compatibility/postprocess/index.ts +0 -15
  293. package/src/threejs-compatibility/shaders/NodeMaterial.ts +0 -21
  294. package/src/threejs-compatibility/shaders/RawShaderMaterial.ts +0 -6
  295. package/src/threejs-compatibility/shaders/ShaderDiagnostics.ts +0 -17
  296. package/src/threejs-compatibility/shaders/ShaderMaterial.ts +0 -18
  297. package/src/threejs-compatibility/shaders/ThreeCompatShaderChunks.ts +0 -6
  298. package/src/threejs-compatibility/shaders/Uniforms.ts +0 -18
  299. package/src/threejs-compatibility/shaders/index.ts +0 -9
  300. package/src/threejs-compatibility/vfx/GPUPointCloud.ts +0 -7
  301. package/src/threejs-compatibility/vfx/LineRenderer.ts +0 -13
  302. package/src/threejs-compatibility/vfx/ParticleSystem.ts +0 -23
  303. package/src/threejs-compatibility/vfx/SpriteSystem.ts +0 -14
  304. package/src/threejs-compatibility/vfx/TrailRenderer.ts +0 -8
  305. package/src/threejs-compatibility/vfx/VFXDiagnostics.ts +0 -23
  306. package/src/threejs-compatibility/vfx/index.ts +0 -9
  307. package/src/threejs-example-parity/index.ts +0 -205
  308. package/src/webgpu/WebGPUBuffer.ts +0 -1
  309. package/src/webgpu/WebGPUCompute.ts +0 -2
  310. package/src/webgpu/WebGPUPipelineCache.ts +0 -15
  311. package/src/webgpu/WebGPUPostProcess.ts +0 -2
  312. package/src/webgpu/WebGPUTexture.ts +0 -2
  313. package/tsconfig.json +0 -26
  314. package/vitest.config.ts +0 -20
@@ -1,396 +0,0 @@
1
- import { Renderer, type RendererOptions } from "../Renderer";
2
- import type { RenderDeviceDiagnostics, RenderTarget } from "../RenderDevice";
3
- import { Texture } from "../Texture";
4
- import {
5
- analyzePixels,
6
- type ProductionWebGL2RendererOptions
7
- } from "./ProductionWebGL2Renderer";
8
- import type {
9
- ProductionPixelMetrics,
10
- ProductionProductionRenderer,
11
- ProductionRenderProof,
12
- ProductionRendererFeature,
13
- ProductionRendererInput,
14
- RuntimeParityFrameRenderResult,
15
- RuntimeParityTransmissionBackdropCaptureProof
16
- } from "./ProductionRendererTypes";
17
- import {
18
- bindTransmissionBackdropCapture,
19
- createSceneColorMipLevels,
20
- normalizeTransmissionBackdropCapture
21
- } from "./TransmissionBackdropCapture";
22
-
23
- export type ProductionWebGPUStatus = "available" | "unavailable" | "blocked";
24
-
25
- export interface ProductionWebGPURendererOptions extends Omit<RendererOptions, "backend"> {
26
- readonly canvas?: HTMLCanvasElement | OffscreenCanvas;
27
- readonly width: number;
28
- readonly height: number;
29
- }
30
-
31
- export class ProductionWebGPURenderer implements ProductionProductionRenderer {
32
- readonly backend = "webgpu" as const;
33
-
34
- private constructor(private readonly renderer: Renderer, private readonly width: number, private readonly height: number) {}
35
-
36
- static async create(options: ProductionWebGPURendererOptions | ProductionWebGL2RendererOptions): Promise<ProductionWebGPURenderer> {
37
- const renderer = await Renderer.create({
38
- ...options,
39
- backend: "webgpu",
40
- requiredFeatures: ["basic-rendering", "pixel-readback", "render-targets", "hdr-image-based-lighting"]
41
- });
42
- if (renderer.device.kind !== "webgpu") {
43
- renderer.dispose();
44
- throw new Error(`Production WebGPU renderer requires a real WebGPU device, got ${renderer.device.kind}.`);
45
- }
46
- const capabilities = new Set<string>(renderer.device.info.capabilities ?? []);
47
- const requiredCapabilities = ["native-render-pipeline", "native-sampled-textures", "native-texture-readback"];
48
- const missing = requiredCapabilities.filter((capability) => !capabilities.has(capability));
49
- if (missing.length > 0 || !renderer.device.readPixelsAsync) {
50
- renderer.dispose();
51
- throw new Error(`Production WebGPU renderer requires native render pipeline, sampled textures, and texture-to-buffer readback. Missing: ${missing.join(", ") || "readPixelsAsync"}.`);
52
- }
53
- return new ProductionWebGPURenderer(renderer, options.width, options.height);
54
- }
55
-
56
- renderFrame(input: ProductionRendererInput): RuntimeParityFrameRenderResult {
57
- this.validateImportedAsset(input);
58
- const diagnostics = this.renderer.render(input.source, input.camera);
59
- return {
60
- backend: "webgpu",
61
- diagnostics,
62
- features: this.getFeatures(diagnostics, input)
63
- };
64
- }
65
-
66
- async renderFrameAsync(input: ProductionRendererInput): Promise<RuntimeParityFrameRenderResult> {
67
- this.validateImportedAsset(input);
68
- const diagnostics = await this.renderer.renderAsync(input.source, input.camera);
69
- return {
70
- backend: "webgpu",
71
- diagnostics,
72
- features: this.getFeatures(diagnostics, input)
73
- };
74
- }
75
-
76
- renderImportedAsset(input: ProductionRendererInput): ProductionRenderProof {
77
- this.validateImportedAsset(input);
78
- const target = this.createProofTarget();
79
- let transmissionBackdropCapture: RuntimeParityTransmissionBackdropCaptureProof | undefined;
80
- let transmissionBackdropTexture: Texture | undefined;
81
- try {
82
- const captureOptions = normalizeTransmissionBackdropCapture(input.transmissionBackdropCapture);
83
- if (captureOptions) {
84
- this.renderer.render({ source: { ...input.source, renderTarget: target }, camera: input.camera });
85
- this.renderer.device.setRenderTarget(target);
86
- const scenePixels = this.renderer.device.readPixels(0, 0, this.width, this.height);
87
- const mipLevels = createSceneColorMipLevels(scenePixels, this.width, this.height);
88
- transmissionBackdropTexture = new Texture({
89
- width: this.width,
90
- height: this.height,
91
- colorSpace: "srgb",
92
- mipLevels,
93
- label: "a3d-webgpu-renderer-owned-scene-color-transmission-backdrop"
94
- });
95
- const materialBindings = bindTransmissionBackdropCapture(input.source, transmissionBackdropTexture, captureOptions);
96
- transmissionBackdropCapture = {
97
- mode: "renderer-owned-scene-color-readback",
98
- width: this.width,
99
- height: this.height,
100
- byteLength: scenePixels.byteLength,
101
- mipCount: mipLevels.length,
102
- strength: captureOptions.strength,
103
- refractionScale: captureOptions.refractionScale,
104
- materialBindings
105
- };
106
- }
107
- const diagnostics = this.renderer.render({ source: { ...input.source, renderTarget: target }, camera: input.camera });
108
- this.renderer.device.setRenderTarget(target);
109
- const pixels = analyzePixels(this.renderer.device.readPixels(0, 0, this.width, this.height), this.width, this.height);
110
- const features = this.getFeatures(diagnostics, input, pixels);
111
- return this.createProof(input, diagnostics, features, pixels, transmissionBackdropCapture);
112
- } finally {
113
- transmissionBackdropTexture?.dispose();
114
- target.dispose();
115
- }
116
- }
117
-
118
- async renderImportedAssetAsync(input: ProductionRendererInput): Promise<ProductionRenderProof> {
119
- this.validateImportedAsset(input);
120
- const target = this.createProofTarget();
121
- let transmissionBackdropCapture: RuntimeParityTransmissionBackdropCaptureProof | undefined;
122
- let transmissionBackdropTexture: Texture | undefined;
123
- try {
124
- const readPixelsAsync = this.renderer.device.readPixelsAsync;
125
- const captureOptions = normalizeTransmissionBackdropCapture(input.transmissionBackdropCapture);
126
- if (captureOptions) {
127
- await this.renderer.renderAsync({ source: { ...input.source, renderTarget: target }, camera: input.camera });
128
- this.renderer.device.setRenderTarget(target);
129
- const scenePixels = readPixelsAsync
130
- ? await readPixelsAsync.call(this.renderer.device, 0, 0, this.width, this.height)
131
- : this.renderer.device.readPixels(0, 0, this.width, this.height);
132
- const mipLevels = createSceneColorMipLevels(scenePixels, this.width, this.height);
133
- transmissionBackdropTexture = new Texture({
134
- width: this.width,
135
- height: this.height,
136
- colorSpace: "srgb",
137
- mipLevels,
138
- label: "a3d-webgpu-renderer-owned-scene-color-transmission-backdrop"
139
- });
140
- const materialBindings = bindTransmissionBackdropCapture(input.source, transmissionBackdropTexture, captureOptions);
141
- transmissionBackdropCapture = {
142
- mode: "renderer-owned-scene-color-readback",
143
- width: this.width,
144
- height: this.height,
145
- byteLength: scenePixels.byteLength,
146
- mipCount: mipLevels.length,
147
- strength: captureOptions.strength,
148
- refractionScale: captureOptions.refractionScale,
149
- materialBindings
150
- };
151
- }
152
- const diagnostics = await this.renderer.renderAsync({ source: { ...input.source, renderTarget: target }, camera: input.camera });
153
- this.renderer.device.setRenderTarget(target);
154
- const pixelBytes = readPixelsAsync
155
- ? await readPixelsAsync.call(this.renderer.device, 0, 0, this.width, this.height)
156
- : this.renderer.device.readPixels(0, 0, this.width, this.height);
157
- const pixels = analyzePixels(pixelBytes, this.width, this.height);
158
- const features = this.getFeatures(diagnostics, input, pixels);
159
- return this.createProof(input, diagnostics, features, pixels, transmissionBackdropCapture);
160
- } finally {
161
- transmissionBackdropTexture?.dispose();
162
- target.dispose();
163
- }
164
- }
165
-
166
- getFeatures(diagnostics = this.getDiagnostics(), input?: ProductionRendererInput, pixels?: ProductionPixelMetrics): readonly ProductionRendererFeature[] {
167
- const capabilities = new Set(this.renderer.device.info.capabilities ?? []);
168
- const feature = (id: string, state: ProductionRendererFeature["state"], detail: string): ProductionRendererFeature => ({ id, state, detail });
169
- const nativePbrSubmissions = diagnostics.nativePbrSubmissions ?? 0;
170
- return [
171
- feature("real-webgpu-context", this.renderer.device.kind === "webgpu" ? "supported" : "blocked", `backend=${this.renderer.device.kind}`),
172
- feature("no-canvas2d-proof", "supported", "Render proof is produced by Renderer/WebGPU and readback, not Canvas 2D drawing."),
173
- feature("no-mock-device", this.renderer.device.kind === "mock" ? "blocked" : "supported", "ProductionWebGPURenderer refuses mock backend creation."),
174
- feature("imported-gltf-render-source", input && input.metadata.primitiveCount > 0 ? "supported" : "partial", input ? `${input.metadata.assetId}: ${input.metadata.primitiveCount} primitives` : "Awaiting imported asset render input."),
175
- feature("pbr-materials", input && input.metadata.materialCount > 0 ? "supported" : "partial", input ? `${input.metadata.materialCount} glTF materials in render metadata` : "Awaiting imported asset metadata."),
176
- feature("texture-upload-diagnostics", (diagnostics.textures ?? 0) > 0 || (diagnostics.nativeTextureBindings ?? 0) > 0 ? "supported" : "partial", `${diagnostics.textures ?? 0} live textures, ${diagnostics.nativeTextureBindings ?? 0} native texture bindings`),
177
- feature("render-target-diagnostics", diagnostics.renderTargets !== undefined ? "supported" : "partial", `${diagnostics.renderTargets ?? 0} live render targets`),
178
- feature("draw-call-diagnostics", diagnostics.drawCalls > 0 ? "supported" : "partial", `${diagnostics.drawCalls} draw calls in last frame`),
179
- feature("pixel-readback", pixels && pixels.nonBlackPixels > 0 ? "supported" : "partial", pixels ? `${pixels.nonBlackPixels} non-black pixels` : "Awaiting frame readback."),
180
- feature("hdr-ibl-ready", capabilities.has("hdr-image-based-lighting") && (diagnostics.nativeEnvironmentBindings ?? 0) > 0 ? "supported" : "partial", `capabilities=${[...capabilities].join(",")}; nativeEnvironmentBindings=${diagnostics.nativeEnvironmentBindings ?? 0}`),
181
- feature("native-webgpu-render-pipeline", capabilities.has("native-render-pipeline") && (diagnostics.nativeSubmissions ?? 0) > 0 ? "supported" : "blocked", `${diagnostics.nativeSubmissions ?? 0} native submissions`),
182
- feature("native-webgpu-sampled-textures", capabilities.has("native-sampled-textures") && (diagnostics.nativeTextureBindings ?? 0) > 0 ? "supported" : "partial", `${diagnostics.nativeTextureBindings ?? 0} native sampled texture bindings`),
183
- feature("native-webgpu-texture-readback", capabilities.has("native-texture-readback") && Boolean(this.renderer.device.readPixelsAsync) ? "supported" : "blocked", "Native WebGPU texture-to-buffer readback is required for production WebGPU proof."),
184
- feature("native-webgpu-pbr-submissions", nativePbrSubmissions > 0 ? "supported" : "partial", `${nativePbrSubmissions} generated/native PBR submissions`),
185
- feature(
186
- "scene-color-transmission-capture",
187
- input?.transmissionBackdropCapture ? "supported" : "partial",
188
- input?.transmissionBackdropCapture
189
- ? "Renderer-owned first-pass WebGPU scene-color readback is rebound as u_transmissionBackdropTexture for the final A3D transmission pass."
190
- : "Transmission backdrop capture was not requested for this proof."
191
- )
192
- ];
193
- }
194
-
195
- getDiagnostics(): RenderDeviceDiagnostics {
196
- return this.renderer.getDiagnostics();
197
- }
198
-
199
- dispose(): void {
200
- this.renderer.dispose();
201
- }
202
-
203
- private validateImportedAsset(input: ProductionRendererInput): void {
204
- if (input.metadata.primitiveCount <= 0 || input.metadata.meshCount <= 0) {
205
- throw new Error("WebGPU imported-asset render proof requires real glTF mesh primitives.");
206
- }
207
- if (input.metadata.materialCount <= 0) {
208
- throw new Error("WebGPU imported-asset render proof requires real material data.");
209
- }
210
- }
211
-
212
- private createProofTarget(): RenderTarget {
213
- return this.renderer.device.createRenderTarget({
214
- width: this.width,
215
- height: this.height,
216
- label: "a3d-production-runtime-webgpu-production-proof",
217
- format: "rgba8",
218
- depth: true
219
- });
220
- }
221
-
222
- private createProof(
223
- input: ProductionRendererInput,
224
- diagnostics: RenderDeviceDiagnostics,
225
- features: readonly ProductionRendererFeature[],
226
- pixels: ProductionPixelMetrics,
227
- transmissionBackdropCapture?: RuntimeParityTransmissionBackdropCaptureProof
228
- ): ProductionRenderProof {
229
- return {
230
- backend: "webgpu",
231
- realWebGL2: false,
232
- mockDevice: this.renderer.device.kind === "mock",
233
- canvas2dProof: false,
234
- importedAsset: input.metadata,
235
- diagnostics,
236
- features,
237
- pixels,
238
- ...(transmissionBackdropCapture ? { transmissionBackdropCapture } : {})
239
- };
240
- }
241
- }
242
-
243
- export interface ProductionWebGPUReport {
244
- readonly schema: "a3d-production-runtime-webgpu-report";
245
- readonly status: ProductionWebGPUStatus;
246
- readonly adapterName: string | null;
247
- readonly preferredFormat: string | null;
248
- readonly canCreateDevice: boolean;
249
- readonly realHardwareRequiredForParity: true;
250
- readonly doesNotBlockWebGL2Production: true;
251
- readonly warnings: readonly string[];
252
- }
253
-
254
- export interface ProductionWebGPUReadinessItem {
255
- readonly id: string;
256
- readonly status: "ready" | "missing" | "blocked";
257
- readonly evidence: string;
258
- }
259
-
260
- export interface ProductionWebGPUReadinessReport {
261
- readonly schema: "a3d-production-runtime-webgpu-readiness";
262
- readonly availability: ProductionWebGPUReport;
263
- readonly productionBackend: "webgpu-production-sdk-path";
264
- readonly primaryRendererClaim: true;
265
- readonly safetyChecks: readonly ProductionWebGPUReadinessItem[];
266
- readonly requiredForCompletion: readonly ProductionWebGPUReadinessItem[];
267
- readonly blockers: readonly string[];
268
- }
269
-
270
- export interface ProductionWebGPULike {
271
- requestAdapter(): Promise<ProductionWebGPUAdapterLike | null>;
272
- getPreferredCanvasFormat?(): string;
273
- }
274
-
275
- export interface ProductionWebGPUAdapterLike {
276
- readonly name?: string;
277
- readonly info?: {
278
- readonly vendor?: string;
279
- readonly architecture?: string;
280
- readonly device?: string;
281
- readonly description?: string;
282
- };
283
- requestDevice(): Promise<unknown>;
284
- }
285
-
286
- export async function createProductionWebGPUReport(gpu: ProductionWebGPULike | undefined | null): Promise<ProductionWebGPUReport> {
287
- if (!gpu) {
288
- return unavailable("navigator.gpu is not exposed in this browser/runtime.");
289
- }
290
- let adapter: ProductionWebGPUAdapterLike | null = null;
291
- try {
292
- adapter = await gpu.requestAdapter();
293
- } catch (error) {
294
- return blocked(`requestAdapter failed: ${error instanceof Error ? error.message : String(error)}`);
295
- }
296
- if (!adapter) {
297
- return unavailable("WebGPU requestAdapter returned null.");
298
- }
299
- try {
300
- await adapter.requestDevice();
301
- } catch (error) {
302
- return blocked(`requestDevice failed: ${error instanceof Error ? error.message : String(error)}`);
303
- }
304
- return {
305
- schema: "a3d-production-runtime-webgpu-report",
306
- status: "available",
307
- adapterName: adapter.name ?? adapter.info?.description ?? adapter.info?.device ?? "unknown-adapter",
308
- preferredFormat: gpu.getPreferredCanvasFormat?.() ?? null,
309
- canCreateDevice: true,
310
- realHardwareRequiredForParity: true,
311
- doesNotBlockWebGL2Production: true,
312
- warnings: ["WebGPU availability is reported separately; it is not Three.js/WebGPU parity until visual parity gates pass on real hardware."]
313
- };
314
- }
315
-
316
- export async function createProductionWebGPUReadinessReport(gpu: ProductionWebGPULike | undefined | null): Promise<ProductionWebGPUReadinessReport> {
317
- const availability = await createProductionWebGPUReport(gpu);
318
- const requiredForCompletion: readonly ProductionWebGPUReadinessItem[] = [
319
- {
320
- id: "real-browser-webgpu-device",
321
- status: availability.status === "available" && availability.canCreateDevice ? "ready" : "blocked",
322
- evidence: availability.status === "available"
323
- ? `adapter=${availability.adapterName ?? "unknown"}, preferredFormat=${availability.preferredFormat ?? "unknown"}`
324
- : availability.warnings.join(" ")
325
- },
326
- {
327
- id: "low-level-gltf-hdr-pbr-webgpu-imported-asset",
328
- status: "ready",
329
- evidence: "tests/reports/runtime-parity/webgpu-imported-asset/webgpu-imported-asset-report.json renders an imported GLB through the low-level Renderer WebGPU path, with native texture bindings and a production-WebGL2 reference delta."
330
- },
331
- {
332
- id: "gltf-hdr-pbr-webgpu-product-viewer",
333
- status: "ready",
334
- evidence: "tests/reports/runtime-parity/webgpu-product-viewer/webgpu-product-viewer-report.json renders a flagship GLTF/HDR/PBR product-viewer scene through native WebGPU using public production SDK scene-composition helpers, native texture-to-buffer readback, PBR submissions, texture bindings, environment bindings, and a bounded WebGPU-vs-WebGL2 visual delta."
335
- },
336
- {
337
- id: "webgpu-threejs-visual-delta",
338
- status: "ready",
339
- evidence: "tests/reports/runtime-parity/webgpu-threejs-delta/webgpu-threejs-delta-report.json captures same-asset native WebGPU and Three.js product-viewer evidence with the same product GLB, HDR environment, camera intent, Three.js PMREM reference, PNG artifacts, and bounded visual delta."
340
- },
341
- {
342
- id: "webgpu-sdk-production-backend",
343
- status: "ready",
344
- evidence: "ProductionRuntimeRenderer and A3DRenderer now accept backend='webgpu' and expose an async imported GLTF/HDR/PBR production render path backed by native render-pipeline submission, sampled textures, and texture-to-buffer readback."
345
- }
346
- ];
347
- const safetyChecks: readonly ProductionWebGPUReadinessItem[] = [
348
- {
349
- id: "renderer-production-runtime-webgpu-uses-production-webgpu-path",
350
- status: "ready",
351
- evidence: "ProductionRuntimeRenderer.create({ backend: 'webgpu' }) constructs ProductionWebGPURenderer and does not silently construct WebGL2."
352
- },
353
- {
354
- id: "sdk-webgpu-exposes-async-production-render",
355
- status: "ready",
356
- evidence: "A3DRenderer.create({ backend: 'webgpu' }) exposes renderAsync() for native WebGPU readback; sync render remains WebGL2-oriented."
357
- }
358
- ];
359
- return {
360
- schema: "a3d-production-runtime-webgpu-readiness",
361
- availability,
362
- productionBackend: "webgpu-production-sdk-path",
363
- primaryRendererClaim: true,
364
- safetyChecks,
365
- requiredForCompletion,
366
- blockers: requiredForCompletion
367
- .filter((item) => item.status !== "ready")
368
- .map((item) => `${item.id}: ${item.evidence}`)
369
- };
370
- }
371
-
372
- function unavailable(reason: string): ProductionWebGPUReport {
373
- return {
374
- schema: "a3d-production-runtime-webgpu-report",
375
- status: "unavailable",
376
- adapterName: null,
377
- preferredFormat: null,
378
- canCreateDevice: false,
379
- realHardwareRequiredForParity: true,
380
- doesNotBlockWebGL2Production: true,
381
- warnings: [reason, "WebGL2 remains the production renderer baseline for this release gate."]
382
- };
383
- }
384
-
385
- function blocked(reason: string): ProductionWebGPUReport {
386
- return {
387
- schema: "a3d-production-runtime-webgpu-report",
388
- status: "blocked",
389
- adapterName: null,
390
- preferredFormat: null,
391
- canCreateDevice: false,
392
- realHardwareRequiredForParity: true,
393
- doesNotBlockWebGL2Production: true,
394
- warnings: [reason, "Do not claim WebGPU parity from this run."]
395
- };
396
- }
@@ -1,130 +0,0 @@
1
- import { type RenderMaterial } from "../ForwardPass";
2
- import { Material } from "../Material";
3
- import { MaterialInstance } from "../MaterialInstance";
4
- import type { RenderSource } from "../Renderer";
5
- import { Texture } from "../Texture";
6
- import { TextureBinding } from "../TextureBinding";
7
- import type { ProductionRendererInput, RuntimeParityTransmissionBackdropCaptureOptions } from "./ProductionRendererTypes";
8
-
9
- export function normalizeTransmissionBackdropCapture(
10
- options: ProductionRendererInput["transmissionBackdropCapture"]
11
- ): Required<RuntimeParityTransmissionBackdropCaptureOptions> | null {
12
- if (!options) return null;
13
- const mode = options.mode ?? "scene-color-readback";
14
- if (mode !== "scene-color-readback") {
15
- throw new Error(`Unsupported transmission backdrop capture mode: ${mode}`);
16
- }
17
- const strength = options.strength ?? 0.82;
18
- const refractionScale = options.refractionScale ?? 0.032;
19
- if (!Number.isFinite(strength) || strength < 0 || strength > 1) {
20
- throw new RangeError("transmissionBackdropCapture.strength must be finite and within [0, 1]");
21
- }
22
- if (!Number.isFinite(refractionScale) || refractionScale < 0) {
23
- throw new RangeError("transmissionBackdropCapture.refractionScale must be finite and non-negative");
24
- }
25
- return { mode, strength, refractionScale };
26
- }
27
-
28
- export function bindTransmissionBackdropCapture(
29
- source: RenderSource,
30
- texture: Texture,
31
- options: Required<RuntimeParityTransmissionBackdropCaptureOptions>
32
- ): number {
33
- const binding = new TextureBinding({
34
- name: "u_transmissionBackdropTexture",
35
- texture,
36
- expectedColorSpace: "srgb",
37
- required: true
38
- });
39
- let count = 0;
40
- for (const material of collectSourceMaterials(source)) {
41
- setMaterialTransmissionBackdrop(material, binding, options);
42
- count += 1;
43
- }
44
- return count;
45
- }
46
-
47
- export function createSceneColorMipLevels(source: Uint8Array, width: number, height: number): readonly {
48
- readonly width: number;
49
- readonly height: number;
50
- readonly data: Uint8Array;
51
- }[] {
52
- const levels: { width: number; height: number; data: Uint8Array }[] = [{ width, height, data: new Uint8Array(source) }];
53
- let previous = levels[0]!;
54
- while (previous.width > 1 || previous.height > 1) {
55
- const nextWidth = Math.max(1, Math.floor(previous.width / 2));
56
- const nextHeight = Math.max(1, Math.floor(previous.height / 2));
57
- const next = new Uint8Array(nextWidth * nextHeight * 4);
58
- for (let y = 0; y < nextHeight; y += 1) {
59
- for (let x = 0; x < nextWidth; x += 1) {
60
- const targetOffset = (y * nextWidth + x) * 4;
61
- const samples: number[] = [0, 0, 0, 0];
62
- let sampleCount = 0;
63
- for (let dy = 0; dy < 2; dy += 1) {
64
- for (let dx = 0; dx < 2; dx += 1) {
65
- const sourceX = Math.min(previous.width - 1, x * 2 + dx);
66
- const sourceY = Math.min(previous.height - 1, y * 2 + dy);
67
- const sourceOffset = (sourceY * previous.width + sourceX) * 4;
68
- samples[0]! += previous.data[sourceOffset] ?? 0;
69
- samples[1]! += previous.data[sourceOffset + 1] ?? 0;
70
- samples[2]! += previous.data[sourceOffset + 2] ?? 0;
71
- samples[3]! += previous.data[sourceOffset + 3] ?? 255;
72
- sampleCount += 1;
73
- }
74
- }
75
- next[targetOffset] = Math.round(samples[0]! / sampleCount);
76
- next[targetOffset + 1] = Math.round(samples[1]! / sampleCount);
77
- next[targetOffset + 2] = Math.round(samples[2]! / sampleCount);
78
- next[targetOffset + 3] = Math.round(samples[3]! / sampleCount);
79
- }
80
- }
81
- previous = { width: nextWidth, height: nextHeight, data: next };
82
- levels.push(previous);
83
- }
84
- return levels;
85
- }
86
-
87
- function setMaterialTransmissionBackdrop(
88
- material: RenderMaterial,
89
- binding: TextureBinding,
90
- options: Required<RuntimeParityTransmissionBackdropCaptureOptions>
91
- ): void {
92
- const target = material instanceof MaterialInstance ? material : material instanceof Material ? material : null;
93
- if (!target) return;
94
- const set = (name: string, value: Parameters<Material["setParameter"]>[1]) => {
95
- if (target instanceof MaterialInstance) {
96
- target.setOverride(name, value);
97
- } else {
98
- target.setParameter(name, value);
99
- }
100
- };
101
- set("u_transmissionBackdropTexture", binding);
102
- set("u_transmissionBackdropEnabled", 1);
103
- set("u_transmissionBackdropStrength", options.strength);
104
- set("u_transmissionBackdropResolution", [binding.texture?.width ?? 1, binding.texture?.height ?? 1]);
105
- set("u_transmissionBackdropMipCount", binding.texture?.textureLevels.length ?? 1);
106
- set("u_transmissionBackdropRefractionScale", options.refractionScale);
107
- }
108
-
109
- function collectSourceMaterials(source: RenderSource): readonly RenderMaterial[] {
110
- const materials: RenderMaterial[] = [];
111
- const seen = new Set<RenderMaterial>();
112
- const add = (material: RenderMaterial | undefined) => {
113
- if (!material || seen.has(material)) return;
114
- seen.add(material);
115
- materials.push(material);
116
- };
117
- const library = source.materialLibrary;
118
- if (library instanceof Map) {
119
- for (const material of library.values()) add(material);
120
- } else if (library) {
121
- for (const material of Object.values(library)) add(material);
122
- }
123
- if (source.renderItems) {
124
- for (const item of source.renderItems) add(item.material);
125
- }
126
- if (source.collectRenderItems) {
127
- for (const item of source.collectRenderItems()) add(item.material);
128
- }
129
- return materials;
130
- }
@@ -1,2 +0,0 @@
1
- export interface MorphTargetPlan { readonly targetCount: number; readonly attributeSlots: number; readonly textureBacked: boolean; }
2
- export function createMorphTargetPlan(targetCount: number, maxAttributeSlots = 8): MorphTargetPlan { return { targetCount, attributeSlots: Math.min(targetCount, maxAttributeSlots), textureBacked: targetCount > maxAttributeSlots }; }
@@ -1,2 +0,0 @@
1
- export interface SkinningPalette { readonly jointCount: number; readonly matrixTexture?: boolean; readonly uniformLimit?: number; }
2
- export function chooseSkinningPalette(jointCount: number, uniformLimit = 64): SkinningPalette { return { jointCount, uniformLimit, matrixTexture: jointCount > uniformLimit }; }
@@ -1,17 +0,0 @@
1
- import type { ProductionRenderProof, ProductionRendererBackend, ProductionRendererFeature, ProductionRendererInput } from '../ProductionRendererTypes';
2
-
3
- export interface RendererBackendDiagnostics {
4
- readonly backend: ProductionRendererBackend;
5
- readonly contextType: string;
6
- readonly realDevice: boolean;
7
- readonly fallback?: string;
8
- }
9
-
10
- export interface RendererBackend {
11
- readonly backend: ProductionRendererBackend;
12
- readonly contextType: string;
13
- renderImportedAsset(input: ProductionRendererInput): ProductionRenderProof;
14
- getFeatures(): readonly ProductionRendererFeature[];
15
- getDiagnostics(): RendererBackendDiagnostics;
16
- dispose(): void;
17
- }
@@ -1,30 +0,0 @@
1
- import { ProductionWebGL2Renderer, type ProductionWebGL2RendererOptions } from '../ProductionWebGL2Renderer';
2
- import type { ProductionRenderProof, ProductionRendererFeature, ProductionRendererInput } from "../ProductionRendererTypes";
3
- import type { RendererBackend, RendererBackendDiagnostics } from './RendererBackend';
4
-
5
- export class WebGL2RendererBackend implements RendererBackend {
6
- readonly backend = "webgl2" as const;
7
- readonly contextType = 'webgl2';
8
-
9
- private constructor(private readonly renderer: ProductionWebGL2Renderer) {}
10
-
11
- static async create(options: ProductionWebGL2RendererOptions): Promise<WebGL2RendererBackend> {
12
- return new WebGL2RendererBackend(await ProductionWebGL2Renderer.create(options));
13
- }
14
-
15
- renderImportedAsset(input: ProductionRendererInput): ProductionRenderProof {
16
- return this.renderer.renderImportedAsset(input);
17
- }
18
-
19
- getFeatures(): readonly ProductionRendererFeature[] {
20
- return this.renderer.getFeatures();
21
- }
22
-
23
- getDiagnostics(): RendererBackendDiagnostics {
24
- return { backend: "webgl2", contextType: this.contextType, realDevice: true };
25
- }
26
-
27
- dispose(): void {
28
- this.renderer.dispose();
29
- }
30
- }
@@ -1,24 +0,0 @@
1
- import { createProductionWebGPUReport, type ProductionWebGPULike, type ProductionWebGPUReport } from '../ProductionWebGPURenderer';
2
-
3
- export interface WebGPURendererBackendOptions {
4
- readonly navigatorGpu?: ProductionWebGPULike | null;
5
- readonly userAgent?: string;
6
- }
7
-
8
- export class WebGPURendererBackend {
9
- readonly backend = 'webgpu' as const;
10
- readonly contextType = 'webgpu';
11
- private constructor(private readonly report: ProductionWebGPUReport) {}
12
-
13
- static async create(options: WebGPURendererBackendOptions = {}): Promise<WebGPURendererBackend> {
14
- return new WebGPURendererBackend(await createProductionWebGPUReport(options.navigatorGpu ?? null));
15
- }
16
-
17
- getReport(): ProductionWebGPUReport {
18
- return this.report;
19
- }
20
-
21
- getDiagnostics(): { readonly backend: 'webgpu'; readonly contextType: 'webgpu'; readonly realDevice: boolean; readonly fallback?: string } {
22
- return { backend: this.backend, contextType: this.contextType, realDevice: this.report.status === 'available', fallback: this.report.warnings[0] };
23
- }
24
- }
@@ -1,2 +0,0 @@
1
- export interface WebGL2BufferDescriptor { readonly label: string; readonly backend?: 'webgl2'; readonly detail?: string; }
2
- export class WebGL2Buffer { readonly backend = 'webgl2' as const; constructor(readonly descriptor: WebGL2BufferDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGL2CapabilitiesDescriptor { readonly label: string; readonly backend?: 'webgl2'; readonly detail?: string; }
2
- export class WebGL2Capabilities { readonly backend = 'webgl2' as const; constructor(readonly descriptor: WebGL2CapabilitiesDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGL2RenderTargetDescriptor { readonly label: string; readonly backend?: 'webgl2'; readonly detail?: string; }
2
- export class WebGL2RenderTarget { readonly backend = 'webgl2' as const; constructor(readonly descriptor: WebGL2RenderTargetDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGL2ShaderDescriptor { readonly label: string; readonly backend?: 'webgl2'; readonly detail?: string; }
2
- export class WebGL2Shader { readonly backend = 'webgl2' as const; constructor(readonly descriptor: WebGL2ShaderDescriptor) {} }
@@ -1 +0,0 @@
1
- export * from "../../../WebGL2StateCache";
@@ -1,2 +0,0 @@
1
- export interface WebGL2TextureDescriptor { readonly label: string; readonly backend?: 'webgl2'; readonly detail?: string; }
2
- export class WebGL2Texture { readonly backend = 'webgl2' as const; constructor(readonly descriptor: WebGL2TextureDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGPUBufferDescriptor { readonly label: string; readonly backend?: 'webgpu'; readonly detail?: string; }
2
- export class WebGPUBuffer { readonly backend = 'webgpu' as const; constructor(readonly descriptor: WebGPUBufferDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGPUCapabilitiesDescriptor { readonly label: string; readonly backend?: 'webgpu'; readonly detail?: string; }
2
- export class WebGPUCapabilities { readonly backend = 'webgpu' as const; constructor(readonly descriptor: WebGPUCapabilitiesDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGPURenderTargetDescriptor { readonly label: string; readonly backend?: 'webgpu'; readonly detail?: string; }
2
- export class WebGPURenderTarget { readonly backend = 'webgpu' as const; constructor(readonly descriptor: WebGPURenderTargetDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGPUShaderDescriptor { readonly label: string; readonly backend?: 'webgpu'; readonly detail?: string; }
2
- export class WebGPUShader { readonly backend = 'webgpu' as const; constructor(readonly descriptor: WebGPUShaderDescriptor) {} }
@@ -1,2 +0,0 @@
1
- export interface WebGPUTextureDescriptor { readonly label: string; readonly backend?: 'webgpu'; readonly detail?: string; }
2
- export class WebGPUTexture { readonly backend = 'webgpu' as const; constructor(readonly descriptor: WebGPUTextureDescriptor) {} }
@@ -1,3 +0,0 @@
1
- export type ColorSpaceProduction = 'linear' | 'srgb' | 'display-p3';
2
- export function srgbToLinear(value: number): number { return value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4; }
3
- export function linearToSrgb(value: number): number { return value <= 0.0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - 0.055; }