@next2d/webgpu 3.0.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/LICENSE +21 -0
- package/README.md +574 -0
- package/package.json +30 -0
- package/src/AtlasManager.d.ts +23 -0
- package/src/AtlasManager.js +123 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +13 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +24 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +15 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +31 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +5 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +42 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +33 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +18 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +12 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +17 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +26 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +43 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +18 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +33 -0
- package/src/AttachmentManager.d.ts +19 -0
- package/src/AttachmentManager.js +105 -0
- package/src/BezierConverter/BezierConverter.d.ts +16 -0
- package/src/BezierConverter/BezierConverter.js +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.js +37 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.js +47 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +29 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +80 -0
- package/src/Blend/BlendInstancedManager.d.ts +35 -0
- package/src/Blend/BlendInstancedManager.js +147 -0
- package/src/Blend/service/BlendAddService.d.ts +1 -0
- package/src/Blend/service/BlendAddService.js +8 -0
- package/src/Blend/service/BlendAlphaService.d.ts +1 -0
- package/src/Blend/service/BlendAlphaService.js +8 -0
- package/src/Blend/service/BlendEraseService.d.ts +1 -0
- package/src/Blend/service/BlendEraseService.js +8 -0
- package/src/Blend/service/BlendGetStateService.d.ts +12 -0
- package/src/Blend/service/BlendGetStateService.js +13 -0
- package/src/Blend/service/BlendOneZeroService.d.ts +1 -0
- package/src/Blend/service/BlendOneZeroService.js +8 -0
- package/src/Blend/service/BlendResetService.d.ts +1 -0
- package/src/Blend/service/BlendResetService.js +8 -0
- package/src/Blend/service/BlendScreenService.d.ts +1 -0
- package/src/Blend/service/BlendScreenService.js +8 -0
- package/src/Blend/service/BlendSetModeService.d.ts +2 -0
- package/src/Blend/service/BlendSetModeService.js +4 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +6 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +79 -0
- package/src/Blend/usecase/BlendOperationUseCase.d.ts +11 -0
- package/src/Blend/usecase/BlendOperationUseCase.js +31 -0
- package/src/Blend.d.ts +8 -0
- package/src/Blend.js +91 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.d.ts +15 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.js +37 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.d.ts +13 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.js +23 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.d.ts +17 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.js +23 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +20 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.d.ts +10 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.js +18 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.d.ts +15 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.js +51 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.d.ts +13 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.js +26 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.d.ts +14 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.js +46 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +12 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +20 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +9 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +15 -0
- package/src/BufferManager.d.ts +93 -0
- package/src/BufferManager.js +487 -0
- package/src/Compute/ComputePipelineManager.d.ts +61 -0
- package/src/Compute/ComputePipelineManager.js +313 -0
- package/src/Compute/service/ComputeExecuteBlurService.d.ts +21 -0
- package/src/Compute/service/ComputeExecuteBlurService.js +81 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +1 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.js +74 -0
- package/src/Context/service/ContextComputeGradientMatrixService.d.ts +4 -0
- package/src/Context/service/ContextComputeGradientMatrixService.js +88 -0
- package/src/Context/service/ContextFillSimpleService.d.ts +2 -0
- package/src/Context/service/ContextFillSimpleService.js +28 -0
- package/src/Context/service/ContextFillWithStencilMainService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilMainService.js +19 -0
- package/src/Context/service/ContextFillWithStencilService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilService.js +19 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.js +668 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.js +210 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.js +119 -0
- package/src/Context/usecase/ContextClipUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextClipUseCase.js +101 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.js +476 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +135 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.js +154 -0
- package/src/Context/usecase/ContextGradientFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientFillUseCase.js +230 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.js +138 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +213 -0
- package/src/Context.d.ts +430 -0
- package/src/Context.js +2453 -0
- package/src/FillTexturePool.d.ts +6 -0
- package/src/FillTexturePool.js +72 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +10 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +214 -0
- package/src/Filter/BevelFilterShader.d.ts +2 -0
- package/src/Filter/BevelFilterShader.js +107 -0
- package/src/Filter/BitmapFilterShader.d.ts +2 -0
- package/src/Filter/BitmapFilterShader.js +207 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +16 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +243 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +40 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +51 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +25 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +180 -0
- package/src/Filter/BlurFilterShader.d.ts +5 -0
- package/src/Filter/BlurFilterShader.js +109 -0
- package/src/Filter/BlurFilterUseCase.d.ts +36 -0
- package/src/Filter/BlurFilterUseCase.js +85 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +12 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +90 -0
- package/src/Filter/ColorMatrixFilterShader.d.ts +4 -0
- package/src/Filter/ColorMatrixFilterShader.js +51 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +6 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +144 -0
- package/src/Filter/ConvolutionFilterShader.d.ts +2 -0
- package/src/Filter/ConvolutionFilterShader.js +115 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +6 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +172 -0
- package/src/Filter/DisplacementMapFilterShader.d.ts +2 -0
- package/src/Filter/DisplacementMapFilterShader.js +114 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +24 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +179 -0
- package/src/Filter/DropShadowFilterShader.d.ts +4 -0
- package/src/Filter/DropShadowFilterShader.js +93 -0
- package/src/Filter/FilterGradientLUTCache.d.ts +29 -0
- package/src/Filter/FilterGradientLUTCache.js +84 -0
- package/src/Filter/FilterOffset.d.ts +8 -0
- package/src/Filter/FilterOffset.js +10 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +24 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +143 -0
- package/src/Filter/GlowFilterShader.d.ts +4 -0
- package/src/Filter/GlowFilterShader.js +66 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +216 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +164 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +23 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +28 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +11 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +19 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +23 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +125 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +14 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +23 -0
- package/src/FrameBufferManager.d.ts +24 -0
- package/src/FrameBufferManager.js +161 -0
- package/src/Gradient/GradientLUTCache.d.ts +61 -0
- package/src/Gradient/GradientLUTCache.js +153 -0
- package/src/Gradient/GradientLUTGenerator.d.ts +30 -0
- package/src/Gradient/GradientLUTGenerator.js +202 -0
- package/src/Grid.d.ts +18 -0
- package/src/Grid.js +21 -0
- package/src/Mask/service/MaskBeginMaskService.d.ts +9 -0
- package/src/Mask/service/MaskBeginMaskService.js +22 -0
- package/src/Mask/service/MaskEndMaskService.d.ts +15 -0
- package/src/Mask/service/MaskEndMaskService.js +36 -0
- package/src/Mask/service/MaskSetMaskBoundsService.d.ts +13 -0
- package/src/Mask/service/MaskSetMaskBoundsService.js +36 -0
- package/src/Mask/service/MaskUnionMaskService.d.ts +4 -0
- package/src/Mask/service/MaskUnionMaskService.js +74 -0
- package/src/Mask/usecase/MaskBindUseCase.d.ts +10 -0
- package/src/Mask/usecase/MaskBindUseCase.js +20 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.d.ts +13 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.js +51 -0
- package/src/Mask.d.ts +12 -0
- package/src/Mask.js +41 -0
- package/src/Mesh/service/MeshFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshFillGenerateService.js +76 -0
- package/src/Mesh/service/MeshLerpService.d.ts +13 -0
- package/src/Mesh/service/MeshLerpService.js +17 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.js +76 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +12 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.js +48 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +14 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +28 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +18 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +54 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +25 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +608 -0
- package/src/PathCommand.d.ts +123 -0
- package/src/PathCommand.js +317 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +11 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +35 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +13 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +30 -0
- package/src/SamplerCache.d.ts +18 -0
- package/src/SamplerCache.js +61 -0
- package/src/Shader/BlendModeShader.d.ts +51 -0
- package/src/Shader/BlendModeShader.js +71 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +12 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +28 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +13 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +61 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +19 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +37 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +11 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +24 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +14 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +24 -0
- package/src/Shader/PipelineManager.d.ts +57 -0
- package/src/Shader/PipelineManager.js +2868 -0
- package/src/Shader/ShaderInstancedManager.d.ts +8 -0
- package/src/Shader/ShaderInstancedManager.js +18 -0
- package/src/Shader/ShaderSource.d.ts +60 -0
- package/src/Shader/ShaderSource.js +518 -0
- package/src/Shader/wgsl/common/SharedWgsl.d.ts +5 -0
- package/src/Shader/wgsl/common/SharedWgsl.js +37 -0
- package/src/Shader/wgsl/fragment/BasicFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/BasicFragment.js +28 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.js +43 -0
- package/src/Shader/wgsl/fragment/BlendFragment.d.ts +8 -0
- package/src/Shader/wgsl/fragment/BlendFragment.js +63 -0
- package/src/Shader/wgsl/fragment/EffectFragment.d.ts +6 -0
- package/src/Shader/wgsl/fragment/EffectFragment.js +324 -0
- package/src/Shader/wgsl/fragment/FillFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/FillFragment.js +28 -0
- package/src/Shader/wgsl/fragment/FilterFragment.d.ts +10 -0
- package/src/Shader/wgsl/fragment/FilterFragment.js +212 -0
- package/src/Shader/wgsl/fragment/GradientFragment.d.ts +3 -0
- package/src/Shader/wgsl/fragment/GradientFragment.js +118 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.js +20 -0
- package/src/Shader/wgsl/fragment/MaskFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/MaskFragment.js +17 -0
- package/src/Shader/wgsl/fragment/StencilFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/StencilFragment.js +33 -0
- package/src/Shader/wgsl/vertex/BasicVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BasicVertex.js +37 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.js +43 -0
- package/src/Shader/wgsl/vertex/FillVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/FillVertex.js +35 -0
- package/src/Shader/wgsl/vertex/FilterVertex.d.ts +12 -0
- package/src/Shader/wgsl/vertex/FilterVertex.js +193 -0
- package/src/Shader/wgsl/vertex/GradientVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/GradientVertex.js +44 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.js +48 -0
- package/src/Shader/wgsl/vertex/MaskVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/MaskVertex.js +36 -0
- package/src/Shader/wgsl/vertex/StencilVertex.d.ts +2 -0
- package/src/Shader/wgsl/vertex/StencilVertex.js +66 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +11 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +48 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +13 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +30 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +15 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +26 -0
- package/src/TextureManager.d.ts +15 -0
- package/src/TextureManager.js +87 -0
- package/src/TexturePool/service/TexturePoolCleanupService.d.ts +14 -0
- package/src/TexturePool/service/TexturePoolCleanupService.js +28 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +11 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.js +24 -0
- package/src/TexturePool/service/TexturePoolReleaseService.d.ts +13 -0
- package/src/TexturePool/service/TexturePoolReleaseService.js +22 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +19 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +90 -0
- package/src/TexturePool.d.ts +69 -0
- package/src/TexturePool.js +151 -0
- package/src/WebGPUUtil.d.ts +102 -0
- package/src/WebGPUUtil.js +157 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/interface/IAttachmentObject.d.ts +41 -0
- package/src/interface/IAttachmentObject.js +1 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBlendMode.js +1 -0
- package/src/interface/IBlendState.d.ts +8 -0
- package/src/interface/IBlendState.js +1 -0
- package/src/interface/IBounds.d.ts +6 -0
- package/src/interface/IBounds.js +1 -0
- package/src/interface/ICachedBindGroup.d.ts +8 -0
- package/src/interface/ICachedBindGroup.js +1 -0
- package/src/interface/IColorBufferObject.d.ts +17 -0
- package/src/interface/IColorBufferObject.js +1 -0
- package/src/interface/IComplexBlendItem.d.ts +19 -0
- package/src/interface/IComplexBlendItem.js +1 -0
- package/src/interface/IFilterConfig.d.ts +29 -0
- package/src/interface/IFilterConfig.js +1 -0
- package/src/interface/IGradientLUTData.d.ts +8 -0
- package/src/interface/IGradientLUTData.js +1 -0
- package/src/interface/IGradientStop.d.ts +11 -0
- package/src/interface/IGradientStop.js +1 -0
- package/src/interface/ILocalFilterConfig.d.ts +21 -0
- package/src/interface/ILocalFilterConfig.js +1 -0
- package/src/interface/IMeshResult.d.ts +8 -0
- package/src/interface/IMeshResult.js +1 -0
- package/src/interface/IPath.d.ts +8 -0
- package/src/interface/IPath.js +1 -0
- package/src/interface/IPoint.d.ts +4 -0
- package/src/interface/IPoint.js +1 -0
- package/src/interface/IPooledBuffer.d.ts +8 -0
- package/src/interface/IPooledBuffer.js +1 -0
- package/src/interface/IPooledTexture.d.ts +17 -0
- package/src/interface/IPooledTexture.js +1 -0
- package/src/interface/IQuadraticSegment.d.ts +9 -0
- package/src/interface/IQuadraticSegment.js +1 -0
- package/src/interface/IRectangleInfo.d.ts +13 -0
- package/src/interface/IRectangleInfo.js +1 -0
- package/src/interface/IStencilBufferObject.d.ts +16 -0
- package/src/interface/IStencilBufferObject.js +1 -0
- package/src/interface/IStorageBufferConfig.d.ts +40 -0
- package/src/interface/IStorageBufferConfig.js +1 -0
- package/src/interface/ITextureObject.d.ts +16 -0
- package/src/interface/ITextureObject.js +1 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
|
+
/**
|
|
4
|
+
* @description 複雑なブレンドモードを適用
|
|
5
|
+
*/
|
|
6
|
+
export declare const execute: (srcAttachment: IAttachmentObject, dstAttachment: IAttachmentObject, blendMode: string, colorTransform: Float32Array, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ShaderSource } from "../../Shader/ShaderSource";
|
|
2
|
+
/**
|
|
3
|
+
* @description プリアロケートされた uniform データ (12 floats = 48 bytes)
|
|
4
|
+
*/
|
|
5
|
+
const $uniform12 = new Float32Array(12);
|
|
6
|
+
/**
|
|
7
|
+
* @description プリアロケートされた BindGroupEntry 配列 (4 bindings)
|
|
8
|
+
*/
|
|
9
|
+
const $entries4 = [
|
|
10
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
11
|
+
{ "binding": 1, "resource": null },
|
|
12
|
+
{ "binding": 2, "resource": null },
|
|
13
|
+
{ "binding": 3, "resource": null }
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* @description 複雑なブレンドモードを適用
|
|
17
|
+
*/
|
|
18
|
+
export const execute = (srcAttachment, dstAttachment, blendMode, colorTransform, config) => {
|
|
19
|
+
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
20
|
+
// 出力サイズは両方の大きい方を使用
|
|
21
|
+
const width = Math.max(srcAttachment.width, dstAttachment.width);
|
|
22
|
+
const height = Math.max(srcAttachment.height, dstAttachment.height);
|
|
23
|
+
// 出力アタッチメントを作成
|
|
24
|
+
const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
|
|
25
|
+
// 統一パイプラインを使用
|
|
26
|
+
const pipeline = pipelineManager.getPipeline("complex_blend");
|
|
27
|
+
const bindGroupLayout = pipelineManager.getBindGroupLayout("complex_blend");
|
|
28
|
+
if (!pipeline || !bindGroupLayout) {
|
|
29
|
+
console.error(`[WebGPU ComplexBlend] Pipeline not found for blend mode: ${blendMode}`);
|
|
30
|
+
// フォールバック: srcをそのまま返す
|
|
31
|
+
return srcAttachment;
|
|
32
|
+
}
|
|
33
|
+
// サンプラーを作成
|
|
34
|
+
const sampler = textureManager.createSampler("complex_blend_sampler", true);
|
|
35
|
+
// ユニフォームバッファを作成
|
|
36
|
+
// mulColor: vec4<f32> (16 bytes)
|
|
37
|
+
// addColor: vec4<f32> (16 bytes)
|
|
38
|
+
// blendMode: f32 + padding: vec3<f32> (16 bytes)
|
|
39
|
+
// Total: 48 bytes
|
|
40
|
+
const blendModeIndex = ShaderSource.getBlendModeIndex(blendMode);
|
|
41
|
+
$uniform12[0] = colorTransform[0];
|
|
42
|
+
$uniform12[1] = colorTransform[1];
|
|
43
|
+
$uniform12[2] = colorTransform[2];
|
|
44
|
+
$uniform12[3] = colorTransform[3];
|
|
45
|
+
$uniform12[4] = colorTransform[4];
|
|
46
|
+
$uniform12[5] = colorTransform[5];
|
|
47
|
+
$uniform12[6] = colorTransform[6];
|
|
48
|
+
$uniform12[7] = colorTransform[7];
|
|
49
|
+
$uniform12[8] = blendModeIndex;
|
|
50
|
+
$uniform12[9] = 0;
|
|
51
|
+
$uniform12[10] = 0;
|
|
52
|
+
$uniform12[11] = 0;
|
|
53
|
+
const uniformBuffer = config.bufferManager
|
|
54
|
+
? config.bufferManager.acquireAndWriteUniformBuffer($uniform12)
|
|
55
|
+
: device.createBuffer({
|
|
56
|
+
"size": 48,
|
|
57
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
58
|
+
});
|
|
59
|
+
if (!config.bufferManager) {
|
|
60
|
+
device.queue.writeBuffer(uniformBuffer, 0, $uniform12);
|
|
61
|
+
}
|
|
62
|
+
// バインドグループを作成
|
|
63
|
+
$entries4[0].resource.buffer = uniformBuffer;
|
|
64
|
+
$entries4[1].resource = sampler;
|
|
65
|
+
$entries4[2].resource = dstAttachment.texture.view;
|
|
66
|
+
$entries4[3].resource = srcAttachment.texture.view;
|
|
67
|
+
const bindGroup = device.createBindGroup({
|
|
68
|
+
"layout": bindGroupLayout,
|
|
69
|
+
"entries": $entries4
|
|
70
|
+
});
|
|
71
|
+
// レンダーパスを実行
|
|
72
|
+
const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
|
|
73
|
+
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
74
|
+
passEncoder.setPipeline(pipeline);
|
|
75
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
76
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
77
|
+
passEncoder.end();
|
|
78
|
+
return destAttachment;
|
|
79
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IBlendMode } from "../../interface/IBlendMode";
|
|
2
|
+
/**
|
|
3
|
+
* @description 設定されたブレンドモードへ切り替える
|
|
4
|
+
* Switch to the set blend mode
|
|
5
|
+
*
|
|
6
|
+
* @param {IBlendMode} operation
|
|
7
|
+
* @return {boolean} ブレンドモードが変更されたかどうか
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (operation: IBlendMode) => boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { execute as blendAddService } from "../service/BlendAddService";
|
|
2
|
+
import { execute as blendResetService } from "../service/BlendResetService";
|
|
3
|
+
import { execute as blendScreenService } from "../service/BlendScreenService";
|
|
4
|
+
import { execute as blendAlphaService } from "../service/BlendAlphaService";
|
|
5
|
+
import { execute as blendEraseService } from "../service/BlendEraseService";
|
|
6
|
+
import { execute as blendOneZeroService } from "../service/BlendOneZeroService";
|
|
7
|
+
/**
|
|
8
|
+
* @description 設定されたブレンドモードへ切り替える
|
|
9
|
+
* Switch to the set blend mode
|
|
10
|
+
*
|
|
11
|
+
* @param {IBlendMode} operation
|
|
12
|
+
* @return {boolean} ブレンドモードが変更されたかどうか
|
|
13
|
+
* @method
|
|
14
|
+
* @protected
|
|
15
|
+
*/
|
|
16
|
+
export const execute = (operation) => {
|
|
17
|
+
switch (operation) {
|
|
18
|
+
case "add":
|
|
19
|
+
return blendAddService();
|
|
20
|
+
case "screen":
|
|
21
|
+
return blendScreenService();
|
|
22
|
+
case "alpha":
|
|
23
|
+
return blendAlphaService();
|
|
24
|
+
case "erase":
|
|
25
|
+
return blendEraseService();
|
|
26
|
+
case "copy":
|
|
27
|
+
return blendOneZeroService();
|
|
28
|
+
default:
|
|
29
|
+
return blendResetService();
|
|
30
|
+
}
|
|
31
|
+
};
|
package/src/Blend.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IBlendMode } from "./interface/IBlendMode";
|
|
2
|
+
import type { IBlendState } from "./interface/IBlendState";
|
|
3
|
+
export type { IBlendState };
|
|
4
|
+
export declare let $currentBlendMode: IBlendMode;
|
|
5
|
+
export declare let $funcCode: number;
|
|
6
|
+
export declare const $setCurrentBlendMode: (blend_mode: IBlendMode) => void;
|
|
7
|
+
export declare const $setFuncCode: (code: number) => void;
|
|
8
|
+
export declare const $getBlendState: (mode: IBlendMode) => IBlendState;
|
package/src/Blend.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export let $currentBlendMode = "normal";
|
|
2
|
+
export let $funcCode = 0;
|
|
3
|
+
export const $setCurrentBlendMode = (blend_mode) => {
|
|
4
|
+
$currentBlendMode = blend_mode;
|
|
5
|
+
};
|
|
6
|
+
export const $setFuncCode = (code) => {
|
|
7
|
+
$funcCode = code;
|
|
8
|
+
};
|
|
9
|
+
export const $getBlendState = (mode) => {
|
|
10
|
+
switch (mode) {
|
|
11
|
+
case "add":
|
|
12
|
+
return {
|
|
13
|
+
"color": {
|
|
14
|
+
"srcFactor": "one",
|
|
15
|
+
"dstFactor": "one",
|
|
16
|
+
"operation": "add"
|
|
17
|
+
},
|
|
18
|
+
"alpha": {
|
|
19
|
+
"srcFactor": "one",
|
|
20
|
+
"dstFactor": "one-minus-src-alpha",
|
|
21
|
+
"operation": "add"
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
case "screen":
|
|
25
|
+
return {
|
|
26
|
+
"color": {
|
|
27
|
+
"srcFactor": "one-minus-dst",
|
|
28
|
+
"dstFactor": "one",
|
|
29
|
+
"operation": "add"
|
|
30
|
+
},
|
|
31
|
+
"alpha": {
|
|
32
|
+
"srcFactor": "one",
|
|
33
|
+
"dstFactor": "one-minus-src-alpha",
|
|
34
|
+
"operation": "add"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
case "alpha":
|
|
38
|
+
return {
|
|
39
|
+
"color": {
|
|
40
|
+
"srcFactor": "zero",
|
|
41
|
+
"dstFactor": "src-alpha",
|
|
42
|
+
"operation": "add"
|
|
43
|
+
},
|
|
44
|
+
"alpha": {
|
|
45
|
+
"srcFactor": "zero",
|
|
46
|
+
"dstFactor": "src-alpha",
|
|
47
|
+
"operation": "add"
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
case "erase":
|
|
51
|
+
return {
|
|
52
|
+
"color": {
|
|
53
|
+
"srcFactor": "zero",
|
|
54
|
+
"dstFactor": "one-minus-src-alpha",
|
|
55
|
+
"operation": "add"
|
|
56
|
+
},
|
|
57
|
+
"alpha": {
|
|
58
|
+
"srcFactor": "zero",
|
|
59
|
+
"dstFactor": "one-minus-src-alpha",
|
|
60
|
+
"operation": "add"
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
case "copy":
|
|
64
|
+
return {
|
|
65
|
+
"color": {
|
|
66
|
+
"srcFactor": "one",
|
|
67
|
+
"dstFactor": "zero",
|
|
68
|
+
"operation": "add"
|
|
69
|
+
},
|
|
70
|
+
"alpha": {
|
|
71
|
+
"srcFactor": "one",
|
|
72
|
+
"dstFactor": "zero",
|
|
73
|
+
"operation": "add"
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
// normal and default
|
|
77
|
+
default:
|
|
78
|
+
return {
|
|
79
|
+
"color": {
|
|
80
|
+
"srcFactor": "one",
|
|
81
|
+
"dstFactor": "one-minus-src-alpha",
|
|
82
|
+
"operation": "add"
|
|
83
|
+
},
|
|
84
|
+
"alpha": {
|
|
85
|
+
"srcFactor": "one",
|
|
86
|
+
"dstFactor": "one-minus-src-alpha",
|
|
87
|
+
"operation": "add"
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Indirect Bufferを作成
|
|
3
|
+
* Create Indirect Buffer for draw indirect commands
|
|
4
|
+
*
|
|
5
|
+
* Indirect Drawingにより、CPUからのdraw呼び出しオーバーヘッドを削減。
|
|
6
|
+
* GPU側でドローコールのパラメータを決定可能。
|
|
7
|
+
*
|
|
8
|
+
* @param {GPUDevice} device - WebGPU device
|
|
9
|
+
* @param {number} vertex_count - 頂点数
|
|
10
|
+
* @param {number} instance_count - インスタンス数
|
|
11
|
+
* @param {number} first_vertex - 開始頂点インデックス
|
|
12
|
+
* @param {number} first_instance - 開始インスタンスインデックス
|
|
13
|
+
* @return {GPUBuffer} 作成されたIndirect Buffer
|
|
14
|
+
*/
|
|
15
|
+
export declare const execute: (device: GPUDevice, vertex_count: number, instance_count: number, first_vertex?: number, first_instance?: number) => GPUBuffer;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Indirect Bufferを作成
|
|
3
|
+
* Create Indirect Buffer for draw indirect commands
|
|
4
|
+
*
|
|
5
|
+
* Indirect Drawingにより、CPUからのdraw呼び出しオーバーヘッドを削減。
|
|
6
|
+
* GPU側でドローコールのパラメータを決定可能。
|
|
7
|
+
*
|
|
8
|
+
* @param {GPUDevice} device - WebGPU device
|
|
9
|
+
* @param {number} vertex_count - 頂点数
|
|
10
|
+
* @param {number} instance_count - インスタンス数
|
|
11
|
+
* @param {number} first_vertex - 開始頂点インデックス
|
|
12
|
+
* @param {number} first_instance - 開始インスタンスインデックス
|
|
13
|
+
* @return {GPUBuffer} 作成されたIndirect Buffer
|
|
14
|
+
*/
|
|
15
|
+
export const execute = (device, vertex_count, instance_count, first_vertex = 0, first_instance = 0) => {
|
|
16
|
+
// Indirect bufferのフォーマット(非インデックス描画用):
|
|
17
|
+
// - vertexCount: u32
|
|
18
|
+
// - instanceCount: u32
|
|
19
|
+
// - firstVertex: u32
|
|
20
|
+
// - firstInstance: u32
|
|
21
|
+
// 合計16バイト
|
|
22
|
+
const indirectData = new Uint32Array([
|
|
23
|
+
vertex_count,
|
|
24
|
+
instance_count,
|
|
25
|
+
first_vertex,
|
|
26
|
+
first_instance
|
|
27
|
+
]);
|
|
28
|
+
const buffer = device.createBuffer({
|
|
29
|
+
"size": indirectData.byteLength,
|
|
30
|
+
"usage": GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST,
|
|
31
|
+
"mappedAtCreation": true,
|
|
32
|
+
"label": "indirect_buffer"
|
|
33
|
+
});
|
|
34
|
+
new Uint32Array(buffer.getMappedRange()).set(indirectData);
|
|
35
|
+
buffer.unmap();
|
|
36
|
+
return buffer;
|
|
37
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 矩形の頂点データを作成
|
|
3
|
+
* Create rect vertices data
|
|
4
|
+
*
|
|
5
|
+
* @param {number} x
|
|
6
|
+
* @param {number} y
|
|
7
|
+
* @param {number} width
|
|
8
|
+
* @param {number} height
|
|
9
|
+
* @return {Float32Array}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export declare const execute: (x: number, y: number, width: number, height: number) => Float32Array;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 矩形の頂点データを作成
|
|
3
|
+
* Create rect vertices data
|
|
4
|
+
*
|
|
5
|
+
* @param {number} x
|
|
6
|
+
* @param {number} y
|
|
7
|
+
* @param {number} width
|
|
8
|
+
* @param {number} height
|
|
9
|
+
* @return {Float32Array}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export const execute = (x, y, width, height) => {
|
|
14
|
+
return new Float32Array([
|
|
15
|
+
// Position (x, y), TexCoord (u, v)
|
|
16
|
+
x, y, 0.0, 0.0,
|
|
17
|
+
x + width, y, 1.0, 0.0,
|
|
18
|
+
x, y + height, 0.0, 1.0,
|
|
19
|
+
x + width, y, 1.0, 0.0,
|
|
20
|
+
x + width, y + height, 1.0, 1.0,
|
|
21
|
+
x, y + height, 0.0, 1.0
|
|
22
|
+
]);
|
|
23
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IStorageBufferConfig } from "../../interface/IStorageBufferConfig";
|
|
2
|
+
/**
|
|
3
|
+
* @description Storage Bufferを作成
|
|
4
|
+
* Create Storage Buffer for efficient instance data
|
|
5
|
+
*
|
|
6
|
+
* Storage Bufferは大きなデータの動的更新に最適。
|
|
7
|
+
* Vertex Bufferと比較して:
|
|
8
|
+
* - より大きなサイズをサポート
|
|
9
|
+
* - 動的更新が効率的
|
|
10
|
+
* - Compute Shaderでも使用可能
|
|
11
|
+
* - Vertex Bufferとしても使用可能(VERTEXフラグ付き)
|
|
12
|
+
*
|
|
13
|
+
* @param {GPUDevice} device - WebGPU device
|
|
14
|
+
* @param {IStorageBufferConfig} config - バッファ設定
|
|
15
|
+
* @return {GPUBuffer} 作成されたStorage Buffer
|
|
16
|
+
*/
|
|
17
|
+
export declare const execute: (device: GPUDevice, config: IStorageBufferConfig) => GPUBuffer;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Storage Bufferを作成
|
|
3
|
+
* Create Storage Buffer for efficient instance data
|
|
4
|
+
*
|
|
5
|
+
* Storage Bufferは大きなデータの動的更新に最適。
|
|
6
|
+
* Vertex Bufferと比較して:
|
|
7
|
+
* - より大きなサイズをサポート
|
|
8
|
+
* - 動的更新が効率的
|
|
9
|
+
* - Compute Shaderでも使用可能
|
|
10
|
+
* - Vertex Bufferとしても使用可能(VERTEXフラグ付き)
|
|
11
|
+
*
|
|
12
|
+
* @param {GPUDevice} device - WebGPU device
|
|
13
|
+
* @param {IStorageBufferConfig} config - バッファ設定
|
|
14
|
+
* @return {GPUBuffer} 作成されたStorage Buffer
|
|
15
|
+
*/
|
|
16
|
+
export const execute = (device, config) => {
|
|
17
|
+
const buffer = device.createBuffer({
|
|
18
|
+
"size": config.size,
|
|
19
|
+
"usage": config.usage | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,
|
|
20
|
+
"label": config.label || "storage_buffer"
|
|
21
|
+
});
|
|
22
|
+
return buffer;
|
|
23
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description ユニフォームバッファをプールに返却
|
|
3
|
+
* Release uniform buffer back to pool
|
|
4
|
+
* バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
|
|
5
|
+
*
|
|
6
|
+
* @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
|
|
7
|
+
* @param {GPUBuffer} buffer
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (buckets: Map<number, GPUBuffer[]>, buffer: GPUBuffer) => void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description バケットあたりの最大プールサイズ
|
|
3
|
+
* Maximum pool size per bucket
|
|
4
|
+
* @type {number}
|
|
5
|
+
* @const
|
|
6
|
+
*/
|
|
7
|
+
const MAX_BUCKET_SIZE = 32;
|
|
8
|
+
/**
|
|
9
|
+
* @description ユニフォームバッファをプールに返却
|
|
10
|
+
* Release uniform buffer back to pool
|
|
11
|
+
* バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
|
|
12
|
+
*
|
|
13
|
+
* @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
|
|
14
|
+
* @param {GPUBuffer} buffer
|
|
15
|
+
* @return {void}
|
|
16
|
+
* @method
|
|
17
|
+
* @protected
|
|
18
|
+
*/
|
|
19
|
+
export const execute = (buckets, buffer) => {
|
|
20
|
+
const size = buffer.size;
|
|
21
|
+
let bucket = buckets.get(size);
|
|
22
|
+
if (!bucket) {
|
|
23
|
+
bucket = [];
|
|
24
|
+
buckets.set(size, bucket);
|
|
25
|
+
}
|
|
26
|
+
if (bucket.length >= MAX_BUCKET_SIZE) {
|
|
27
|
+
// バケットが満杯の場合、このバッファを破棄
|
|
28
|
+
buffer.destroy();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
bucket.push(buffer);
|
|
32
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 頂点バッファをプールに返却
|
|
3
|
+
* Release vertex buffer back to pool
|
|
4
|
+
* バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
|
|
5
|
+
*
|
|
6
|
+
* @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
|
|
7
|
+
* @param {GPUBuffer} buffer
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (buckets: Map<number, GPUBuffer[]>, buffer: GPUBuffer) => void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description バケットあたりの最大プールサイズ
|
|
3
|
+
* Maximum pool size per bucket
|
|
4
|
+
* @type {number}
|
|
5
|
+
* @const
|
|
6
|
+
*/
|
|
7
|
+
const MAX_BUCKET_SIZE = 32;
|
|
8
|
+
/**
|
|
9
|
+
* @description 頂点バッファをプールに返却
|
|
10
|
+
* Release vertex buffer back to pool
|
|
11
|
+
* バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
|
|
12
|
+
*
|
|
13
|
+
* @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
|
|
14
|
+
* @param {GPUBuffer} buffer
|
|
15
|
+
* @return {void}
|
|
16
|
+
* @method
|
|
17
|
+
* @protected
|
|
18
|
+
*/
|
|
19
|
+
export const execute = (buckets, buffer) => {
|
|
20
|
+
const size = buffer.size;
|
|
21
|
+
let bucket = buckets.get(size);
|
|
22
|
+
if (!bucket) {
|
|
23
|
+
bucket = [];
|
|
24
|
+
buckets.set(size, bucket);
|
|
25
|
+
}
|
|
26
|
+
if (bucket.length >= MAX_BUCKET_SIZE) {
|
|
27
|
+
// バケットが満杯の場合、このバッファを破棄
|
|
28
|
+
buffer.destroy();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
bucket.push(buffer);
|
|
32
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Indirect Bufferを更新
|
|
3
|
+
* Update Indirect Buffer with new parameters
|
|
4
|
+
*
|
|
5
|
+
* @param {GPUDevice} device - WebGPU device
|
|
6
|
+
* @param {GPUBuffer} buffer - 更新するバッファ
|
|
7
|
+
* @param {number} vertex_count - 頂点数
|
|
8
|
+
* @param {number} instance_count - インスタンス数
|
|
9
|
+
* @param {number} first_vertex - 開始頂点インデックス
|
|
10
|
+
* @param {number} first_instance - 開始インスタンスインデックス
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (device: GPUDevice, buffer: GPUBuffer, vertex_count: number, instance_count: number, first_vertex?: number, first_instance?: number) => void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Indirect Bufferを更新
|
|
3
|
+
* Update Indirect Buffer with new parameters
|
|
4
|
+
*
|
|
5
|
+
* @param {GPUDevice} device - WebGPU device
|
|
6
|
+
* @param {GPUBuffer} buffer - 更新するバッファ
|
|
7
|
+
* @param {number} vertex_count - 頂点数
|
|
8
|
+
* @param {number} instance_count - インスタンス数
|
|
9
|
+
* @param {number} first_vertex - 開始頂点インデックス
|
|
10
|
+
* @param {number} first_instance - 開始インスタンスインデックス
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (device, buffer, vertex_count, instance_count, first_vertex = 0, first_instance = 0) => {
|
|
13
|
+
const indirectData = new Uint32Array([
|
|
14
|
+
vertex_count,
|
|
15
|
+
instance_count,
|
|
16
|
+
first_vertex,
|
|
17
|
+
first_instance
|
|
18
|
+
]);
|
|
19
|
+
device.queue.writeBuffer(buffer, 0, indirectData);
|
|
20
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 2のべき乗に切り上げ
|
|
3
|
+
* Round up to the next power of two
|
|
4
|
+
*
|
|
5
|
+
* @param {number} v
|
|
6
|
+
* @return {number}
|
|
7
|
+
* @method
|
|
8
|
+
* @protected
|
|
9
|
+
*/
|
|
10
|
+
export const execute = (v) => {
|
|
11
|
+
v--;
|
|
12
|
+
v |= v >> 1;
|
|
13
|
+
v |= v >> 2;
|
|
14
|
+
v |= v >> 4;
|
|
15
|
+
v |= v >> 8;
|
|
16
|
+
v |= v >> 16;
|
|
17
|
+
return v + 1;
|
|
18
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IPooledStorageBuffer } from "../../interface/IStorageBufferConfig";
|
|
2
|
+
/**
|
|
3
|
+
* @description プールからStorage Bufferを取得(または新規作成)
|
|
4
|
+
* Acquire Storage Buffer from pool or create new one
|
|
5
|
+
*
|
|
6
|
+
* メモリアロケーションを最小化するため、
|
|
7
|
+
* 使用済みのバッファを再利用する。
|
|
8
|
+
*
|
|
9
|
+
* @param {GPUDevice} device - WebGPU device
|
|
10
|
+
* @param {IPooledStorageBuffer[]} pool - Storage Bufferプール
|
|
11
|
+
* @param {number} required_size - 必要なサイズ(バイト)
|
|
12
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
13
|
+
* @return {GPUBuffer} 取得されたStorage Buffer
|
|
14
|
+
*/
|
|
15
|
+
export declare const execute: (device: GPUDevice, pool: IPooledStorageBuffer[], required_size: number, current_frame: number) => GPUBuffer;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { execute as createStorageBufferService } from "../service/BufferManagerCreateStorageBufferService";
|
|
2
|
+
/**
|
|
3
|
+
* @description プールからStorage Bufferを取得(または新規作成)
|
|
4
|
+
* Acquire Storage Buffer from pool or create new one
|
|
5
|
+
*
|
|
6
|
+
* メモリアロケーションを最小化するため、
|
|
7
|
+
* 使用済みのバッファを再利用する。
|
|
8
|
+
*
|
|
9
|
+
* @param {GPUDevice} device - WebGPU device
|
|
10
|
+
* @param {IPooledStorageBuffer[]} pool - Storage Bufferプール
|
|
11
|
+
* @param {number} required_size - 必要なサイズ(バイト)
|
|
12
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
13
|
+
* @return {GPUBuffer} 取得されたStorage Buffer
|
|
14
|
+
*/
|
|
15
|
+
export const execute = (device, pool, required_size, current_frame) => {
|
|
16
|
+
// アライメントを考慮(256バイト境界)
|
|
17
|
+
const alignedSize = Math.ceil(required_size / 256) * 256;
|
|
18
|
+
// プールから適切なサイズの未使用バッファを検索
|
|
19
|
+
// 最もサイズが近いバッファを選択(メモリ効率)
|
|
20
|
+
let bestMatch = null;
|
|
21
|
+
let bestSizeDiff = Infinity;
|
|
22
|
+
for (const entry of pool) {
|
|
23
|
+
if (!entry.inUse && entry.size >= alignedSize) {
|
|
24
|
+
const sizeDiff = entry.size - alignedSize;
|
|
25
|
+
if (sizeDiff < bestSizeDiff) {
|
|
26
|
+
bestMatch = entry;
|
|
27
|
+
bestSizeDiff = sizeDiff;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (bestMatch) {
|
|
32
|
+
bestMatch.inUse = true;
|
|
33
|
+
bestMatch.lastUsedFrame = current_frame;
|
|
34
|
+
return bestMatch.buffer;
|
|
35
|
+
}
|
|
36
|
+
// 適切なバッファがない場合は新規作成
|
|
37
|
+
// 将来の再利用のために少し大きめに確保
|
|
38
|
+
const createSize = Math.max(alignedSize, 16384); // 最小16KB
|
|
39
|
+
const buffer = createStorageBufferService(device, {
|
|
40
|
+
"size": createSize,
|
|
41
|
+
"usage": GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,
|
|
42
|
+
"label": `storage_buffer_${pool.length}`
|
|
43
|
+
});
|
|
44
|
+
pool.push({
|
|
45
|
+
"buffer": buffer,
|
|
46
|
+
"size": createSize,
|
|
47
|
+
"inUse": true,
|
|
48
|
+
"lastUsedFrame": current_frame
|
|
49
|
+
});
|
|
50
|
+
return buffer;
|
|
51
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description プールからユニフォームバッファを取得(または新規作成)
|
|
3
|
+
* Acquire uniform buffer from pool (or create new)
|
|
4
|
+
* バケット化されたMap<number, GPUBuffer[]>からO(1)で取得
|
|
5
|
+
*
|
|
6
|
+
* @param {GPUDevice} device
|
|
7
|
+
* @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
|
|
8
|
+
* @param {number} required_size - 必要なバイトサイズ
|
|
9
|
+
* @return {GPUBuffer}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export declare const execute: (device: GPUDevice, buckets: Map<number, GPUBuffer[]>, required_size: number) => GPUBuffer;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description プールからユニフォームバッファを取得(または新規作成)
|
|
3
|
+
* Acquire uniform buffer from pool (or create new)
|
|
4
|
+
* バケット化されたMap<number, GPUBuffer[]>からO(1)で取得
|
|
5
|
+
*
|
|
6
|
+
* @param {GPUDevice} device
|
|
7
|
+
* @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
|
|
8
|
+
* @param {number} required_size - 必要なバイトサイズ
|
|
9
|
+
* @return {GPUBuffer}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export const execute = (device, buckets, required_size) => {
|
|
14
|
+
// 16バイトアライメント
|
|
15
|
+
const alignedSize = Math.ceil(required_size / 16) * 16;
|
|
16
|
+
// バケットからバッファを取得(O(1))
|
|
17
|
+
const bucket = buckets.get(alignedSize);
|
|
18
|
+
if (bucket && bucket.length > 0) {
|
|
19
|
+
return bucket.pop();
|
|
20
|
+
}
|
|
21
|
+
// 新規作成
|
|
22
|
+
return device.createBuffer({
|
|
23
|
+
"size": alignedSize,
|
|
24
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
25
|
+
});
|
|
26
|
+
};
|