@flighthq/render-wgpu 0.5.1-next.973.788d3d7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/.tsbuildinfo.compressed-texture-decoder-contract +1 -0
- package/dist/.tsbuildinfo.contract +1 -0
- package/dist/.tsbuildinfo.runtime +1 -0
- package/dist/compressed-texture-decoder-contract/WgpuCompressedTextureDecoder.d.ts +3 -0
- package/dist/compressed-texture-decoder-contract/WgpuCompressedTextureDecoder.d.ts.map +1 -0
- package/dist/compressed-texture-decoder-contract/WgpuCompressedTextureDecoder.js +2 -0
- package/dist/compressed-texture-decoder-contract/WgpuCompressedTextureDecoder.js.map +1 -0
- package/dist/compressed-texture-decoder-contract/compressedTextureDecoderContract.d.ts +2 -0
- package/dist/compressed-texture-decoder-contract/compressedTextureDecoderContract.d.ts.map +1 -0
- package/dist/compressed-texture-decoder-contract/compressedTextureDecoderContract.js +2 -0
- package/dist/compressed-texture-decoder-contract/compressedTextureDecoderContract.js.map +1 -0
- package/dist/contract.d.ts +32 -34
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +32 -34
- package/dist/contract.js.map +1 -1
- package/dist/contract.render-wgpu-types.d.ts +55 -0
- package/dist/contract.render-wgpu-types.d.ts.map +1 -0
- package/dist/contract.render-wgpu-types.js +5 -0
- package/dist/contract.render-wgpu-types.js.map +1 -0
- package/dist/enableWgpuTextureResolverGuards.d.ts +3 -2
- package/dist/enableWgpuTextureResolverGuards.d.ts.map +1 -1
- package/dist/enableWgpuTextureResolverGuards.js +12 -9
- package/dist/enableWgpuTextureResolverGuards.js.map +1 -1
- package/dist/explainWgpuTextureResolution.d.ts +2 -1
- package/dist/explainWgpuTextureResolution.d.ts.map +1 -1
- package/dist/explainWgpuTextureResolution.js +2 -5
- package/dist/explainWgpuTextureResolution.js.map +1 -1
- package/dist/explainWgpuUniformEndianness.d.ts +3 -0
- package/dist/explainWgpuUniformEndianness.d.ts.map +1 -0
- package/dist/explainWgpuUniformEndianness.js +25 -0
- package/dist/explainWgpuUniformEndianness.js.map +1 -0
- package/dist/index.d.ts +20 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/types/Host.d.ts +5 -0
- package/dist/types/Host.d.ts.map +1 -0
- package/dist/types/Host.js +2 -0
- package/dist/types/Host.js.map +1 -0
- package/dist/types/WgpuAdapter.d.ts +14 -0
- package/dist/types/WgpuAdapter.d.ts.map +1 -0
- package/dist/types/WgpuAdapter.js +2 -0
- package/dist/types/WgpuAdapter.js.map +1 -0
- package/dist/types/WgpuAdapterCapabilities.d.ts +7 -0
- package/dist/types/WgpuAdapterCapabilities.d.ts.map +1 -0
- package/dist/types/WgpuAdapterCapabilities.js +2 -0
- package/dist/types/WgpuAdapterCapabilities.js.map +1 -0
- package/dist/types/WgpuBindGroup.d.ts +23 -0
- package/dist/types/WgpuBindGroup.d.ts.map +1 -0
- package/dist/types/WgpuBindGroup.js +2 -0
- package/dist/types/WgpuBindGroup.js.map +1 -0
- package/dist/types/WgpuBindGroupLayout.d.ts +45 -0
- package/dist/types/WgpuBindGroupLayout.d.ts.map +1 -0
- package/dist/types/WgpuBindGroupLayout.js +7 -0
- package/dist/types/WgpuBindGroupLayout.js.map +1 -0
- package/dist/types/WgpuBuffer.d.ts +34 -0
- package/dist/types/WgpuBuffer.d.ts.map +1 -0
- package/dist/types/WgpuBuffer.js +19 -0
- package/dist/types/WgpuBuffer.js.map +1 -0
- package/dist/types/WgpuCanvasContext.d.ts +17 -0
- package/dist/types/WgpuCanvasContext.d.ts.map +1 -0
- package/dist/types/WgpuCanvasContext.js +2 -0
- package/dist/types/WgpuCanvasContext.js.map +1 -0
- package/dist/types/WgpuColorAdjustmentMaterialFeature.d.ts +14 -0
- package/dist/types/WgpuColorAdjustmentMaterialFeature.d.ts.map +1 -0
- package/dist/types/WgpuColorAdjustmentMaterialFeature.js +2 -0
- package/dist/types/WgpuColorAdjustmentMaterialFeature.js.map +1 -0
- package/dist/types/WgpuCommandBuffer.d.ts +5 -0
- package/dist/types/WgpuCommandBuffer.d.ts.map +1 -0
- package/dist/types/WgpuCommandBuffer.js +2 -0
- package/dist/types/WgpuCommandBuffer.js.map +1 -0
- package/dist/types/WgpuCommandEncoder.d.ts +12 -0
- package/dist/types/WgpuCommandEncoder.d.ts.map +1 -0
- package/dist/types/WgpuCommandEncoder.js +2 -0
- package/dist/types/WgpuCommandEncoder.js.map +1 -0
- package/dist/types/WgpuCompressedTextureSupport.d.ts +6 -0
- package/dist/types/WgpuCompressedTextureSupport.d.ts.map +1 -0
- package/dist/types/WgpuCompressedTextureSupport.js +2 -0
- package/dist/types/WgpuCompressedTextureSupport.js.map +1 -0
- package/dist/types/WgpuCompressedTextureUploader.d.ts +6 -0
- package/dist/types/WgpuCompressedTextureUploader.d.ts.map +1 -0
- package/dist/types/WgpuCompressedTextureUploader.js +2 -0
- package/dist/types/WgpuCompressedTextureUploader.js.map +1 -0
- package/dist/types/WgpuCustomMaterialShaderSource.d.ts +2 -0
- package/dist/types/WgpuCustomMaterialShaderSource.d.ts.map +1 -0
- package/dist/types/WgpuCustomMaterialShaderSource.js +2 -0
- package/dist/types/WgpuCustomMaterialShaderSource.js.map +1 -0
- package/dist/types/WgpuDevice.d.ts +76 -0
- package/dist/types/WgpuDevice.d.ts.map +1 -0
- package/dist/types/WgpuDevice.js +2 -0
- package/dist/types/WgpuDevice.js.map +1 -0
- package/dist/types/WgpuDeviceRuntime.d.ts +53 -0
- package/dist/types/WgpuDeviceRuntime.d.ts.map +1 -0
- package/dist/types/WgpuDeviceRuntime.js +2 -0
- package/dist/types/WgpuDeviceRuntime.js.map +1 -0
- package/dist/types/WgpuDeviceSignals.d.ts +6 -0
- package/dist/types/WgpuDeviceSignals.d.ts.map +1 -0
- package/dist/types/WgpuDeviceSignals.js +2 -0
- package/dist/types/WgpuDeviceSignals.js.map +1 -0
- package/dist/types/WgpuDeviceState.d.ts +7 -0
- package/dist/types/WgpuDeviceState.d.ts.map +1 -0
- package/dist/types/WgpuDeviceState.js +2 -0
- package/dist/types/WgpuDeviceState.js.map +1 -0
- package/dist/types/WgpuEffectState.d.ts +19 -0
- package/dist/types/WgpuEffectState.d.ts.map +1 -0
- package/dist/types/WgpuEffectState.js +2 -0
- package/dist/types/WgpuEffectState.js.map +1 -0
- package/dist/types/WgpuExternalImageSource.d.ts +18 -0
- package/dist/types/WgpuExternalImageSource.d.ts.map +1 -0
- package/dist/types/WgpuExternalImageSource.js +2 -0
- package/dist/types/WgpuExternalImageSource.js.map +1 -0
- package/dist/types/WgpuFullscreenPipeline.d.ts +14 -0
- package/dist/types/WgpuFullscreenPipeline.d.ts.map +1 -0
- package/dist/types/WgpuFullscreenPipeline.js +2 -0
- package/dist/types/WgpuFullscreenPipeline.js.map +1 -0
- package/dist/types/WgpuGpu.d.ts +7 -0
- package/dist/types/WgpuGpu.d.ts.map +1 -0
- package/dist/types/WgpuGpu.js +2 -0
- package/dist/types/WgpuGpu.js.map +1 -0
- package/dist/types/WgpuHost.d.ts +44 -0
- package/dist/types/WgpuHost.d.ts.map +1 -0
- package/dist/types/WgpuHost.js +2 -0
- package/dist/types/WgpuHost.js.map +1 -0
- package/dist/types/WgpuMeshMaterialRenderer.d.ts +11 -0
- package/dist/types/WgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/types/WgpuMeshMaterialRenderer.js +2 -0
- package/dist/types/WgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/types/WgpuModifierSnippet.d.ts +16 -0
- package/dist/types/WgpuModifierSnippet.d.ts.map +1 -0
- package/dist/types/WgpuModifierSnippet.js +2 -0
- package/dist/types/WgpuModifierSnippet.js.map +1 -0
- package/dist/types/WgpuParticleResources.d.ts +12 -0
- package/dist/types/WgpuParticleResources.d.ts.map +1 -0
- package/dist/types/WgpuParticleResources.js +2 -0
- package/dist/types/WgpuParticleResources.js.map +1 -0
- package/dist/types/WgpuPipelineLayout.d.ts +8 -0
- package/dist/types/WgpuPipelineLayout.d.ts.map +1 -0
- package/dist/types/WgpuPipelineLayout.js +2 -0
- package/dist/types/WgpuPipelineLayout.js.map +1 -0
- package/dist/types/WgpuQuadBatchResources.d.ts +12 -0
- package/dist/types/WgpuQuadBatchResources.d.ts.map +1 -0
- package/dist/types/WgpuQuadBatchResources.js +2 -0
- package/dist/types/WgpuQuadBatchResources.js.map +1 -0
- package/dist/types/WgpuQuadMaterialRenderer.d.ts +9 -0
- package/dist/types/WgpuQuadMaterialRenderer.d.ts.map +1 -0
- package/dist/types/WgpuQuadMaterialRenderer.js +2 -0
- package/dist/types/WgpuQuadMaterialRenderer.js.map +1 -0
- package/dist/types/WgpuQueue.d.ts +12 -0
- package/dist/types/WgpuQueue.d.ts.map +1 -0
- package/dist/types/WgpuQueue.js +2 -0
- package/dist/types/WgpuQueue.js.map +1 -0
- package/dist/types/WgpuRenderOptions.d.ts +14 -0
- package/dist/types/WgpuRenderOptions.d.ts.map +1 -0
- package/dist/types/WgpuRenderOptions.js +2 -0
- package/dist/types/WgpuRenderOptions.js.map +1 -0
- package/dist/types/WgpuRenderPass.d.ts +31 -0
- package/dist/types/WgpuRenderPass.d.ts.map +1 -0
- package/dist/types/WgpuRenderPass.js +2 -0
- package/dist/types/WgpuRenderPass.js.map +1 -0
- package/dist/types/WgpuRenderPassEncoder.d.ts +52 -0
- package/dist/types/WgpuRenderPassEncoder.d.ts.map +1 -0
- package/dist/types/WgpuRenderPassEncoder.js +2 -0
- package/dist/types/WgpuRenderPassEncoder.js.map +1 -0
- package/dist/types/WgpuRenderPipeline.d.ts +96 -0
- package/dist/types/WgpuRenderPipeline.d.ts.map +1 -0
- package/dist/types/WgpuRenderPipeline.js +9 -0
- package/dist/types/WgpuRenderPipeline.js.map +1 -0
- package/dist/types/WgpuRenderState.d.ts +249 -0
- package/dist/types/WgpuRenderState.d.ts.map +1 -0
- package/dist/types/WgpuRenderState.js +2 -0
- package/dist/types/WgpuRenderState.js.map +1 -0
- package/dist/types/WgpuRenderStateOptions.d.ts +31 -0
- package/dist/types/WgpuRenderStateOptions.d.ts.map +1 -0
- package/dist/types/WgpuRenderStateOptions.js +2 -0
- package/dist/types/WgpuRenderStateOptions.js.map +1 -0
- package/dist/types/WgpuRenderTarget.d.ts +62 -0
- package/dist/types/WgpuRenderTarget.d.ts.map +1 -0
- package/dist/types/WgpuRenderTarget.js +2 -0
- package/dist/types/WgpuRenderTarget.js.map +1 -0
- package/dist/types/WgpuRenderTexture.d.ts +25 -0
- package/dist/types/WgpuRenderTexture.d.ts.map +1 -0
- package/dist/types/WgpuRenderTexture.js +2 -0
- package/dist/types/WgpuRenderTexture.js.map +1 -0
- package/dist/types/WgpuSampler.d.ts +19 -0
- package/dist/types/WgpuSampler.d.ts.map +1 -0
- package/dist/types/WgpuSampler.js +2 -0
- package/dist/types/WgpuSampler.js.map +1 -0
- package/dist/types/WgpuScene3DRuntime.d.ts +6 -0
- package/dist/types/WgpuScene3DRuntime.d.ts.map +1 -0
- package/dist/types/WgpuScene3DRuntime.js +2 -0
- package/dist/types/WgpuScene3DRuntime.js.map +1 -0
- package/dist/types/WgpuShaderModule.d.ts +6 -0
- package/dist/types/WgpuShaderModule.d.ts.map +1 -0
- package/dist/types/WgpuShaderModule.js +2 -0
- package/dist/types/WgpuShaderModule.js.map +1 -0
- package/dist/types/WgpuShapeMesh.d.ts +7 -0
- package/dist/types/WgpuShapeMesh.d.ts.map +1 -0
- package/dist/types/WgpuShapeMesh.js +2 -0
- package/dist/types/WgpuShapeMesh.js.map +1 -0
- package/dist/types/WgpuSkinningAdapter.d.ts +18 -0
- package/dist/types/WgpuSkinningAdapter.d.ts.map +1 -0
- package/dist/types/WgpuSkinningAdapter.js +2 -0
- package/dist/types/WgpuSkinningAdapter.js.map +1 -0
- package/dist/types/WgpuSurface.d.ts +5 -0
- package/dist/types/WgpuSurface.d.ts.map +1 -0
- package/dist/types/WgpuSurface.js +2 -0
- package/dist/types/WgpuSurface.js.map +1 -0
- package/dist/types/WgpuTexture.d.ts +58 -0
- package/dist/types/WgpuTexture.d.ts.map +1 -0
- package/dist/types/WgpuTexture.js +9 -0
- package/dist/types/WgpuTexture.js.map +1 -0
- package/dist/types/WgpuTextureFormat.d.ts +2 -0
- package/dist/types/WgpuTextureFormat.d.ts.map +1 -0
- package/dist/types/WgpuTextureFormat.js +2 -0
- package/dist/types/WgpuTextureFormat.js.map +1 -0
- package/dist/types/WgpuTextureResolver.d.ts +4 -0
- package/dist/types/WgpuTextureResolver.d.ts.map +1 -0
- package/dist/types/WgpuTextureResolver.js +2 -0
- package/dist/types/WgpuTextureResolver.js.map +1 -0
- package/dist/types/WgpuTextureView.d.ts +16 -0
- package/dist/types/WgpuTextureView.d.ts.map +1 -0
- package/dist/types/WgpuTextureView.js +2 -0
- package/dist/types/WgpuTextureView.js.map +1 -0
- package/dist/types/WgpuUniformEndianness.d.ts +7 -0
- package/dist/types/WgpuUniformEndianness.d.ts.map +1 -0
- package/dist/types/WgpuUniformEndianness.js +2 -0
- package/dist/types/WgpuUniformEndianness.js.map +1 -0
- package/dist/types/WgpuVelocityWriter.d.ts +11 -0
- package/dist/types/WgpuVelocityWriter.d.ts.map +1 -0
- package/dist/types/WgpuVelocityWriter.js +2 -0
- package/dist/types/WgpuVelocityWriter.js.map +1 -0
- package/dist/wgpuAdapterCapabilities.d.ts +2 -2
- package/dist/wgpuAdapterCapabilities.d.ts.map +1 -1
- package/dist/wgpuAdapterCapabilities.js.map +1 -1
- package/dist/wgpuCompressedTexture.d.ts +7 -5
- package/dist/wgpuCompressedTexture.d.ts.map +1 -1
- package/dist/wgpuCompressedTexture.js +10 -18
- package/dist/wgpuCompressedTexture.js.map +1 -1
- package/dist/wgpuDeviceLoss.d.ts +2 -2
- package/dist/wgpuDeviceLoss.d.ts.map +1 -1
- package/dist/wgpuDeviceLoss.js +1 -1
- package/dist/wgpuDeviceLoss.js.map +1 -1
- package/dist/wgpuDraw.d.ts +11 -5
- package/dist/wgpuDraw.d.ts.map +1 -1
- package/dist/wgpuDraw.js +21 -20
- package/dist/wgpuDraw.js.map +1 -1
- package/dist/wgpuExternalImageSource.d.ts +3 -2
- package/dist/wgpuExternalImageSource.d.ts.map +1 -1
- package/dist/wgpuExternalImageSource.js.map +1 -1
- package/dist/wgpuExternalTexture.d.ts +7 -3
- package/dist/wgpuExternalTexture.d.ts.map +1 -1
- package/dist/wgpuExternalTexture.js +5 -5
- package/dist/wgpuExternalTexture.js.map +1 -1
- package/dist/wgpuFrame.d.ts +23 -0
- package/dist/wgpuFrame.d.ts.map +1 -0
- package/dist/{wgpuBackground.js → wgpuFrame.js} +67 -122
- package/dist/wgpuFrame.js.map +1 -0
- package/dist/wgpuFullscreenPass.d.ts +5 -4
- package/dist/wgpuFullscreenPass.d.ts.map +1 -1
- package/dist/wgpuFullscreenPass.js +22 -8
- package/dist/wgpuFullscreenPass.js.map +1 -1
- package/dist/wgpuHost.d.ts +4 -7
- package/dist/wgpuHost.d.ts.map +1 -1
- package/dist/wgpuHost.js +81 -70
- package/dist/wgpuHost.js.map +1 -1
- package/dist/wgpuMipmap.d.ts +2 -2
- package/dist/wgpuMipmap.d.ts.map +1 -1
- package/dist/wgpuMipmap.js +4 -3
- package/dist/wgpuMipmap.js.map +1 -1
- package/dist/wgpuQuadMaterialRegistry.d.ts +7 -0
- package/dist/wgpuQuadMaterialRegistry.d.ts.map +1 -0
- package/dist/wgpuQuadMaterialRegistry.js +33 -0
- package/dist/wgpuQuadMaterialRegistry.js.map +1 -0
- package/dist/wgpuRenderPass.d.ts +9 -0
- package/dist/wgpuRenderPass.d.ts.map +1 -0
- package/dist/wgpuRenderPass.js +210 -0
- package/dist/wgpuRenderPass.js.map +1 -0
- package/dist/wgpuRenderState.d.ts +16 -12
- package/dist/wgpuRenderState.d.ts.map +1 -1
- package/dist/wgpuRenderState.js +104 -149
- package/dist/wgpuRenderState.js.map +1 -1
- package/dist/wgpuRenderTarget.d.ts +13 -29
- package/dist/wgpuRenderTarget.d.ts.map +1 -1
- package/dist/wgpuRenderTarget.js +20 -253
- package/dist/wgpuRenderTarget.js.map +1 -1
- package/dist/wgpuRenderTargetPool.d.ts +8 -6
- package/dist/wgpuRenderTargetPool.d.ts.map +1 -1
- package/dist/wgpuRenderTargetPool.js +9 -9
- package/dist/wgpuRenderTargetPool.js.map +1 -1
- package/dist/wgpuRenderTexture.d.ts +7 -4
- package/dist/wgpuRenderTexture.d.ts.map +1 -1
- package/dist/wgpuRenderTexture.js +15 -17
- package/dist/wgpuRenderTexture.js.map +1 -1
- package/dist/wgpuRenderTexturePool.d.ts +3 -1
- package/dist/wgpuRenderTexturePool.d.ts.map +1 -1
- package/dist/wgpuRenderTexturePool.js +5 -7
- package/dist/wgpuRenderTexturePool.js.map +1 -1
- package/dist/wgpuScissor.d.ts +3 -3
- package/dist/wgpuScissor.d.ts.map +1 -1
- package/dist/wgpuScissor.js +8 -5
- package/dist/wgpuScissor.js.map +1 -1
- package/dist/wgpuScreenAntialias.d.ts +3 -0
- package/dist/wgpuScreenAntialias.d.ts.map +1 -0
- package/dist/wgpuScreenAntialias.js +120 -0
- package/dist/wgpuScreenAntialias.js.map +1 -0
- package/dist/wgpuScreenCapture.d.ts +6 -0
- package/dist/wgpuScreenCapture.d.ts.map +1 -0
- package/dist/wgpuScreenCapture.js +138 -0
- package/dist/wgpuScreenCapture.js.map +1 -0
- package/dist/wgpuScreenRenderTarget.d.ts +11 -0
- package/dist/wgpuScreenRenderTarget.d.ts.map +1 -0
- package/dist/wgpuScreenRenderTarget.js +121 -0
- package/dist/wgpuScreenRenderTarget.js.map +1 -0
- package/dist/wgpuShader.d.ts +11 -8
- package/dist/wgpuShader.d.ts.map +1 -1
- package/dist/wgpuShader.js +11 -10
- package/dist/wgpuShader.js.map +1 -1
- package/dist/wgpuShaderBinding.d.ts +3 -1
- package/dist/wgpuShaderBinding.d.ts.map +1 -1
- package/dist/wgpuShaderBinding.js +1 -1
- package/dist/wgpuShaderBinding.js.map +1 -1
- package/dist/wgpuShaderRegistry.d.ts +1 -1
- package/dist/wgpuShaderRegistry.d.ts.map +1 -1
- package/dist/wgpuShaderRegistry.js +1 -1
- package/dist/wgpuShaderRegistry.js.map +1 -1
- package/dist/wgpuTestHelper.d.ts +11 -2
- package/dist/wgpuTestHelper.d.ts.map +1 -1
- package/dist/wgpuTestHelper.js +50 -38
- package/dist/wgpuTestHelper.js.map +1 -1
- package/dist/wgpuTextureRenderTarget.d.ts +22 -0
- package/dist/wgpuTextureRenderTarget.d.ts.map +1 -0
- package/dist/wgpuTextureRenderTarget.js +123 -0
- package/dist/wgpuTextureRenderTarget.js.map +1 -0
- package/dist/wgpuTextureResolver.d.ts +5 -1
- package/dist/wgpuTextureResolver.d.ts.map +1 -1
- package/dist/wgpuTextureResolver.js +13 -12
- package/dist/wgpuTextureResolver.js.map +1 -1
- package/dist/wgpuTextureUpload.d.ts +5 -4
- package/dist/wgpuTextureUpload.d.ts.map +1 -1
- package/dist/wgpuTextureUpload.js +1 -1
- package/dist/wgpuTextureUpload.js.map +1 -1
- package/package.json +33 -13
- package/src/enableWgpuTextureResolverGuards.test.ts +40 -19
- package/src/explainWgpuTextureResolution.test.ts +6 -6
- package/src/explainWgpuUniformEndianness.test.ts +11 -0
- package/src/types/WgpuBindGroupLayout.test.ts +9 -0
- package/src/types/WgpuBuffer.test.ts +26 -0
- package/src/types/WgpuGpu.test.ts +56 -0
- package/src/types/WgpuRenderPipeline.test.ts +12 -0
- package/src/types/WgpuTexture.test.ts +15 -0
- package/src/wgpuAdapterCapabilities.test.ts +5 -4
- package/src/wgpuCompressedTexture.test.ts +31 -37
- package/src/wgpuDeviceLoss.test.ts +31 -24
- package/src/wgpuDraw.test.ts +21 -24
- package/src/wgpuExternalImageSource.test.ts +12 -11
- package/src/wgpuExternalTexture.test.ts +7 -6
- package/src/{wgpuBackground.test.ts → wgpuFrame.test.ts} +47 -29
- package/src/wgpuFullscreenPass.test.ts +8 -8
- package/src/wgpuHost.test.ts +57 -186
- package/src/wgpuMipmap.test.ts +15 -9
- package/src/wgpuQuadMaterialRegistry.test.ts +132 -0
- package/src/wgpuRenderPass.test.ts +239 -0
- package/src/wgpuRenderState.test.ts +215 -550
- package/src/wgpuRenderTarget.test.ts +44 -220
- package/src/wgpuRenderTargetPool.test.ts +23 -23
- package/src/wgpuRenderTexture.test.ts +21 -18
- package/src/wgpuRenderTexturePool.test.ts +3 -3
- package/src/wgpuScissor.test.ts +50 -19
- package/src/wgpuScreenAntialias.test.ts +65 -0
- package/src/wgpuScreenCapture.test.ts +165 -0
- package/src/wgpuScreenRenderTarget.test.ts +172 -0
- package/src/wgpuShader.test.ts +12 -11
- package/src/wgpuShaderBinding.test.ts +4 -4
- package/src/wgpuShaderRegistry.test.ts +4 -5
- package/src/wgpuTestHelper.test.ts +8 -7
- package/src/wgpuTextureRenderTarget.test.ts +129 -0
- package/src/wgpuTextureResolver.test.ts +25 -14
- package/src/wgpuTextureUpload.test.ts +15 -10
- package/dist/wgpuAntialias.d.ts +0 -14
- package/dist/wgpuAntialias.d.ts.map +0 -1
- package/dist/wgpuAntialias.js +0 -155
- package/dist/wgpuAntialias.js.map +0 -1
- package/dist/wgpuBackground.d.ts +0 -20
- package/dist/wgpuBackground.d.ts.map +0 -1
- package/dist/wgpuBackground.js.map +0 -1
- package/dist/wgpuElement.d.ts +0 -7
- package/dist/wgpuElement.d.ts.map +0 -1
- package/dist/wgpuElement.js +0 -20
- package/dist/wgpuElement.js.map +0 -1
- package/dist/wgpuMaterialRegistry.d.ts +0 -5
- package/dist/wgpuMaterialRegistry.d.ts.map +0 -1
- package/dist/wgpuMaterialRegistry.js +0 -32
- package/dist/wgpuMaterialRegistry.js.map +0 -1
- package/dist/wgpuPipeline.d.ts +0 -6
- package/dist/wgpuPipeline.d.ts.map +0 -1
- package/dist/wgpuPipeline.js +0 -33
- package/dist/wgpuPipeline.js.map +0 -1
- package/dist/wgpuSurface.d.ts +0 -6
- package/dist/wgpuSurface.d.ts.map +0 -1
- package/dist/wgpuSurface.js +0 -155
- package/dist/wgpuSurface.js.map +0 -1
- package/src/wgpuAntialias.test.ts +0 -239
- package/src/wgpuElement.test.ts +0 -145
- package/src/wgpuMaterialRegistry.test.ts +0 -100
- package/src/wgpuPipeline.test.ts +0 -62
- package/src/wgpuSurface.test.ts +0 -141
package/src/wgpuHost.test.ts
CHANGED
|
@@ -1,49 +1,39 @@
|
|
|
1
|
-
import { allocateEntity
|
|
2
|
-
import
|
|
3
|
-
import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest';
|
|
1
|
+
import { allocateEntity } from '@flighthq/entity/contract';
|
|
2
|
+
import { beforeAll, describe, expect, it, vi } from 'vitest';
|
|
4
3
|
|
|
4
|
+
import type { WgpuDevice, WgpuHostAcquisition } from './contract.render-wgpu-types.ts';
|
|
5
|
+
import { WgpuBufferUsage } from './contract.render-wgpu-types.ts';
|
|
6
|
+
import { createTestWgpuSurface, testWgpuHost } from './wgpuHost.ts';
|
|
5
7
|
import {
|
|
6
|
-
|
|
7
|
-
getWgpuHostBackend,
|
|
8
|
-
initializeWebWgpuHostBackend,
|
|
9
|
-
installWgpuHostBackend,
|
|
10
|
-
resetWgpuHostBackendForTest,
|
|
11
|
-
setWgpuHostBackend,
|
|
12
|
-
} from './wgpuHost';
|
|
13
|
-
import { createEmptyWgpuRegistries, createWgpuPipeline } from './wgpuPipeline';
|
|
14
|
-
import {
|
|
8
|
+
createWgpuAcquisition,
|
|
15
9
|
createWgpuRenderState,
|
|
16
|
-
createWgpuRenderStateFromCanvasElement,
|
|
17
10
|
destroyWgpuRenderState,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
function fakeBackend(): WgpuHostBackend {
|
|
22
|
-
return entityBackend({
|
|
23
|
-
acquire: vi.fn(),
|
|
24
|
-
isSupported: vi.fn(() => true),
|
|
25
|
-
release: vi.fn(),
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function entityBackend(fields: Omit<WgpuHostBackend, keyof Entity>): WgpuHostBackend {
|
|
30
|
-
return (() => {
|
|
31
|
-
const out = allocateEntity<WgpuHostBackend>();
|
|
32
|
-
Object.assign(out, fields);
|
|
33
|
-
return finishEntity(out);
|
|
34
|
-
})();
|
|
35
|
-
}
|
|
11
|
+
releaseWgpuAcquisition,
|
|
12
|
+
} from './wgpuRenderState.ts';
|
|
13
|
+
import { installWgpuMock } from './wgpuTestHelper.ts';
|
|
36
14
|
|
|
37
15
|
beforeAll(installWgpuMock);
|
|
38
|
-
afterEach(resetWgpuHostBackendForTest);
|
|
39
16
|
|
|
40
|
-
|
|
17
|
+
describe('createTestWgpuSurface', () => {
|
|
18
|
+
const ATTACHMENT = { alphaMode: 'premultiplied', device: {} as WgpuDevice, format: 'bgra8unorm' } as const;
|
|
19
|
+
|
|
20
|
+
it('builds a surface the test host backend can resolve back to its canvas', () => {
|
|
21
|
+
const canvas = document.createElement('canvas');
|
|
22
|
+
const surface = createTestWgpuSurface(canvas);
|
|
41
23
|
|
|
42
|
-
|
|
24
|
+
// The drawable lives on the runtime, not on the entity: nothing about the canvas is visible on the
|
|
25
|
+
// public surface, and the host is the only code that narrows it back.
|
|
26
|
+
expect(Object.keys(surface)).toEqual([]);
|
|
27
|
+
expect(() => testWgpuHost.attachSurface(surface, ATTACHMENT)).not.toThrow();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe('testWgpuHost', () => {
|
|
43
32
|
it('acquires Flight-owned browser handles and releases each native handle', async () => {
|
|
44
|
-
const backend =
|
|
33
|
+
const backend = testWgpuHost;
|
|
45
34
|
const canvas = document.createElement('canvas');
|
|
46
|
-
const
|
|
35
|
+
const target = createTestWgpuSurface(canvas);
|
|
36
|
+
const acquisition = await backend.acquire(target, {});
|
|
47
37
|
const unconfigure = vi.spyOn(acquisition.context, 'unconfigure');
|
|
48
38
|
const destroy = vi.spyOn(acquisition.device, 'destroy');
|
|
49
39
|
|
|
@@ -53,14 +43,11 @@ describe('createWebWgpuHostBackend', () => {
|
|
|
53
43
|
expect(destroy).toHaveBeenCalledOnce();
|
|
54
44
|
});
|
|
55
45
|
|
|
56
|
-
// ★ THE BACKEND NO LONGER DECIDES OWNERSHIP. It used to return early for `caller`, which meant the whole
|
|
57
|
-
// contract lived in one implementation and any other backend could violate it unseen — and it also made
|
|
58
|
-
// the caller's own release verb a no-op. `release` now tears down whatever it is handed; Flight simply
|
|
59
|
-
// never hands it a caller-owned acquisition (see O1/O2), and `releaseWgpuAcquisition` hands it one only
|
|
60
|
-
// because the caller asked.
|
|
61
46
|
it('tears down whatever it is handed, leaving the ownership decision to the caller', async () => {
|
|
62
|
-
const backend =
|
|
63
|
-
const
|
|
47
|
+
const backend = testWgpuHost;
|
|
48
|
+
const canvas = document.createElement('canvas');
|
|
49
|
+
const target = createTestWgpuSurface(canvas);
|
|
50
|
+
const acquired = await backend.acquire(target, {});
|
|
64
51
|
const acquisition = allocateEntity<WgpuHostAcquisition>();
|
|
65
52
|
Object.assign(acquisition, acquired);
|
|
66
53
|
acquisition.ownership = 'caller' as const;
|
|
@@ -80,173 +67,57 @@ describe('createWebWgpuHostBackend', () => {
|
|
|
80
67
|
},
|
|
81
68
|
});
|
|
82
69
|
try {
|
|
83
|
-
expect(
|
|
70
|
+
expect(testWgpuHost.isSupported()).toBe(false);
|
|
84
71
|
} finally {
|
|
85
72
|
installWgpuMock();
|
|
86
73
|
}
|
|
87
74
|
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
describe('getWgpuHostBackend', () => {
|
|
91
|
-
it('returns one stable explicit web fallback', () => {
|
|
92
|
-
const first = getWgpuHostBackend();
|
|
93
|
-
const second = getWgpuHostBackend();
|
|
94
|
-
expect(first).toBe(second);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
75
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
expect(typeof initializeWebWgpuHostBackend).toBe('function');
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
describe('installWgpuHostBackend', () => {
|
|
105
|
-
it('preserves the first installed host identity', () => {
|
|
106
|
-
const first = fakeBackend();
|
|
107
|
-
installWgpuHostBackend(first);
|
|
108
|
-
installWgpuHostBackend(fakeBackend());
|
|
109
|
-
expect(getWgpuHostBackend()).toBe(first);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
describe('resetWgpuHostBackendForTest', () => {
|
|
114
|
-
it('clears custom and host slots back to the web fallback', () => {
|
|
115
|
-
const fallback = getWgpuHostBackend();
|
|
116
|
-
const host = fakeBackend();
|
|
117
|
-
const custom = fakeBackend();
|
|
118
|
-
installWgpuHostBackend(host);
|
|
119
|
-
setWgpuHostBackend(custom);
|
|
120
|
-
|
|
121
|
-
resetWgpuHostBackendForTest();
|
|
122
|
-
expect(getWgpuHostBackend()).toBe(fallback);
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
describe('setWgpuHostBackend', () => {
|
|
126
|
-
it('routes acquisition and release through the same selected backend', async () => {
|
|
127
|
-
const web = createWebWgpuHostBackend();
|
|
128
|
-
const acquired = await web.acquire(document.createElement('canvas'), {});
|
|
129
|
-
// Flight-owned: the state acquired these, so destroying it releases them. The caller-owned case is the
|
|
130
|
-
// opposite assertion and lives in its own test below.
|
|
131
|
-
const acquisition = allocateEntity<WgpuHostAcquisition>();
|
|
132
|
-
Object.assign(acquisition, acquired);
|
|
133
|
-
acquisition.ownership = 'flight' as const;
|
|
134
|
-
const backend = entityBackend({
|
|
135
|
-
acquire: vi.fn(async () => acquisition),
|
|
136
|
-
isSupported: vi.fn(() => true),
|
|
137
|
-
release: vi.fn(),
|
|
138
|
-
});
|
|
76
|
+
it('routes acquisition and release through a caller-provided backend', async () => {
|
|
77
|
+
const web = testWgpuHost;
|
|
139
78
|
const canvas = document.createElement('canvas');
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
const state = await createWgpuRenderStateFromCanvasElement(canvas, _pipeline);
|
|
143
|
-
expect(backend.acquire).toHaveBeenCalledWith(canvas, { format: undefined, powerPreference: undefined });
|
|
144
|
-
expect(state.context).toBe(acquisition.context);
|
|
145
|
-
expect(state.device).toBe(acquisition.device);
|
|
146
|
-
expect(state.format).toBe(acquisition.format);
|
|
147
|
-
destroyWgpuRenderState(state);
|
|
148
|
-
expect(backend.release).toHaveBeenCalledOnce();
|
|
149
|
-
expect(backend.release).toHaveBeenCalledWith(acquisition);
|
|
150
|
-
|
|
151
|
-
web.release(acquired);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('releases flight-owned handles through the selected backend when initialization fails', async () => {
|
|
155
|
-
const web = createWebWgpuHostBackend();
|
|
156
|
-
const acquired = await web.acquire(document.createElement('canvas'), {});
|
|
79
|
+
const target = createTestWgpuSurface(canvas);
|
|
80
|
+
const acquired = await web.acquire(target, {});
|
|
157
81
|
const acquisition = allocateEntity<WgpuHostAcquisition>();
|
|
158
82
|
Object.assign(acquisition, acquired);
|
|
159
|
-
acquisition.ownership = '
|
|
160
|
-
const
|
|
161
|
-
throw new Error('configure failed');
|
|
162
|
-
});
|
|
163
|
-
const backend = entityBackend({
|
|
83
|
+
acquisition.ownership = 'caller' as const;
|
|
84
|
+
const backend: typeof web = {
|
|
164
85
|
acquire: vi.fn(async () => acquisition),
|
|
86
|
+
attachSurface: vi.fn(() => null),
|
|
87
|
+
create: vi.fn(),
|
|
165
88
|
isSupported: vi.fn(() => true),
|
|
166
89
|
release: vi.fn(),
|
|
167
|
-
}
|
|
168
|
-
|
|
90
|
+
} as typeof web;
|
|
91
|
+
const routeTarget = createTestWgpuSurface(document.createElement('canvas'));
|
|
92
|
+
|
|
93
|
+
const routed = await createWgpuAcquisition(backend, routeTarget);
|
|
94
|
+
expect(backend.acquire).toHaveBeenCalledWith(routeTarget, {});
|
|
95
|
+
expect(routed?.device).toBe(acquisition.device);
|
|
96
|
+
expect(routed?.format).toBe(acquisition.format);
|
|
169
97
|
|
|
170
|
-
|
|
98
|
+
releaseWgpuAcquisition(backend, acquisition);
|
|
171
99
|
expect(backend.release).toHaveBeenCalledOnce();
|
|
172
100
|
expect(backend.release).toHaveBeenCalledWith(acquisition);
|
|
173
101
|
|
|
174
|
-
configure.mockRestore();
|
|
175
102
|
web.release(acquired);
|
|
176
103
|
});
|
|
177
104
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
acquisition.ownership = 'caller' as const;
|
|
188
|
-
const configure = vi.spyOn(acquisition.context, 'configure').mockImplementationOnce(() => {
|
|
189
|
-
throw new Error('configure failed');
|
|
190
|
-
});
|
|
191
|
-
const destroy = vi.spyOn(acquisition.device, 'destroy');
|
|
192
|
-
const unconfigure = vi.spyOn(acquisition.context, 'unconfigure');
|
|
193
|
-
const backend = entityBackend({
|
|
194
|
-
acquire: vi.fn(async () => acquisition),
|
|
195
|
-
isSupported: vi.fn(() => true),
|
|
196
|
-
release: vi.fn((held) => {
|
|
197
|
-
held.context.unconfigure();
|
|
198
|
-
held.device.destroy();
|
|
199
|
-
}),
|
|
200
|
-
});
|
|
201
|
-
setWgpuHostBackend(backend);
|
|
105
|
+
it('never releases host handles when a state built on the device is destroyed', async () => {
|
|
106
|
+
const web = testWgpuHost;
|
|
107
|
+
const canvas = document.createElement('canvas');
|
|
108
|
+
const target = createTestWgpuSurface(canvas);
|
|
109
|
+
const acquired = await web.acquire(target, {});
|
|
110
|
+
const destroy = vi.spyOn(acquired.device, 'destroy');
|
|
111
|
+
const unconfigure = vi.spyOn(acquired.context, 'unconfigure');
|
|
112
|
+
|
|
113
|
+
destroyWgpuRenderState(createWgpuRenderState(acquired.device));
|
|
202
114
|
|
|
203
|
-
expect(() => createWgpuRenderState(acquisition, _pipeline)).toThrow('configure failed');
|
|
204
|
-
expect(backend.release).not.toHaveBeenCalled();
|
|
205
115
|
expect(destroy).not.toHaveBeenCalled();
|
|
206
116
|
expect(unconfigure).not.toHaveBeenCalled();
|
|
117
|
+
expect(acquired.device.createBuffer({ size: 4, usage: WgpuBufferUsage.COPY_DST }).size).toBe(4);
|
|
207
118
|
|
|
208
|
-
configure.mockRestore();
|
|
209
119
|
destroy.mockRestore();
|
|
210
120
|
unconfigure.mockRestore();
|
|
211
121
|
web.release(acquired);
|
|
212
122
|
});
|
|
213
|
-
|
|
214
|
-
// ★ O1. The destroy path, against a backend whose release really destroys.
|
|
215
|
-
it('O1: never releases caller-owned handles when the state is destroyed', async () => {
|
|
216
|
-
const web = createWebWgpuHostBackend();
|
|
217
|
-
const acquired = await web.acquire(document.createElement('canvas'), {});
|
|
218
|
-
const acquisition = allocateEntity<WgpuHostAcquisition>();
|
|
219
|
-
Object.assign(acquisition, acquired);
|
|
220
|
-
acquisition.ownership = 'caller' as const;
|
|
221
|
-
const destroy = vi.spyOn(acquisition.device, 'destroy');
|
|
222
|
-
const backend = entityBackend({
|
|
223
|
-
acquire: vi.fn(async () => acquisition),
|
|
224
|
-
isSupported: vi.fn(() => true),
|
|
225
|
-
release: vi.fn((held) => {
|
|
226
|
-
held.device.destroy();
|
|
227
|
-
}),
|
|
228
|
-
});
|
|
229
|
-
setWgpuHostBackend(backend);
|
|
230
|
-
|
|
231
|
-
const state = createWgpuRenderState(acquisition, _pipeline);
|
|
232
|
-
destroyWgpuRenderState(state);
|
|
233
|
-
|
|
234
|
-
expect(backend.release).not.toHaveBeenCalled();
|
|
235
|
-
expect(destroy).not.toHaveBeenCalled();
|
|
236
|
-
// The handles are still usable, which is the property the caller actually cares about.
|
|
237
|
-
expect(acquisition.device.createBuffer({ size: 4, usage: GPUBufferUsage.COPY_DST }).size).toBe(4);
|
|
238
|
-
|
|
239
|
-
destroy.mockRestore();
|
|
240
|
-
web.release(acquired);
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it('takes precedence over host installation and reveals that host when cleared', () => {
|
|
244
|
-
const host = fakeBackend();
|
|
245
|
-
const custom = fakeBackend();
|
|
246
|
-
installWgpuHostBackend(host);
|
|
247
|
-
setWgpuHostBackend(custom);
|
|
248
|
-
expect(getWgpuHostBackend()).toBe(custom);
|
|
249
|
-
setWgpuHostBackend(null);
|
|
250
|
-
expect(getWgpuHostBackend()).toBe(host);
|
|
251
|
-
});
|
|
252
123
|
});
|
package/src/wgpuMipmap.test.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type {
|
|
2
|
+
WgpuCommandBuffer,
|
|
3
|
+
WgpuCommandEncoder,
|
|
4
|
+
WgpuRenderPassEncoder,
|
|
5
|
+
WgpuRenderState,
|
|
6
|
+
WgpuTexture,
|
|
7
|
+
WgpuTextureView,
|
|
8
|
+
} from './contract.render-wgpu-types.ts';
|
|
9
|
+
import { generateWgpuMipmaps, getWgpuMipLevelCount, registerWgpuMipmapGeneration } from './wgpuMipmap.ts';
|
|
10
|
+
import { getWgpuRenderStateRuntime } from './wgpuRenderState.ts';
|
|
11
|
+
import { createWgpuRenderStateForTest, installWgpuMock } from './wgpuTestHelper.ts';
|
|
6
12
|
|
|
7
13
|
beforeAll(() => {
|
|
8
14
|
installWgpuMock();
|
|
9
15
|
});
|
|
10
16
|
|
|
11
|
-
function makeTextureSpy():
|
|
12
|
-
return { createView: vi.fn(() => ({}) as
|
|
17
|
+
function makeTextureSpy(): WgpuTexture {
|
|
18
|
+
return { createView: vi.fn(() => ({}) as WgpuTextureView), destroy: () => {} } as unknown as WgpuTexture;
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
// Replaces the mock device's command encoder with one whose render passes are spies, so a test can
|
|
@@ -22,9 +28,9 @@ function spyEncoderPasses(state: WgpuRenderState): ReturnType<typeof vi.fn> {
|
|
|
22
28
|
setBindGroup: vi.fn(),
|
|
23
29
|
draw: vi.fn(),
|
|
24
30
|
end: vi.fn(),
|
|
25
|
-
}) as unknown as
|
|
31
|
+
}) as unknown as WgpuRenderPassEncoder,
|
|
26
32
|
);
|
|
27
|
-
const encoder = { beginRenderPass, finish: () => ({}) as
|
|
33
|
+
const encoder = { beginRenderPass, finish: () => ({}) as WgpuCommandBuffer } as unknown as WgpuCommandEncoder;
|
|
28
34
|
vi.spyOn(state.device, 'createCommandEncoder').mockReturnValue(encoder);
|
|
29
35
|
return beginRenderPass;
|
|
30
36
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { EntityRuntimeKey } from '@flighthq/entity/contract';
|
|
2
|
+
import {
|
|
3
|
+
addLogSink,
|
|
4
|
+
createLogState,
|
|
5
|
+
createMemoryLogSink,
|
|
6
|
+
getMemoryLogSinkEntries,
|
|
7
|
+
removeLogSink,
|
|
8
|
+
} from '@flighthq/log/contract';
|
|
9
|
+
import type { LogState } from '@flighthq/log/contract';
|
|
10
|
+
import type { LogEntry, MemoryLogSink } from '@flighthq/log/contract';
|
|
11
|
+
import type { Material } from '@flighthq/materials/contract';
|
|
12
|
+
import { StandardMaterialKind } from '@flighthq/materials/contract';
|
|
13
|
+
import { enableRenderRegistriesGuards, explainRenderRegistriesMisses } from '@flighthq/render/contract';
|
|
14
|
+
import { RenderRegistryTable } from '@flighthq/render/contract';
|
|
15
|
+
|
|
16
|
+
import type {
|
|
17
|
+
WgpuDevice,
|
|
18
|
+
WgpuQuadMaterialRenderer,
|
|
19
|
+
WgpuRenderState,
|
|
20
|
+
WgpuShaderModule,
|
|
21
|
+
} from './contract.render-wgpu-types.ts';
|
|
22
|
+
import {
|
|
23
|
+
getWgpuQuadMaterialRenderer,
|
|
24
|
+
registerWgpuQuadMaterialRenderer,
|
|
25
|
+
resolveWgpuQuadMaterialRenderer,
|
|
26
|
+
} from './wgpuQuadMaterialRegistry.ts';
|
|
27
|
+
import { createWgpuDeviceState, createWgpuRenderStateRuntime, getWgpuRenderStateRuntime } from './wgpuRenderState.ts';
|
|
28
|
+
|
|
29
|
+
// Each test logs into a fresh caller-owned state, so logOnce keys never leak between tests.
|
|
30
|
+
let logState: LogState;
|
|
31
|
+
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
logState = createLogState();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const TestKind = 'TestMaterial';
|
|
37
|
+
const testRenderer: WgpuQuadMaterialRenderer = {
|
|
38
|
+
instanceFloatCount: 0,
|
|
39
|
+
getShaderModule: () => ({}) as WgpuShaderModule,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function makeState(): WgpuRenderState {
|
|
43
|
+
const device = {} as WgpuDevice;
|
|
44
|
+
const state = { device } as WgpuRenderState;
|
|
45
|
+
state[EntityRuntimeKey] = createWgpuRenderStateRuntime(createWgpuDeviceState(device));
|
|
46
|
+
return state;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function makeMaterial(kind: string): Material {
|
|
50
|
+
return { kind } as Material;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
describe('getWgpuQuadMaterialRenderer', () => {
|
|
54
|
+
it('returns null when nothing is registered for the kind', () => {
|
|
55
|
+
expect(getWgpuQuadMaterialRenderer(makeState(), TestKind)).toBeNull();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe('registerWgpuQuadMaterialRenderer', () => {
|
|
60
|
+
it('registers a renderer retrievable by kind', () => {
|
|
61
|
+
const state = makeState();
|
|
62
|
+
const before = getWgpuRenderStateRuntime(state).registries.materialRenderers;
|
|
63
|
+
registerWgpuQuadMaterialRenderer(state, TestKind, testRenderer);
|
|
64
|
+
expect(getWgpuQuadMaterialRenderer(state, TestKind)).toBe(testRenderer);
|
|
65
|
+
expect(getWgpuRenderStateRuntime(state).registries.materialRenderers).not.toBe(before);
|
|
66
|
+
expect(before.size).toBe(0);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('is last-write-wins without mutating the earlier snapshot', () => {
|
|
70
|
+
const state = makeState();
|
|
71
|
+
const replacement: WgpuQuadMaterialRenderer = {
|
|
72
|
+
instanceFloatCount: 0,
|
|
73
|
+
getShaderModule: () => ({}) as WgpuShaderModule,
|
|
74
|
+
};
|
|
75
|
+
registerWgpuQuadMaterialRenderer(state, TestKind, testRenderer);
|
|
76
|
+
const before = getWgpuRenderStateRuntime(state).registries.materialRenderers;
|
|
77
|
+
|
|
78
|
+
registerWgpuQuadMaterialRenderer(state, TestKind, replacement);
|
|
79
|
+
|
|
80
|
+
expect(getWgpuQuadMaterialRenderer(state, TestKind)).toBe(replacement);
|
|
81
|
+
expect(before.get(TestKind)).toEqual(testRenderer);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('resolveWgpuQuadMaterialRenderer', () => {
|
|
86
|
+
it('returns null when nothing is registered — no built-in fallback', () => {
|
|
87
|
+
expect(resolveWgpuQuadMaterialRenderer(makeState(), null)).toBeNull();
|
|
88
|
+
expect(resolveWgpuQuadMaterialRenderer(makeState(), makeMaterial(TestKind))).toBeNull();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('returns the registered renderer for a material kind', () => {
|
|
92
|
+
const state = makeState();
|
|
93
|
+
registerWgpuQuadMaterialRenderer(state, TestKind, testRenderer);
|
|
94
|
+
expect(resolveWgpuQuadMaterialRenderer(state, makeMaterial(TestKind))).toBe(testRenderer);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('falls back to the renderer registered for StandardMaterialKind', () => {
|
|
98
|
+
const state = makeState();
|
|
99
|
+
registerWgpuQuadMaterialRenderer(state, StandardMaterialKind, testRenderer);
|
|
100
|
+
expect(resolveWgpuQuadMaterialRenderer(state, makeMaterial('Other'))).toBe(testRenderer);
|
|
101
|
+
expect(resolveWgpuQuadMaterialRenderer(state, null)).toBe(testRenderer);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('reports the missing kind against the wgpu registrar, not the gl one', () => {
|
|
105
|
+
const state = makeState();
|
|
106
|
+
enableRenderRegistriesGuards(state, logState);
|
|
107
|
+
const sink = createMemoryLogSink(4);
|
|
108
|
+
addLogSink(logState, sink.sink);
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
resolveWgpuQuadMaterialRenderer(state, makeMaterial(TestKind));
|
|
112
|
+
|
|
113
|
+
expect(explainRenderRegistriesMisses(state).misses).toEqual([
|
|
114
|
+
{ kind: TestKind, registry: RenderRegistryTable.MaterialRenderer },
|
|
115
|
+
]);
|
|
116
|
+
expect(readMemoryLogEntries(sink)[0]?.data).toMatchObject({
|
|
117
|
+
kind: TestKind,
|
|
118
|
+
message:
|
|
119
|
+
'resolveWgpuQuadMaterialRenderer: material kind has no registered renderer, so nodes using it do not draw — call registerWgpuQuadMaterialRenderer(state, kind, renderer)',
|
|
120
|
+
registry: RenderRegistryTable.MaterialRenderer,
|
|
121
|
+
});
|
|
122
|
+
} finally {
|
|
123
|
+
removeLogSink(logState, sink.sink);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
function readMemoryLogEntries(handle: Readonly<MemoryLogSink>): LogEntry[] {
|
|
129
|
+
const entries: LogEntry[] = [];
|
|
130
|
+
getMemoryLogSinkEntries(entries, handle);
|
|
131
|
+
return entries;
|
|
132
|
+
}
|