@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,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description フィルター用グラデーションLUTの共有アタッチメント
|
|
3
|
+
* Shared attachment for filter gradient LUT
|
|
4
|
+
* 注意: グラデーションLUTは共有テクスチャに描画されるため、
|
|
5
|
+
* キャッシュは使用しません。各フレームで再描画が必要です。
|
|
6
|
+
* Note: Gradient LUT is drawn to a shared texture, so caching
|
|
7
|
+
* is not used. Re-drawing is required each frame.
|
|
8
|
+
*
|
|
9
|
+
* @type {IAttachmentObject | null}
|
|
10
|
+
* @private
|
|
11
|
+
*/
|
|
12
|
+
let $filterGradientAttachment = null;
|
|
13
|
+
/**
|
|
14
|
+
* @description GPUDeviceの参照
|
|
15
|
+
* @private
|
|
16
|
+
*/
|
|
17
|
+
let $device = null;
|
|
18
|
+
/**
|
|
19
|
+
* @description GPUDeviceを設定
|
|
20
|
+
* Set GPUDevice
|
|
21
|
+
*
|
|
22
|
+
* @param {GPUDevice} device
|
|
23
|
+
* @return {void}
|
|
24
|
+
* @method
|
|
25
|
+
* @protected
|
|
26
|
+
*/
|
|
27
|
+
export const $setFilterGradientLUTDevice = (device) => {
|
|
28
|
+
$device = device;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* @description フィルター用グラデーションLUTのAttachmentObjectを返却
|
|
32
|
+
* Returns AttachmentObject for filter gradient LUT
|
|
33
|
+
*
|
|
34
|
+
* @return {IAttachmentObject}
|
|
35
|
+
* @method
|
|
36
|
+
* @protected
|
|
37
|
+
*/
|
|
38
|
+
export const $getFilterGradientAttachmentObject = () => {
|
|
39
|
+
if (!$filterGradientAttachment && $device) {
|
|
40
|
+
const resolution = 256;
|
|
41
|
+
// 1xN テクスチャを作成
|
|
42
|
+
const texture = $device.createTexture({
|
|
43
|
+
"size": { "width": resolution, "height": 1 },
|
|
44
|
+
"format": "rgba8unorm",
|
|
45
|
+
"usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
|
|
46
|
+
});
|
|
47
|
+
$filterGradientAttachment = {
|
|
48
|
+
"id": -256, // フィルター用に負のIDを使用
|
|
49
|
+
"width": resolution,
|
|
50
|
+
"height": 1,
|
|
51
|
+
"clipLevel": 0,
|
|
52
|
+
"msaa": false,
|
|
53
|
+
"mask": false,
|
|
54
|
+
"color": null,
|
|
55
|
+
"texture": {
|
|
56
|
+
"id": -256,
|
|
57
|
+
"resource": texture,
|
|
58
|
+
"view": texture.createView(),
|
|
59
|
+
"width": resolution,
|
|
60
|
+
"height": 1,
|
|
61
|
+
"area": resolution,
|
|
62
|
+
"smooth": true
|
|
63
|
+
},
|
|
64
|
+
"stencil": null,
|
|
65
|
+
"msaaTexture": null,
|
|
66
|
+
"msaaStencil": null
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return $filterGradientAttachment;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* @description フィルター用グラデーションLUTの共有アタッチメントを破棄してクリア
|
|
73
|
+
* Destroy and clear filter gradient LUT shared attachment
|
|
74
|
+
*
|
|
75
|
+
* @return {void}
|
|
76
|
+
* @method
|
|
77
|
+
* @protected
|
|
78
|
+
*/
|
|
79
|
+
export const $clearFilterGradientAttachment = () => {
|
|
80
|
+
if ($filterGradientAttachment?.texture?.resource) {
|
|
81
|
+
$filterGradientAttachment.texture.resource.destroy();
|
|
82
|
+
}
|
|
83
|
+
$filterGradientAttachment = null;
|
|
84
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
|
+
/**
|
|
4
|
+
* @description グローフィルターを適用
|
|
5
|
+
* Apply glow filter
|
|
6
|
+
*
|
|
7
|
+
* UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
|
|
8
|
+
* copyTextureToTextureと一時テクスチャを使用しない最適化版。
|
|
9
|
+
*
|
|
10
|
+
* @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
|
|
11
|
+
* @param {Float32Array} matrix - 変換行列
|
|
12
|
+
* @param {number} color - グロー色 (32bit整数)
|
|
13
|
+
* @param {number} alpha - アルファ
|
|
14
|
+
* @param {number} blurX - X方向ブラー量
|
|
15
|
+
* @param {number} blurY - Y方向ブラー量
|
|
16
|
+
* @param {number} strength - グロー強度
|
|
17
|
+
* @param {number} quality - クオリティ
|
|
18
|
+
* @param {boolean} inner - インナーグロー
|
|
19
|
+
* @param {boolean} knockout - ノックアウトモード
|
|
20
|
+
* @param {number} devicePixelRatio - デバイスピクセル比
|
|
21
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
22
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
23
|
+
*/
|
|
24
|
+
export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, color: number, alpha: number, blurX: number, blurY: number, strength: number, quality: number, inner: boolean, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { $offset } from "../FilterOffset";
|
|
2
|
+
import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
|
|
3
|
+
/**
|
|
4
|
+
* @description プリアロケートされたFloat32Array (サイズ16)
|
|
5
|
+
*/
|
|
6
|
+
const $uniform16 = new Float32Array(16);
|
|
7
|
+
/**
|
|
8
|
+
* @description プリアロケートされたBindGroupEntry配列 (バインディング4つ)
|
|
9
|
+
*/
|
|
10
|
+
const $entries4 = [
|
|
11
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
12
|
+
{ "binding": 1, "resource": null },
|
|
13
|
+
{ "binding": 2, "resource": null },
|
|
14
|
+
{ "binding": 3, "resource": null }
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ対応)
|
|
18
|
+
*/
|
|
19
|
+
const intToRGBA = (color, alpha) => {
|
|
20
|
+
const r = (color >> 16 & 0xFF) / 255 * alpha;
|
|
21
|
+
const g = (color >> 8 & 0xFF) / 255 * alpha;
|
|
22
|
+
const b = (color & 0xFF) / 255 * alpha;
|
|
23
|
+
return [r, g, b, alpha];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* @description グローフィルターを適用
|
|
27
|
+
* Apply glow filter
|
|
28
|
+
*
|
|
29
|
+
* UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
|
|
30
|
+
* copyTextureToTextureと一時テクスチャを使用しない最適化版。
|
|
31
|
+
*
|
|
32
|
+
* @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
|
|
33
|
+
* @param {Float32Array} matrix - 変換行列
|
|
34
|
+
* @param {number} color - グロー色 (32bit整数)
|
|
35
|
+
* @param {number} alpha - アルファ
|
|
36
|
+
* @param {number} blurX - X方向ブラー量
|
|
37
|
+
* @param {number} blurY - Y方向ブラー量
|
|
38
|
+
* @param {number} strength - グロー強度
|
|
39
|
+
* @param {number} quality - クオリティ
|
|
40
|
+
* @param {boolean} inner - インナーグロー
|
|
41
|
+
* @param {boolean} knockout - ノックアウトモード
|
|
42
|
+
* @param {number} devicePixelRatio - デバイスピクセル比
|
|
43
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
44
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
45
|
+
*/
|
|
46
|
+
export const execute = (sourceAttachment, matrix, color, alpha, blurX, blurY, strength, quality, inner, knockout, devicePixelRatio, config) => {
|
|
47
|
+
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
48
|
+
// 元のオフセットを保存
|
|
49
|
+
const baseOffsetX = $offset.x;
|
|
50
|
+
const baseOffsetY = $offset.y;
|
|
51
|
+
const baseWidth = sourceAttachment.width;
|
|
52
|
+
const baseHeight = sourceAttachment.height;
|
|
53
|
+
// ブラーフィルターを適用(元テクスチャを保持)
|
|
54
|
+
const blurAttachment = filterApplyBlurFilterUseCase(sourceAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
|
|
55
|
+
const blurWidth = blurAttachment.width;
|
|
56
|
+
const blurHeight = blurAttachment.height;
|
|
57
|
+
const blurOffsetX = $offset.x;
|
|
58
|
+
const blurOffsetY = $offset.y;
|
|
59
|
+
// 出力サイズを決定
|
|
60
|
+
const width = inner ? baseWidth : blurWidth;
|
|
61
|
+
const height = inner ? baseHeight : blurHeight;
|
|
62
|
+
// オフセット差分を計算
|
|
63
|
+
const offsetDiffX = blurOffsetX - baseOffsetX;
|
|
64
|
+
const offsetDiffY = blurOffsetY - baseOffsetY;
|
|
65
|
+
// UV変換パラメータ計算(GradientGlowFilterと同じパターン)
|
|
66
|
+
const baseTextureX = inner ? 0 : offsetDiffX;
|
|
67
|
+
const baseTextureY = inner ? 0 : offsetDiffY;
|
|
68
|
+
const blurTextureX = inner ? -offsetDiffX : 0;
|
|
69
|
+
const blurTextureY = inner ? -offsetDiffY : 0;
|
|
70
|
+
const baseScaleX = width / baseWidth;
|
|
71
|
+
const baseScaleY = height / baseHeight;
|
|
72
|
+
const baseOffsetUVX = baseTextureX / baseWidth;
|
|
73
|
+
const baseOffsetUVY = baseTextureY / baseHeight;
|
|
74
|
+
const blurScaleX = width / blurWidth;
|
|
75
|
+
const blurScaleY = height / blurHeight;
|
|
76
|
+
const blurOffsetUVX = blurTextureX / blurWidth;
|
|
77
|
+
const blurOffsetUVY = blurTextureY / blurHeight;
|
|
78
|
+
// 出力アタッチメントを作成
|
|
79
|
+
const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
|
|
80
|
+
const pipeline = pipelineManager.getFilterPipeline("glow_filter", {
|
|
81
|
+
"IS_INNER": inner ? 1 : 0,
|
|
82
|
+
"IS_KNOCKOUT": knockout ? 1 : 0
|
|
83
|
+
});
|
|
84
|
+
const bindGroupLayout = pipelineManager.getBindGroupLayout("glow_filter");
|
|
85
|
+
if (!pipeline || !bindGroupLayout) {
|
|
86
|
+
console.error("[WebGPU GlowFilter] Pipeline not found");
|
|
87
|
+
frameBufferManager.releaseTemporaryAttachment(blurAttachment);
|
|
88
|
+
return sourceAttachment;
|
|
89
|
+
}
|
|
90
|
+
// サンプラーを作成
|
|
91
|
+
const sampler = textureManager.createSampler("glow_sampler", true);
|
|
92
|
+
// ユニフォームバッファを作成
|
|
93
|
+
// color: vec4<f32> (16 bytes)
|
|
94
|
+
// baseScale: vec2<f32>, baseOffset: vec2<f32> (16 bytes)
|
|
95
|
+
// blurScale: vec2<f32>, blurOffset: vec2<f32> (16 bytes)
|
|
96
|
+
// strength: f32, inner: f32, knockout: f32, _padding: f32 (16 bytes)
|
|
97
|
+
// Total: 64 bytes
|
|
98
|
+
const [r, g, b, a] = intToRGBA(color, alpha);
|
|
99
|
+
$uniform16[0] = r;
|
|
100
|
+
$uniform16[1] = g;
|
|
101
|
+
$uniform16[2] = b;
|
|
102
|
+
$uniform16[3] = a;
|
|
103
|
+
$uniform16[4] = baseScaleX;
|
|
104
|
+
$uniform16[5] = baseScaleY;
|
|
105
|
+
$uniform16[6] = baseOffsetUVX;
|
|
106
|
+
$uniform16[7] = baseOffsetUVY;
|
|
107
|
+
$uniform16[8] = blurScaleX;
|
|
108
|
+
$uniform16[9] = blurScaleY;
|
|
109
|
+
$uniform16[10] = blurOffsetUVX;
|
|
110
|
+
$uniform16[11] = blurOffsetUVY;
|
|
111
|
+
$uniform16[12] = strength;
|
|
112
|
+
$uniform16[13] = inner ? 1.0 : 0.0;
|
|
113
|
+
$uniform16[14] = knockout ? 1.0 : 0.0;
|
|
114
|
+
$uniform16[15] = 0.0;
|
|
115
|
+
const uniformBuffer = config.bufferManager
|
|
116
|
+
? config.bufferManager.acquireAndWriteUniformBuffer($uniform16)
|
|
117
|
+
: device.createBuffer({
|
|
118
|
+
"size": $uniform16.byteLength,
|
|
119
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
120
|
+
});
|
|
121
|
+
if (!config.bufferManager) {
|
|
122
|
+
device.queue.writeBuffer(uniformBuffer, 0, $uniform16);
|
|
123
|
+
}
|
|
124
|
+
// バインドグループを作成(元テクスチャとブラーテクスチャを直接バインド)
|
|
125
|
+
$entries4[0].resource.buffer = uniformBuffer;
|
|
126
|
+
$entries4[1].resource = sampler;
|
|
127
|
+
$entries4[2].resource = blurAttachment.texture.view;
|
|
128
|
+
$entries4[3].resource = sourceAttachment.texture.view;
|
|
129
|
+
const bindGroup = device.createBindGroup({
|
|
130
|
+
"layout": bindGroupLayout,
|
|
131
|
+
"entries": $entries4
|
|
132
|
+
});
|
|
133
|
+
// レンダーパスを実行
|
|
134
|
+
const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
|
|
135
|
+
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
136
|
+
passEncoder.setPipeline(pipeline);
|
|
137
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
138
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
139
|
+
passEncoder.end();
|
|
140
|
+
// クリーンアップ
|
|
141
|
+
frameBufferManager.releaseTemporaryAttachment(blurAttachment);
|
|
142
|
+
return destAttachment;
|
|
143
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export class GlowFilterShader {
|
|
2
|
+
static getFragmentShader() {
|
|
3
|
+
return /* wgsl */ `
|
|
4
|
+
struct VertexOutput {
|
|
5
|
+
@builtin(position) position: vec4<f32>,
|
|
6
|
+
@location(0) texCoord: vec2<f32>,
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
struct GlowUniforms {
|
|
10
|
+
glowColor: vec4<f32>,
|
|
11
|
+
strength: f32,
|
|
12
|
+
inner: f32,
|
|
13
|
+
knockout: f32,
|
|
14
|
+
_padding: f32,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@group(0) @binding(0) var<uniform> uniforms: GlowUniforms;
|
|
18
|
+
@group(0) @binding(1) var textureSampler: sampler;
|
|
19
|
+
@group(0) @binding(2) var textureData: texture_2d<f32>;
|
|
20
|
+
|
|
21
|
+
@fragment
|
|
22
|
+
fn main(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
23
|
+
var originalColor = textureSample(textureData, textureSampler, input.texCoord);
|
|
24
|
+
|
|
25
|
+
let alpha = originalColor.a;
|
|
26
|
+
|
|
27
|
+
var glowColor = uniforms.glowColor * uniforms.strength * alpha;
|
|
28
|
+
|
|
29
|
+
if (uniforms.inner > 0.5) {
|
|
30
|
+
if (uniforms.knockout > 0.5) {
|
|
31
|
+
return glowColor;
|
|
32
|
+
} else {
|
|
33
|
+
return mix(originalColor, glowColor, alpha);
|
|
34
|
+
}
|
|
35
|
+
} else {
|
|
36
|
+
if (uniforms.knockout > 0.5) {
|
|
37
|
+
return vec4<f32>(glowColor.rgb, glowColor.a * (1.0 - alpha));
|
|
38
|
+
} else {
|
|
39
|
+
return originalColor + glowColor;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
static getVertexShader() {
|
|
46
|
+
return /* wgsl */ `
|
|
47
|
+
struct VertexInput {
|
|
48
|
+
@location(0) position: vec2<f32>,
|
|
49
|
+
@location(1) texCoord: vec2<f32>,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
struct VertexOutput {
|
|
53
|
+
@builtin(position) position: vec4<f32>,
|
|
54
|
+
@location(0) texCoord: vec2<f32>,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@vertex
|
|
58
|
+
fn main(input: VertexInput) -> VertexOutput {
|
|
59
|
+
var output: VertexOutput;
|
|
60
|
+
output.position = vec4<f32>(input.position, 0.0, 1.0);
|
|
61
|
+
output.texCoord = input.texCoord;
|
|
62
|
+
return output;
|
|
63
|
+
}
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
|
+
/**
|
|
4
|
+
* @description グラデーションベベルフィルターを適用
|
|
5
|
+
* Apply gradient bevel filter
|
|
6
|
+
*
|
|
7
|
+
* WebGL版と同じフロー:
|
|
8
|
+
* 1. ベベルベーステクスチャ作成: original * (1 - shifted.a)
|
|
9
|
+
* 2. ベベルベースにブラー適用
|
|
10
|
+
* 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
|
|
11
|
+
*
|
|
12
|
+
* @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
|
|
13
|
+
* @param {Float32Array} matrix - 変換行列
|
|
14
|
+
* @param {number} distance - ベベルの距離
|
|
15
|
+
* @param {number} angle - ベベルの角度(度)
|
|
16
|
+
* @param {Float32Array} colors - 色配列
|
|
17
|
+
* @param {Float32Array} alphas - アルファ配列
|
|
18
|
+
* @param {Float32Array} ratios - 比率配列
|
|
19
|
+
* @param {number} blurX - X方向ブラー量
|
|
20
|
+
* @param {number} blurY - Y方向ブラー量
|
|
21
|
+
* @param {number} strength - ベベル強度
|
|
22
|
+
* @param {number} quality - クオリティ
|
|
23
|
+
* @param {number} type - タイプ (0: full, 1: inner, 2: outer)
|
|
24
|
+
* @param {boolean} knockout - ノックアウトモード
|
|
25
|
+
* @param {number} devicePixelRatio - デバイスピクセル比
|
|
26
|
+
* @param {IGradientBevelConfig} config - WebGPUリソース設定
|
|
27
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
28
|
+
*/
|
|
29
|
+
export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, colors: Float32Array, alphas: Float32Array, ratios: Float32Array, blurX: number, blurY: number, strength: number, quality: number, type: number, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { $offset } from "../FilterOffset";
|
|
2
|
+
import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
|
|
3
|
+
import { generateFilterGradientLUT } from "../../Gradient/GradientLUTGenerator";
|
|
4
|
+
/**
|
|
5
|
+
* @description 度からラジアンへの変換係数
|
|
6
|
+
*/
|
|
7
|
+
const DEG_TO_RAD = Math.PI / 180;
|
|
8
|
+
/**
|
|
9
|
+
* @description プリアロケートされたFloat32Array
|
|
10
|
+
*/
|
|
11
|
+
const $uniform4 = new Float32Array(4);
|
|
12
|
+
const $uniform12 = new Float32Array(12);
|
|
13
|
+
/**
|
|
14
|
+
* @description プリアロケートされたBindGroupEntry配列 (バインディング3つ)
|
|
15
|
+
*/
|
|
16
|
+
const $entries3 = [
|
|
17
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
18
|
+
{ "binding": 1, "resource": null },
|
|
19
|
+
{ "binding": 2, "resource": null }
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* @description プリアロケートされたBindGroupEntry配列 (バインディング5つ)
|
|
23
|
+
*/
|
|
24
|
+
const $entries5 = [
|
|
25
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
26
|
+
{ "binding": 1, "resource": null },
|
|
27
|
+
{ "binding": 2, "resource": null },
|
|
28
|
+
{ "binding": 3, "resource": null },
|
|
29
|
+
{ "binding": 4, "resource": null }
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* @description グラデーションベベルフィルターを適用
|
|
33
|
+
* Apply gradient bevel filter
|
|
34
|
+
*
|
|
35
|
+
* WebGL版と同じフロー:
|
|
36
|
+
* 1. ベベルベーステクスチャ作成: original * (1 - shifted.a)
|
|
37
|
+
* 2. ベベルベースにブラー適用
|
|
38
|
+
* 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
|
|
39
|
+
*
|
|
40
|
+
* @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
|
|
41
|
+
* @param {Float32Array} matrix - 変換行列
|
|
42
|
+
* @param {number} distance - ベベルの距離
|
|
43
|
+
* @param {number} angle - ベベルの角度(度)
|
|
44
|
+
* @param {Float32Array} colors - 色配列
|
|
45
|
+
* @param {Float32Array} alphas - アルファ配列
|
|
46
|
+
* @param {Float32Array} ratios - 比率配列
|
|
47
|
+
* @param {number} blurX - X方向ブラー量
|
|
48
|
+
* @param {number} blurY - Y方向ブラー量
|
|
49
|
+
* @param {number} strength - ベベル強度
|
|
50
|
+
* @param {number} quality - クオリティ
|
|
51
|
+
* @param {number} type - タイプ (0: full, 1: inner, 2: outer)
|
|
52
|
+
* @param {boolean} knockout - ノックアウトモード
|
|
53
|
+
* @param {number} devicePixelRatio - デバイスピクセル比
|
|
54
|
+
* @param {IGradientBevelConfig} config - WebGPUリソース設定
|
|
55
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
56
|
+
*/
|
|
57
|
+
export const execute = (sourceAttachment, matrix, distance, angle, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout, devicePixelRatio, config) => {
|
|
58
|
+
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
59
|
+
// 元のオフセットを保存
|
|
60
|
+
const baseOffsetX = $offset.x;
|
|
61
|
+
const baseOffsetY = $offset.y;
|
|
62
|
+
const baseWidth = sourceAttachment.width;
|
|
63
|
+
const baseHeight = sourceAttachment.height;
|
|
64
|
+
// 変換行列からスケールを取得
|
|
65
|
+
const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
|
|
66
|
+
const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
|
|
67
|
+
// ベベルのオフセットを計算
|
|
68
|
+
const radian = angle * DEG_TO_RAD;
|
|
69
|
+
const x = Math.cos(radian) * distance * (xScale / devicePixelRatio);
|
|
70
|
+
const y = Math.sin(radian) * distance * (yScale / devicePixelRatio);
|
|
71
|
+
// ===== Step 1: ベベルベーステクスチャ作成 =====
|
|
72
|
+
// WebGL版と同じ: original * (1 - shifted_original.a)
|
|
73
|
+
// shifted = original を (2x, 2y) ピクセル分シフトしたもの
|
|
74
|
+
const bevelBasePipeline = pipelineManager.getPipeline("bevel_base");
|
|
75
|
+
const bevelBaseLayout = pipelineManager.getBindGroupLayout("bevel_base");
|
|
76
|
+
if (!bevelBasePipeline || !bevelBaseLayout) {
|
|
77
|
+
console.error("[WebGPU GradientBevelFilter] bevel_base pipeline not found");
|
|
78
|
+
return sourceAttachment;
|
|
79
|
+
}
|
|
80
|
+
const bevelBaseAttachment = frameBufferManager.createTemporaryAttachment(baseWidth, baseHeight);
|
|
81
|
+
const bevelBaseSampler = textureManager.createSampler("bevel_base_sampler", true);
|
|
82
|
+
// UV空間でのオフセット: (2x / baseWidth, 2y / baseHeight)
|
|
83
|
+
$uniform4[0] = 2 * x / baseWidth;
|
|
84
|
+
$uniform4[1] = 2 * y / baseHeight;
|
|
85
|
+
$uniform4[2] = 0.0;
|
|
86
|
+
$uniform4[3] = 0.0;
|
|
87
|
+
const bevelBaseUniformBuffer = config.bufferManager
|
|
88
|
+
? config.bufferManager.acquireAndWriteUniformBuffer($uniform4)
|
|
89
|
+
: device.createBuffer({
|
|
90
|
+
"size": $uniform4.byteLength,
|
|
91
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
92
|
+
});
|
|
93
|
+
if (!config.bufferManager) {
|
|
94
|
+
device.queue.writeBuffer(bevelBaseUniformBuffer, 0, $uniform4);
|
|
95
|
+
}
|
|
96
|
+
$entries3[0].resource.buffer = bevelBaseUniformBuffer;
|
|
97
|
+
$entries3[1].resource = bevelBaseSampler;
|
|
98
|
+
$entries3[2].resource = sourceAttachment.texture.view;
|
|
99
|
+
const bevelBaseBindGroup = device.createBindGroup({
|
|
100
|
+
"layout": bevelBaseLayout,
|
|
101
|
+
"entries": $entries3
|
|
102
|
+
});
|
|
103
|
+
const bevelBaseRenderPass = frameBufferManager.createRenderPassDescriptor(bevelBaseAttachment.texture.view, 0, 0, 0, 0, "clear");
|
|
104
|
+
const bevelBaseEncoder = commandEncoder.beginRenderPass(bevelBaseRenderPass);
|
|
105
|
+
bevelBaseEncoder.setPipeline(bevelBasePipeline);
|
|
106
|
+
bevelBaseEncoder.setBindGroup(0, bevelBaseBindGroup);
|
|
107
|
+
bevelBaseEncoder.draw(6, 1, 0, 0);
|
|
108
|
+
bevelBaseEncoder.end();
|
|
109
|
+
// ===== Step 2: ベベルベースにブラー適用 =====
|
|
110
|
+
// WebGL版と同じ: bevelBaseをブラーする(元テクスチャではなく)
|
|
111
|
+
const blurAttachment = filterApplyBlurFilterUseCase(bevelBaseAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
|
|
112
|
+
// ベベルベースは不要になったので解放
|
|
113
|
+
frameBufferManager.releaseTemporaryAttachment(bevelBaseAttachment);
|
|
114
|
+
const blurWidth = blurAttachment.width;
|
|
115
|
+
const blurHeight = blurAttachment.height;
|
|
116
|
+
// ===== Step 3: WebGL版と同じサイズ・位置計算 =====
|
|
117
|
+
const isInner = type === 1;
|
|
118
|
+
const absX = Math.abs(x);
|
|
119
|
+
const absY = Math.abs(y);
|
|
120
|
+
const blurOffsetX = (blurWidth - baseWidth) / 2;
|
|
121
|
+
const blurOffsetY = (blurHeight - baseHeight) / 2;
|
|
122
|
+
// WebGL版と同じ: bevelWidth/bevelHeight
|
|
123
|
+
const bevelWidth = Math.ceil(blurWidth + absX * 2);
|
|
124
|
+
const bevelHeight = Math.ceil(blurHeight + absY * 2);
|
|
125
|
+
const width = isInner ? baseWidth : bevelWidth;
|
|
126
|
+
const height = isInner ? baseHeight : bevelHeight;
|
|
127
|
+
// WebGL版と同じテクスチャ位置計算
|
|
128
|
+
const baseTextureX = isInner ? 0 : absX + blurOffsetX;
|
|
129
|
+
const baseTextureY = isInner ? 0 : absY + blurOffsetY;
|
|
130
|
+
const blurTextureX = isInner ? -blurOffsetX - x : absX - x;
|
|
131
|
+
const blurTextureY = isInner ? -blurOffsetY - y : absY - y;
|
|
132
|
+
// ===== Step 4: グラデーションLUT生成 =====
|
|
133
|
+
// 注意: 共有テクスチャ+queue.writeTextureは使用しない。
|
|
134
|
+
// queue.writeTextureはcommandEncoder外で即座に実行されるため、
|
|
135
|
+
// 同一フレーム内の複数GradientBevelFilter適用時に最後の書き込みで上書きされる。
|
|
136
|
+
// 各呼び出しで専用テクスチャを作成してこのタイミング問題を回避する。
|
|
137
|
+
const lutData = generateFilterGradientLUT(ratios, colors, alphas);
|
|
138
|
+
const lutTexture = device.createTexture({
|
|
139
|
+
"size": { "width": 256, "height": 1 },
|
|
140
|
+
"format": "rgba8unorm",
|
|
141
|
+
"usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
|
|
142
|
+
});
|
|
143
|
+
device.queue.writeTexture({ "texture": lutTexture }, lutData.buffer, { "bytesPerRow": 256 * 4, "offset": lutData.byteOffset }, { "width": 256, "height": 1 });
|
|
144
|
+
const lutView = lutTexture.createView();
|
|
145
|
+
// ===== Step 5: UV変換パラメータ計算 =====
|
|
146
|
+
// WebGL版と同じ: uv = v_coord * scale - offset
|
|
147
|
+
// WebGPU: texCoord.y=0がトップ(Y-flip補正済み)
|
|
148
|
+
// → offset_y = textureY / textureHeight(WebGLのY反転不要)
|
|
149
|
+
const baseScaleX = width / baseWidth;
|
|
150
|
+
const baseScaleY = height / baseHeight;
|
|
151
|
+
const baseOffsetUVX = baseTextureX / baseWidth;
|
|
152
|
+
const baseOffsetUVY = baseTextureY / baseHeight;
|
|
153
|
+
const blurScaleX = width / blurWidth;
|
|
154
|
+
const blurScaleY = height / blurHeight;
|
|
155
|
+
const blurOffsetUVX = blurTextureX / blurWidth;
|
|
156
|
+
const blurOffsetUVY = blurTextureY / blurHeight;
|
|
157
|
+
// ===== Step 6: 最終合成パス =====
|
|
158
|
+
const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
|
|
159
|
+
const pipeline = pipelineManager.getFilterPipeline("gradient_bevel_filter", {
|
|
160
|
+
"BEVEL_TYPE": type,
|
|
161
|
+
"IS_KNOCKOUT": knockout ? 1 : 0
|
|
162
|
+
});
|
|
163
|
+
const bindGroupLayout = pipelineManager.getBindGroupLayout("gradient_bevel_filter");
|
|
164
|
+
if (!pipeline || !bindGroupLayout) {
|
|
165
|
+
console.error("[WebGPU GradientBevelFilter] Pipeline not found");
|
|
166
|
+
frameBufferManager.releaseTemporaryAttachment(blurAttachment);
|
|
167
|
+
return sourceAttachment;
|
|
168
|
+
}
|
|
169
|
+
const sampler = textureManager.createSampler("gradient_bevel_sampler", true);
|
|
170
|
+
// ユニフォームバッファ: 12 floats = 48 bytes
|
|
171
|
+
$uniform12[0] = strength;
|
|
172
|
+
$uniform12[1] = isInner ? 1.0 : 0.0;
|
|
173
|
+
$uniform12[2] = knockout ? 1.0 : 0.0;
|
|
174
|
+
$uniform12[3] = type;
|
|
175
|
+
$uniform12[4] = baseScaleX;
|
|
176
|
+
$uniform12[5] = baseScaleY;
|
|
177
|
+
$uniform12[6] = baseOffsetUVX;
|
|
178
|
+
$uniform12[7] = baseOffsetUVY;
|
|
179
|
+
$uniform12[8] = blurScaleX;
|
|
180
|
+
$uniform12[9] = blurScaleY;
|
|
181
|
+
$uniform12[10] = blurOffsetUVX;
|
|
182
|
+
$uniform12[11] = blurOffsetUVY;
|
|
183
|
+
const uniformBuffer = config.bufferManager
|
|
184
|
+
? config.bufferManager.acquireAndWriteUniformBuffer($uniform12)
|
|
185
|
+
: device.createBuffer({
|
|
186
|
+
"size": $uniform12.byteLength,
|
|
187
|
+
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
188
|
+
});
|
|
189
|
+
if (!config.bufferManager) {
|
|
190
|
+
device.queue.writeBuffer(uniformBuffer, 0, $uniform12);
|
|
191
|
+
}
|
|
192
|
+
// バインドグループを作成(オリジナルテクスチャを直接使用)
|
|
193
|
+
$entries5[0].resource.buffer = uniformBuffer;
|
|
194
|
+
$entries5[1].resource = sampler;
|
|
195
|
+
$entries5[2].resource = blurAttachment.texture.view;
|
|
196
|
+
$entries5[3].resource = sourceAttachment.texture.view;
|
|
197
|
+
$entries5[4].resource = lutView;
|
|
198
|
+
const bindGroup = device.createBindGroup({
|
|
199
|
+
"layout": bindGroupLayout,
|
|
200
|
+
"entries": $entries5
|
|
201
|
+
});
|
|
202
|
+
// レンダーパスを実行
|
|
203
|
+
const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
|
|
204
|
+
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
205
|
+
passEncoder.setPipeline(pipeline);
|
|
206
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
207
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
208
|
+
passEncoder.end();
|
|
209
|
+
// クリーンアップ(lutTextureはsubmit後に遅延破棄)
|
|
210
|
+
config.frameTextures.push(lutTexture);
|
|
211
|
+
frameBufferManager.releaseTemporaryAttachment(blurAttachment);
|
|
212
|
+
// WebGL版と同じオフセット更新
|
|
213
|
+
$offset.x = baseOffsetX + baseTextureX;
|
|
214
|
+
$offset.y = baseOffsetY + baseTextureY;
|
|
215
|
+
return destAttachment;
|
|
216
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
|
+
/**
|
|
4
|
+
* @description グラデーショングローフィルターを適用
|
|
5
|
+
* Apply gradient glow filter
|
|
6
|
+
*
|
|
7
|
+
* WebGL版と同じフロー:
|
|
8
|
+
* 1. ブラー適用
|
|
9
|
+
* 2. グラデーションLUT生成(専用テクスチャ)
|
|
10
|
+
* 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
|
|
11
|
+
*
|
|
12
|
+
* @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
|
|
13
|
+
* @param {Float32Array} matrix - 変換行列
|
|
14
|
+
* @param {number} distance - グローの距離
|
|
15
|
+
* @param {number} angle - グローの角度(度)
|
|
16
|
+
* @param {Float32Array} colors - 色配列
|
|
17
|
+
* @param {Float32Array} alphas - アルファ配列
|
|
18
|
+
* @param {Float32Array} ratios - 比率配列
|
|
19
|
+
* @param {number} blurX - X方向ブラー量
|
|
20
|
+
* @param {number} blurY - Y方向ブラー量
|
|
21
|
+
* @param {number} strength - グロー強度
|
|
22
|
+
* @param {number} quality - クオリティ
|
|
23
|
+
* @param {number} type - タイプ (0: full, 1: inner, 2: outer)
|
|
24
|
+
* @param {boolean} knockout - ノックアウトモード
|
|
25
|
+
* @param {number} devicePixelRatio - デバイスピクセル比
|
|
26
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
27
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
28
|
+
*/
|
|
29
|
+
export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, colors: Float32Array, alphas: Float32Array, ratios: Float32Array, blurX: number, blurY: number, strength: number, quality: number, type: number, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
|