@aura3d/rendering 1.4.0 → 1.4.2

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 (308) hide show
  1. package/package.json +38 -4
  2. package/AGENTS.md +0 -46
  3. package/src/ArchitecturalLightingFixtures.ts +0 -241
  4. package/src/ArchitecturalMaterialCatalog.ts +0 -130
  5. package/src/ArchitecturalMeasurementFixtures.ts +0 -155
  6. package/src/BRDFLut.ts +0 -47
  7. package/src/CameraFraming.ts +0 -200
  8. package/src/CanonicalSceneFixtures.ts +0 -95
  9. package/src/CascadedShadowMaps.ts +0 -449
  10. package/src/ColorManagement.ts +0 -127
  11. package/src/CullingFixtures.ts +0 -280
  12. package/src/DecalGeometry.ts +0 -26
  13. package/src/DepthPass.ts +0 -110
  14. package/src/EnvironmentBackgroundPass.ts +0 -194
  15. package/src/EnvironmentBackgroundResources.ts +0 -309
  16. package/src/EnvironmentLighting.ts +0 -96
  17. package/src/EnvironmentMapResources.ts +0 -1026
  18. package/src/EnvironmentPipeline.ts +0 -69
  19. package/src/EnvironmentPlatform.ts +0 -1306
  20. package/src/EnvironmentPreset.ts +0 -155
  21. package/src/Exposure.ts +0 -66
  22. package/src/ExternalParityRenderPreset.ts +0 -725
  23. package/src/ForwardPass.ts +0 -1668
  24. package/src/FrameVisualMetrics.ts +0 -301
  25. package/src/Geometry.ts +0 -461
  26. package/src/GeometryPrimitives.ts +0 -2
  27. package/src/HDRRenderPipeline.ts +0 -94
  28. package/src/IBL.ts +0 -86
  29. package/src/IndexBuffer.ts +0 -57
  30. package/src/InstancedPBRMaterial.ts +0 -186
  31. package/src/InstancedUnlitMaterial.ts +0 -60
  32. package/src/Instancing.ts +0 -19
  33. package/src/LightCollector.ts +0 -82
  34. package/src/LightUniforms.ts +0 -47
  35. package/src/LightingDebug.ts +0 -80
  36. package/src/LightingDefaults.ts +0 -79
  37. package/src/LightingRig.ts +0 -301
  38. package/src/LineGeometry.ts +0 -2
  39. package/src/Material.ts +0 -209
  40. package/src/MaterialBinding.ts +0 -131
  41. package/src/MaterialInstance.ts +0 -59
  42. package/src/MaterialPresets.ts +0 -272
  43. package/src/MorphTarget.ts +0 -124
  44. package/src/MorphTargetPlan.ts +0 -178
  45. package/src/MorphUnlitMaterial.ts +0 -60
  46. package/src/NormalMappedPBRMaterial.ts +0 -188
  47. package/src/OceanFixtures.ts +0 -318
  48. package/src/PBRLightingDefaults.ts +0 -12
  49. package/src/PBRMaterial.ts +0 -442
  50. package/src/PMREM.ts +0 -53
  51. package/src/PbrReference.ts +0 -681
  52. package/src/PostProcessPass.ts +0 -2507
  53. package/src/ProceduralTextureFixtures.ts +0 -393
  54. package/src/ProductTurntableFixtures.ts +0 -815
  55. package/src/Raycaster.ts +0 -21
  56. package/src/ReflectionProbe.ts +0 -13
  57. package/src/ReflectionSurfaces.ts +0 -219
  58. package/src/RenderBackend.ts +0 -43
  59. package/src/RenderDebugViews.ts +0 -138
  60. package/src/RenderDevice.ts +0 -836
  61. package/src/RenderGraph.ts +0 -194
  62. package/src/RenderPass.ts +0 -27
  63. package/src/RenderPipeline.ts +0 -101
  64. package/src/RenderQueue.ts +0 -12
  65. package/src/RenderState.ts +0 -12
  66. package/src/Renderer.ts +0 -2631
  67. package/src/RendererDebugOverlay.ts +0 -80
  68. package/src/RendererFeatureGates.ts +0 -150
  69. package/src/RendererPostprocessPlan.ts +0 -279
  70. package/src/RendererTiming.ts +0 -251
  71. package/src/RendererVisualPipelineReport.ts +0 -836
  72. package/src/ResourceLifecycle.ts +0 -21
  73. package/src/Sampler.ts +0 -37
  74. package/src/SceneOptimization.ts +0 -518
  75. package/src/ShaderChunks.ts +0 -393
  76. package/src/ShaderLibrary.ts +0 -2766
  77. package/src/ShaderModule.ts +0 -36
  78. package/src/ShaderPreprocessor.ts +0 -260
  79. package/src/ShaderReflection.ts +0 -201
  80. package/src/ShadowMap.ts +0 -237
  81. package/src/ShadowPass.ts +0 -198
  82. package/src/ShadowProjection.ts +0 -115
  83. package/src/SkinnedLitMaterial.ts +0 -397
  84. package/src/SkinnedUnlitMaterial.ts +0 -63
  85. package/src/SkinningBounds.ts +0 -131
  86. package/src/SpaceEnvironmentFixtures.ts +0 -200
  87. package/src/SpriteGeometry.ts +0 -21
  88. package/src/StereoCameraRig.ts +0 -127
  89. package/src/StereoEffects.ts +0 -274
  90. package/src/TerrainFixtures.ts +0 -180
  91. package/src/Texture.ts +0 -307
  92. package/src/TextureBinding.ts +0 -91
  93. package/src/TexturedPBRMaterial.ts +0 -1112
  94. package/src/TexturedUnlitMaterial.ts +0 -67
  95. package/src/ToneMapping.ts +0 -105
  96. package/src/UniformBinder.ts +0 -16
  97. package/src/UniformLayout.ts +0 -129
  98. package/src/UnlitMaterial.ts +0 -75
  99. package/src/VegetationFixtures.ts +0 -314
  100. package/src/VertexBuffer.ts +0 -120
  101. package/src/VertexFormat.ts +0 -171
  102. package/src/VoxelWorldFixtures.ts +0 -280
  103. package/src/WeatherFixtures.ts +0 -223
  104. package/src/WebGL2Device.ts +0 -2280
  105. package/src/WebGL2StateCache.ts +0 -330
  106. package/src/WebGPUDevice.ts +0 -2877
  107. package/src/WebGPURenderToTextureProof.ts +0 -139
  108. package/src/advanced-runtime/AdvancedRenderer.ts +0 -73
  109. package/src/advanced-runtime/index.ts +0 -9
  110. package/src/animation/AnimationMaterialStyle.ts +0 -32
  111. package/src/animation/AnimationRenderPreset.ts +0 -45
  112. package/src/animation/AnimationToonMaterial.ts +0 -387
  113. package/src/animation/AnimationVisualQuality.ts +0 -71
  114. package/src/animation/applyAnimationRenderPreset.ts +0 -180
  115. package/src/animation/index.ts +0 -5
  116. package/src/cinematic/BloomPass.ts +0 -26
  117. package/src/cinematic/CinematicDepthComposition.ts +0 -30
  118. package/src/cinematic/CinematicEvidence.ts +0 -123
  119. package/src/cinematic/CinematicLightingRig.ts +0 -144
  120. package/src/cinematic/CinematicMaterialPresets.ts +0 -130
  121. package/src/cinematic/CinematicPostProcess.ts +0 -83
  122. package/src/cinematic/DepthHazePass.ts +0 -30
  123. package/src/cinematic/EmissivePracticalLightSystem.ts +0 -45
  124. package/src/cinematic/FilmGrainPass.ts +0 -24
  125. package/src/cinematic/FogVolumeSystem.ts +0 -30
  126. package/src/cinematic/GlowCardSystem.ts +0 -44
  127. package/src/cinematic/RainParticleSystem.ts +0 -151
  128. package/src/cinematic/VignettePass.ts +0 -25
  129. package/src/cinematic/WetReflectionApproximation.ts +0 -27
  130. package/src/cinematic/index.ts +0 -14
  131. package/src/effects/CollisionModule.ts +0 -64
  132. package/src/effects/ColorModule.ts +0 -60
  133. package/src/effects/ForceModule.ts +0 -25
  134. package/src/effects/GPUParticleBackend.ts +0 -569
  135. package/src/effects/Particle.ts +0 -108
  136. package/src/effects/ParticleDiagnostics.ts +0 -224
  137. package/src/effects/ParticleEffectPresets.ts +0 -147
  138. package/src/effects/ParticleEmitter.ts +0 -326
  139. package/src/effects/ParticleModule.ts +0 -26
  140. package/src/effects/ParticleRenderPass.ts +0 -117
  141. package/src/effects/ParticleRenderer.ts +0 -132
  142. package/src/effects/ParticleSystem.ts +0 -333
  143. package/src/effects/SizeModule.ts +0 -56
  144. package/src/effects/TrailModule.ts +0 -72
  145. package/src/effects/VelocityModule.ts +0 -75
  146. package/src/effects/index.ts +0 -15
  147. package/src/index.ts +0 -925
  148. package/src/materials/AlphaSorting.ts +0 -30
  149. package/src/materials/MaterialExtensions.ts +0 -42
  150. package/src/materials/PhysicalMaterial.ts +0 -133
  151. package/src/materials/TransmissionPass.ts +0 -51
  152. package/src/performance/BVH.ts +0 -18
  153. package/src/performance/Batcher.ts +0 -2
  154. package/src/performance/FrustumCuller.ts +0 -9
  155. package/src/performance/LOD.ts +0 -20
  156. package/src/performance/Octree.ts +0 -10
  157. package/src/performance/RenderItemSorting.ts +0 -170
  158. package/src/performance/RendererStats.ts +0 -43
  159. package/src/performance/ResourceBudget.ts +0 -44
  160. package/src/postprocess/BloomPass.ts +0 -28
  161. package/src/postprocess/CinematicDiagnostics.ts +0 -642
  162. package/src/postprocess/ColorGradingPass.ts +0 -24
  163. package/src/postprocess/DepthOfFieldPass.ts +0 -12
  164. package/src/postprocess/EffectComposer.ts +0 -349
  165. package/src/postprocess/SSAOPass.ts +0 -20
  166. package/src/postprocess/index.ts +0 -34
  167. package/src/production-runtime/AnimationControlsPipeline.ts +0 -77
  168. package/src/production-runtime/PBRHDRPipeline.ts +0 -381
  169. package/src/production-runtime/ProductionEffectsPipeline.ts +0 -85
  170. package/src/production-runtime/ProductionRendererTypes.ts +0 -136
  171. package/src/production-runtime/ProductionRuntimeRenderer.ts +0 -172
  172. package/src/production-runtime/ProductionWebGL2Renderer.ts +0 -313
  173. package/src/production-runtime/ProductionWebGPURenderer.ts +0 -396
  174. package/src/production-runtime/TransmissionBackdropCapture.ts +0 -130
  175. package/src/production-runtime/animation/MorphTargetRenderer.ts +0 -2
  176. package/src/production-runtime/animation/SkinningRenderer.ts +0 -2
  177. package/src/production-runtime/backends/RendererBackend.ts +0 -17
  178. package/src/production-runtime/backends/WebGL2RendererBackend.ts +0 -30
  179. package/src/production-runtime/backends/WebGPURendererBackend.ts +0 -24
  180. package/src/production-runtime/backends/webgl2/WebGL2Buffer.ts +0 -2
  181. package/src/production-runtime/backends/webgl2/WebGL2Capabilities.ts +0 -2
  182. package/src/production-runtime/backends/webgl2/WebGL2RenderTarget.ts +0 -2
  183. package/src/production-runtime/backends/webgl2/WebGL2Shader.ts +0 -2
  184. package/src/production-runtime/backends/webgl2/WebGL2StateCache.ts +0 -1
  185. package/src/production-runtime/backends/webgl2/WebGL2Texture.ts +0 -2
  186. package/src/production-runtime/backends/webgpu/WebGPUBuffer.ts +0 -2
  187. package/src/production-runtime/backends/webgpu/WebGPUCapabilities.ts +0 -2
  188. package/src/production-runtime/backends/webgpu/WebGPURenderTarget.ts +0 -2
  189. package/src/production-runtime/backends/webgpu/WebGPUShader.ts +0 -2
  190. package/src/production-runtime/backends/webgpu/WebGPUTexture.ts +0 -2
  191. package/src/production-runtime/color/ColorManagement.ts +0 -3
  192. package/src/production-runtime/color/ToneMapping.ts +0 -7
  193. package/src/production-runtime/diagnostics/FrameCapture.ts +0 -2
  194. package/src/production-runtime/diagnostics/GPUCapabilities.ts +0 -2
  195. package/src/production-runtime/diagnostics/RendererStats.ts +0 -2
  196. package/src/production-runtime/environment/EnvironmentMap.ts +0 -1
  197. package/src/production-runtime/environment/HDRLoader.ts +0 -57
  198. package/src/production-runtime/environment/PMREMGenerator.ts +0 -713
  199. package/src/production-runtime/framegraph/FrameGraph.ts +0 -18
  200. package/src/production-runtime/framegraph/RenderPass.ts +0 -15
  201. package/src/production-runtime/geometry/ProjectedDecalGeometry.ts +0 -439
  202. package/src/production-runtime/index.ts +0 -127
  203. package/src/production-runtime/lights/LightManager.ts +0 -7
  204. package/src/production-runtime/lights/ShadowMapRenderer.ts +0 -5
  205. package/src/production-runtime/materials/GLTFMaterialAdapter.ts +0 -6
  206. package/src/production-runtime/materials/GLTFPBRMaterialAdapter.ts +0 -2
  207. package/src/production-runtime/materials/MaterialCompiler.ts +0 -7
  208. package/src/production-runtime/materials/MaterialTextureBindings.ts +0 -5
  209. package/src/production-runtime/materials/PBRMaterial.ts +0 -2
  210. package/src/production-runtime/materials/PBRShaderFeatures.ts +0 -2
  211. package/src/production-runtime/passes/ContactShadowPass.ts +0 -184
  212. package/src/production-runtime/passes/DepthPrepass.ts +0 -7
  213. package/src/production-runtime/passes/OpaquePass.ts +0 -7
  214. package/src/production-runtime/passes/ShadowPass.ts +0 -7
  215. package/src/production-runtime/passes/SkyboxPass.ts +0 -7
  216. package/src/production-runtime/passes/ToneMappingPass.ts +0 -7
  217. package/src/production-runtime/passes/TransparentPass.ts +0 -7
  218. package/src/production-runtime/postprocess/BloomPass.ts +0 -51
  219. package/src/production-runtime/postprocess/ColorGradingPass.ts +0 -49
  220. package/src/production-runtime/postprocess/DOFPass.ts +0 -47
  221. package/src/production-runtime/postprocess/FXAAPass.ts +0 -53
  222. package/src/production-runtime/postprocess/ProductionEffectComposer.ts +0 -78
  223. package/src/production-runtime/postprocess/ProductionPostProcessTypes.ts +0 -174
  224. package/src/production-runtime/postprocess/SSAOPass.ts +0 -45
  225. package/src/production-runtime/resources/GPUBuffer.ts +0 -2
  226. package/src/production-runtime/resources/GPUTexture.ts +0 -2
  227. package/src/production-runtime/resources/RenderTarget.ts +0 -3
  228. package/src/production-runtime/resources/ResourceCache.ts +0 -7
  229. package/src/production-runtime/scene/Camera.ts +0 -1
  230. package/src/production-runtime/scene/Lights.ts +0 -2
  231. package/src/production-runtime/scene/RenderableMesh.ts +0 -2
  232. package/src/production-runtime/scene/RenderablePrimitive.ts +0 -1
  233. package/src/production-runtime/scene/RenderableScene.ts +0 -4
  234. package/src/production-runtime/shaders/ShaderProgramLibrary.ts +0 -7
  235. package/src/production-runtime/shaders/chunks/brdf.glsl +0 -2
  236. package/src/production-runtime/shaders/chunks/ibl.glsl +0 -3
  237. package/src/production-runtime/shaders/chunks/pbr.frag.glsl +0 -47
  238. package/src/production-runtime/shaders/chunks/pbr.vert.glsl +0 -8
  239. package/src/production-runtime/shaders/chunks/shadows.glsl +0 -2
  240. package/src/production-runtime/shaders/wgsl/pbr.wgsl +0 -3
  241. package/src/production-runtime/shaders/wgsl/postprocess.wgsl +0 -2
  242. package/src/production-runtime/shaders/wgsl/skybox.wgsl +0 -2
  243. package/src/shaders/depth.frag.glsl +0 -5
  244. package/src/shaders/depth.vert.glsl +0 -8
  245. package/src/shaders/pbr-direct.frag.glsl +0 -687
  246. package/src/shaders/pbr-direct.vert.glsl +0 -18
  247. package/src/shaders/unlit.frag.glsl +0 -18
  248. package/src/shaders/unlit.vert.glsl +0 -13
  249. package/src/shadows/CascadedShadowPipeline.ts +0 -53
  250. package/src/shadows/ContactShadows.ts +0 -106
  251. package/src/shadows/ShadowDebugViews.ts +0 -46
  252. package/src/threejs-compatibility/InstancingSystem.ts +0 -17
  253. package/src/threejs-compatibility/LightingSystem.ts +0 -22
  254. package/src/threejs-compatibility/MaterialSystem.ts +0 -9
  255. package/src/threejs-compatibility/RenderTargetSystem.ts +0 -35
  256. package/src/threejs-compatibility/RendererDiagnostics.ts +0 -61
  257. package/src/threejs-compatibility/SceneRenderer.ts +0 -34
  258. package/src/threejs-compatibility/ShadowSystem.ts +0 -19
  259. package/src/threejs-compatibility/TextureSystem.ts +0 -19
  260. package/src/threejs-compatibility/ThreeCompatRenderer.ts +0 -90
  261. package/src/threejs-compatibility/TransparencySystem.ts +0 -19
  262. package/src/threejs-compatibility/index.ts +0 -29
  263. package/src/threejs-compatibility/performance/BVH.ts +0 -14
  264. package/src/threejs-compatibility/performance/FrustumCulling.ts +0 -10
  265. package/src/threejs-compatibility/performance/Instancing.ts +0 -4
  266. package/src/threejs-compatibility/performance/LODSystem.ts +0 -16
  267. package/src/threejs-compatibility/performance/OcclusionCulling.ts +0 -6
  268. package/src/threejs-compatibility/performance/RaycastAcceleration.ts +0 -12
  269. package/src/threejs-compatibility/performance/RendererProfiler.ts +0 -19
  270. package/src/threejs-compatibility/performance/TextureStreaming.ts +0 -4
  271. package/src/threejs-compatibility/performance/index.ts +0 -12
  272. package/src/threejs-compatibility/postprocess/BloomPass.ts +0 -16
  273. package/src/threejs-compatibility/postprocess/ColorGradingPass.ts +0 -16
  274. package/src/threejs-compatibility/postprocess/DepthOfFieldPass.ts +0 -21
  275. package/src/threejs-compatibility/postprocess/EffectComposer.ts +0 -14
  276. package/src/threejs-compatibility/postprocess/FXAAPass.ts +0 -15
  277. package/src/threejs-compatibility/postprocess/MotionBlurPass.ts +0 -20
  278. package/src/threejs-compatibility/postprocess/OutlinePass.ts +0 -21
  279. package/src/threejs-compatibility/postprocess/PostProcessTypes.ts +0 -169
  280. package/src/threejs-compatibility/postprocess/RenderPass.ts +0 -9
  281. package/src/threejs-compatibility/postprocess/SMAAPass.ts +0 -15
  282. package/src/threejs-compatibility/postprocess/SSAOPass.ts +0 -21
  283. package/src/threejs-compatibility/postprocess/ShaderPass.ts +0 -7
  284. package/src/threejs-compatibility/postprocess/TAAPass.ts +0 -15
  285. package/src/threejs-compatibility/postprocess/VignettePass.ts +0 -16
  286. package/src/threejs-compatibility/postprocess/index.ts +0 -15
  287. package/src/threejs-compatibility/shaders/NodeMaterial.ts +0 -21
  288. package/src/threejs-compatibility/shaders/RawShaderMaterial.ts +0 -6
  289. package/src/threejs-compatibility/shaders/ShaderDiagnostics.ts +0 -17
  290. package/src/threejs-compatibility/shaders/ShaderMaterial.ts +0 -18
  291. package/src/threejs-compatibility/shaders/ThreeCompatShaderChunks.ts +0 -6
  292. package/src/threejs-compatibility/shaders/Uniforms.ts +0 -18
  293. package/src/threejs-compatibility/shaders/index.ts +0 -9
  294. package/src/threejs-compatibility/vfx/GPUPointCloud.ts +0 -7
  295. package/src/threejs-compatibility/vfx/LineRenderer.ts +0 -13
  296. package/src/threejs-compatibility/vfx/ParticleSystem.ts +0 -23
  297. package/src/threejs-compatibility/vfx/SpriteSystem.ts +0 -14
  298. package/src/threejs-compatibility/vfx/TrailRenderer.ts +0 -8
  299. package/src/threejs-compatibility/vfx/VFXDiagnostics.ts +0 -23
  300. package/src/threejs-compatibility/vfx/index.ts +0 -9
  301. package/src/threejs-example-parity/index.ts +0 -205
  302. package/src/webgpu/WebGPUBuffer.ts +0 -1
  303. package/src/webgpu/WebGPUCompute.ts +0 -2
  304. package/src/webgpu/WebGPUPipelineCache.ts +0 -15
  305. package/src/webgpu/WebGPUPostProcess.ts +0 -2
  306. package/src/webgpu/WebGPUTexture.ts +0 -2
  307. package/tsconfig.json +0 -26
  308. 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; }