@next2d/webgpu 3.0.4 → 3.1.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/package.json +3 -3
- package/src/AtlasManager.d.ts +75 -6
- package/src/AtlasManager.js +106 -30
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +2 -2
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +3 -3
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +4 -4
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +4 -4
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +5 -5
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +6 -6
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +6 -6
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +7 -7
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +6 -6
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +9 -9
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +6 -6
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +10 -10
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +7 -7
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +10 -10
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +3 -3
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +7 -7
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +10 -10
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +16 -16
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +6 -6
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +10 -10
- package/src/AttachmentManager.d.ts +28 -6
- package/src/AttachmentManager.js +28 -23
- package/src/BezierConverter/BezierConverter.d.ts +9 -3
- package/src/BezierConverter/BezierConverter.js +5 -3
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +2 -13
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +13 -25
- package/src/Blend/BlendInstancedManager.d.ts +19 -15
- package/src/Blend/BlendInstancedManager.js +35 -22
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +9 -2
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +28 -17
- package/src/Blend.d.ts +20 -2
- package/src/Blend.js +20 -4
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +2 -2
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +2 -2
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +1 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +1 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +1 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +1 -0
- package/src/BufferManager.d.ts +108 -43
- package/src/BufferManager.js +113 -153
- package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +7 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.js +7 -0
- package/src/Context/service/ContextComputeGradientMatrixService.d.ts +9 -1
- package/src/Context/service/ContextComputeGradientMatrixService.js +15 -7
- package/src/Context/service/ContextFillSimpleService.d.ts +14 -0
- package/src/Context/service/ContextFillSimpleService.js +14 -0
- package/src/Context/service/ContextFillWithStencilMainService.d.ts +11 -0
- package/src/Context/service/ContextFillWithStencilMainService.js +11 -0
- package/src/Context/service/ContextFillWithStencilService.d.ts +11 -0
- package/src/Context/service/ContextFillWithStencilService.js +11 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +17 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.js +201 -62
- package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.js +47 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.js +35 -0
- package/src/Context/usecase/ContextClipUseCase.d.ts +15 -0
- package/src/Context/usecase/ContextClipUseCase.js +19 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +21 -1
- package/src/Context/usecase/ContextContainerEndLayerUseCase.js +195 -104
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +13 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +41 -20
- package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +16 -1
- package/src/Context/usecase/ContextDrawIndirectUseCase.js +53 -30
- package/src/Context/usecase/ContextGradientFillUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextGradientFillUseCase.js +47 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.js +35 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +13 -1
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +126 -60
- package/src/Context.d.ts +445 -63
- package/src/Context.js +566 -144
- package/src/FillTexturePool.d.ts +39 -0
- package/src/FillTexturePool.js +70 -7
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +21 -2
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +33 -26
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +5 -5
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +81 -64
- package/src/Filter/BlurFilterUseCase.d.ts +15 -11
- package/src/Filter/BlurFilterUseCase.js +22 -17
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +2 -2
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +5 -5
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +15 -1
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +23 -17
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +20 -1
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +37 -26
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +7 -7
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +19 -31
- package/src/Filter/FilterGradientLUTCache.js +2 -0
- package/src/Filter/FilterUtil.d.ts +23 -0
- package/src/Filter/FilterUtil.js +33 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +5 -5
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +12 -21
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +6 -6
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +16 -19
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +5 -5
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +13 -16
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +13 -1
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +30 -3
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +11 -1
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +36 -6
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +10 -10
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +15 -15
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +4 -4
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +5 -5
- package/src/FrameBufferManager.d.ts +95 -3
- package/src/FrameBufferManager.js +97 -8
- package/src/Gradient/GradientLUTCache.d.ts +36 -4
- package/src/Gradient/GradientLUTCache.js +61 -5
- package/src/Gradient/GradientLUTGenerator.d.ts +26 -14
- package/src/Gradient/GradientLUTGenerator.js +74 -43
- package/src/Mask/service/MaskUnionMaskService.d.ts +16 -1
- package/src/Mask/service/MaskUnionMaskService.js +45 -31
- package/src/Mask.d.ts +57 -3
- package/src/Mask.js +75 -11
- package/src/Mesh/service/MeshFillGenerateService.d.ts +4 -4
- package/src/Mesh/service/MeshFillGenerateService.js +4 -4
- package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +4 -4
- package/src/Mesh/service/MeshStrokeFillGenerateService.js +4 -4
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +3 -3
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +10 -3
- package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +2 -2
- package/src/Mesh/usecase/MeshFillGenerateUseCase.js +9 -2
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +3 -3
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +10 -3
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +8 -14
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +214 -129
- package/src/PathCommand.d.ts +24 -23
- package/src/PathCommand.js +25 -79
- package/src/Shader/PipelineManager.d.ts +223 -6
- package/src/Shader/PipelineManager.js +308 -66
- package/src/Shader/ShaderInstancedManager.d.ts +17 -0
- package/src/Shader/ShaderInstancedManager.js +17 -0
- package/src/Shader/ShaderSource.d.ts +317 -12
- package/src/Shader/ShaderSource.js +328 -39
- package/src/Shader/wgsl/common/SharedWgsl.d.ts +28 -1
- package/src/Shader/wgsl/common/SharedWgsl.js +28 -9
- package/src/Shader/wgsl/fragment/BasicFragment.d.ts +14 -0
- package/src/Shader/wgsl/fragment/BasicFragment.js +14 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.js +7 -0
- package/src/Shader/wgsl/fragment/EffectFragment.d.ts +42 -0
- package/src/Shader/wgsl/fragment/EffectFragment.js +42 -0
- package/src/Shader/wgsl/fragment/FillFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/FillFragment.js +7 -0
- package/src/Shader/wgsl/fragment/FilterFragment.d.ts +70 -0
- package/src/Shader/wgsl/fragment/FilterFragment.js +70 -0
- package/src/Shader/wgsl/fragment/GradientFragment.d.ts +21 -0
- package/src/Shader/wgsl/fragment/GradientFragment.js +43 -8
- package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.js +7 -0
- package/src/Shader/wgsl/fragment/MaskFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/MaskFragment.js +7 -0
- package/src/Shader/wgsl/fragment/StencilFragment.d.ts +14 -0
- package/src/Shader/wgsl/fragment/StencilFragment.js +14 -0
- package/src/Shader/wgsl/vertex/BasicVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/BasicVertex.js +7 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.js +7 -0
- package/src/Shader/wgsl/vertex/FillVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/FillVertex.js +7 -0
- package/src/Shader/wgsl/vertex/FilterVertex.d.ts +77 -1
- package/src/Shader/wgsl/vertex/FilterVertex.js +135 -42
- package/src/Shader/wgsl/vertex/GradientVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/GradientVertex.js +7 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.js +7 -0
- package/src/Shader/wgsl/vertex/MaskVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/MaskVertex.js +7 -0
- package/src/Shader/wgsl/vertex/StencilVertex.d.ts +14 -0
- package/src/Shader/wgsl/vertex/StencilVertex.js +14 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +2 -2
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +2 -2
- package/src/TextureManager.d.ts +36 -5
- package/src/TextureManager.js +36 -24
- package/src/TexturePool/service/TexturePoolCleanupService.d.ts +4 -4
- package/src/TexturePool/service/TexturePoolCleanupService.js +6 -6
- package/src/TexturePool/service/TexturePoolReleaseService.d.ts +4 -4
- package/src/TexturePool/service/TexturePoolReleaseService.js +5 -5
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +10 -10
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +19 -18
- package/src/TexturePool.d.ts +36 -35
- package/src/TexturePool.js +44 -65
- package/src/WebGPUUtil.d.ts +79 -34
- package/src/WebGPUUtil.js +79 -36
- package/src/interface/IAttachmentObject.d.ts +36 -0
- package/src/interface/IBlendMode.d.ts +7 -0
- package/src/interface/IBlendState.d.ts +8 -0
- package/src/interface/IBounds.d.ts +23 -0
- package/src/interface/IColorBufferObject.d.ts +28 -0
- package/src/interface/IComplexBlendItem.d.ts +48 -0
- package/src/interface/IFilterConfig.d.ts +28 -2
- package/src/interface/IGradientStop.d.ts +20 -0
- package/src/interface/ILocalFilterConfig.d.ts +32 -2
- package/src/interface/IMeshResult.d.ts +8 -0
- package/src/interface/IPoint.d.ts +12 -0
- package/src/interface/IPooledTexture.d.ts +24 -0
- package/src/interface/IQuadraticSegment.d.ts +8 -0
- package/src/interface/IStencilBufferObject.d.ts +28 -0
- package/src/interface/IStorageBufferConfig.d.ts +8 -1
- package/src/interface/ITextureObject.d.ts +28 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +0 -5
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +0 -42
- package/src/Blend/service/BlendAddService.d.ts +0 -1
- package/src/Blend/service/BlendAddService.js +0 -8
- package/src/Blend/service/BlendAlphaService.d.ts +0 -1
- package/src/Blend/service/BlendAlphaService.js +0 -8
- package/src/Blend/service/BlendEraseService.d.ts +0 -1
- package/src/Blend/service/BlendEraseService.js +0 -8
- package/src/Blend/service/BlendGetStateService.d.ts +0 -12
- package/src/Blend/service/BlendGetStateService.js +0 -13
- package/src/Blend/service/BlendOneZeroService.d.ts +0 -1
- package/src/Blend/service/BlendOneZeroService.js +0 -8
- package/src/Blend/service/BlendResetService.d.ts +0 -1
- package/src/Blend/service/BlendResetService.js +0 -8
- package/src/Blend/service/BlendScreenService.d.ts +0 -1
- package/src/Blend/service/BlendScreenService.js +0 -8
- package/src/Blend/service/BlendSetModeService.d.ts +0 -2
- package/src/Blend/service/BlendSetModeService.js +0 -4
- package/src/Blend/usecase/BlendOperationUseCase.d.ts +0 -11
- package/src/Blend/usecase/BlendOperationUseCase.js +0 -31
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +0 -9
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +0 -15
- package/src/Compute/ComputePipelineManager.d.ts +0 -61
- package/src/Compute/ComputePipelineManager.js +0 -313
- package/src/Compute/service/ComputeExecuteBlurService.d.ts +0 -21
- package/src/Compute/service/ComputeExecuteBlurService.js +0 -81
- package/src/Filter/BevelFilterShader.d.ts +0 -2
- package/src/Filter/BevelFilterShader.js +0 -107
- package/src/Filter/BitmapFilterShader.d.ts +0 -2
- package/src/Filter/BitmapFilterShader.js +0 -207
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +0 -40
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +0 -51
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +0 -25
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +0 -180
- package/src/Filter/BlurFilterShader.d.ts +0 -5
- package/src/Filter/BlurFilterShader.js +0 -109
- package/src/Filter/ColorMatrixFilterShader.d.ts +0 -4
- package/src/Filter/ColorMatrixFilterShader.js +0 -51
- package/src/Filter/ConvolutionFilterShader.d.ts +0 -2
- package/src/Filter/ConvolutionFilterShader.js +0 -115
- package/src/Filter/DisplacementMapFilterShader.d.ts +0 -2
- package/src/Filter/DisplacementMapFilterShader.js +0 -114
- package/src/Filter/DropShadowFilterShader.d.ts +0 -4
- package/src/Filter/DropShadowFilterShader.js +0 -93
- package/src/Filter/GlowFilterShader.d.ts +0 -4
- package/src/Filter/GlowFilterShader.js +0 -66
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +0 -11
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +0 -19
- package/src/Mask/usecase/MaskBindUseCase.d.ts +0 -10
- package/src/Mask/usecase/MaskBindUseCase.js +0 -20
- package/src/Mesh/service/MeshLerpService.d.ts +0 -13
- package/src/Mesh/service/MeshLerpService.js +0 -17
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +0 -14
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +0 -28
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +0 -18
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +0 -54
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +0 -11
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +0 -35
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +0 -13
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +0 -15
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +0 -15
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +0 -30
- package/src/SamplerCache.d.ts +0 -18
- package/src/SamplerCache.js +0 -61
- package/src/Shader/BlendModeShader.d.ts +0 -51
- package/src/Shader/BlendModeShader.js +0 -71
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +0 -12
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +0 -28
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +0 -13
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +0 -61
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +0 -19
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +0 -37
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +0 -11
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +0 -24
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +0 -14
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +0 -24
- package/src/Shader/wgsl/fragment/BlendFragment.d.ts +0 -8
- package/src/Shader/wgsl/fragment/BlendFragment.js +0 -63
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +0 -13
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +0 -30
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +0 -15
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +0 -26
- package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +0 -11
- package/src/TexturePool/service/TexturePoolEvictOldestService.js +0 -24
- package/src/interface/ICachedBindGroup.d.ts +0 -8
- package/src/interface/ICachedBindGroup.js +0 -1
- package/src/interface/IGradientLUTData.d.ts +0 -8
- package/src/interface/IGradientLUTData.js +0 -1
- package/src/interface/IPooledBuffer.d.ts +0 -8
- package/src/interface/IPooledBuffer.js +0 -1
- package/src/interface/IRectangleInfo.d.ts +0 -13
- package/src/interface/IRectangleInfo.js +0 -1
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* @description ブラーフィルターパラメータを計算
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @param
|
|
10
|
-
* @param
|
|
11
|
-
* @param
|
|
7
|
+
* Calculate blur filter parameters
|
|
8
|
+
*
|
|
9
|
+
* @param {Float32Array} matrix - 変換行列
|
|
10
|
+
* @param {number} blur_x - X方向のブラー量
|
|
11
|
+
* @param {number} blur_y - Y方向のブラー量
|
|
12
|
+
* @param {number} quality - クオリティ (1-15)
|
|
13
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
12
14
|
* @return {object}
|
|
13
15
|
*/
|
|
14
|
-
export declare const calculateBlurParams: (matrix: Float32Array,
|
|
16
|
+
export declare const calculateBlurParams: (matrix: Float32Array, blur_x: number, blur_y: number, quality: number, device_pixel_ratio: number) => {
|
|
15
17
|
baseBlurX: number;
|
|
16
18
|
baseBlurY: number;
|
|
17
19
|
offsetX: number;
|
|
@@ -21,13 +23,15 @@ export declare const calculateBlurParams: (matrix: Float32Array, blurX: number,
|
|
|
21
23
|
};
|
|
22
24
|
/**
|
|
23
25
|
* @description 方向ブラーのパラメータを計算
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @param
|
|
27
|
-
* @param
|
|
26
|
+
* Calculate directional blur parameters
|
|
27
|
+
*
|
|
28
|
+
* @param {boolean} is_horizontal - 水平方向かどうか
|
|
29
|
+
* @param {number} blur - ブラー量
|
|
30
|
+
* @param {number} texture_width - テクスチャ幅
|
|
31
|
+
* @param {number} texture_height - テクスチャ高さ
|
|
28
32
|
* @return {object}
|
|
29
33
|
*/
|
|
30
|
-
export declare const calculateDirectionalBlurParams: (
|
|
34
|
+
export declare const calculateDirectionalBlurParams: (is_horizontal: boolean, blur: number, texture_width: number, texture_height: number) => {
|
|
31
35
|
offsetX: number;
|
|
32
36
|
offsetY: number;
|
|
33
37
|
fraction: number;
|
|
@@ -5,23 +5,26 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @description ブラー計算用のステップ値
|
|
7
7
|
* Step values for blur calculation
|
|
8
|
+
* @type {number[]}
|
|
8
9
|
*/
|
|
9
|
-
const BLUR_STEP = [0.5, 1.05, 1.4, 1.55, 1.75, 1.9, 2, 2.15, 2.2, 2.3, 2.5, 3, 3, 3.5, 3.5];
|
|
10
|
+
const $BLUR_STEP = [0.5, 1.05, 1.4, 1.55, 1.75, 1.9, 2, 2.15, 2.2, 2.3, 2.5, 3, 3, 3.5, 3.5];
|
|
10
11
|
/**
|
|
11
12
|
* @description ブラーフィルターパラメータを計算
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* @param
|
|
15
|
-
* @param
|
|
16
|
-
* @param
|
|
13
|
+
* Calculate blur filter parameters
|
|
14
|
+
*
|
|
15
|
+
* @param {Float32Array} matrix - 変換行列
|
|
16
|
+
* @param {number} blur_x - X方向のブラー量
|
|
17
|
+
* @param {number} blur_y - Y方向のブラー量
|
|
18
|
+
* @param {number} quality - クオリティ (1-15)
|
|
19
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
17
20
|
* @return {object}
|
|
18
21
|
*/
|
|
19
|
-
export const calculateBlurParams = (matrix,
|
|
22
|
+
export const calculateBlurParams = (matrix, blur_x, blur_y, quality, device_pixel_ratio) => {
|
|
20
23
|
const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
|
|
21
24
|
const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
|
|
22
|
-
const baseBlurX =
|
|
23
|
-
const baseBlurY =
|
|
24
|
-
const step = BLUR_STEP[Math.min(quality - 1, BLUR_STEP.length - 1)];
|
|
25
|
+
const baseBlurX = blur_x * (xScale / device_pixel_ratio);
|
|
26
|
+
const baseBlurY = blur_y * (yScale / device_pixel_ratio);
|
|
27
|
+
const step = $BLUR_STEP[Math.min(quality - 1, $BLUR_STEP.length - 1)];
|
|
25
28
|
const offsetX = Math.round(baseBlurX * step);
|
|
26
29
|
const offsetY = Math.round(baseBlurY * step);
|
|
27
30
|
// バッファスケールを計算(大きなブラーの場合はダウンスケール)
|
|
@@ -62,19 +65,21 @@ export const calculateBlurParams = (matrix, blurX, blurY, quality, devicePixelRa
|
|
|
62
65
|
};
|
|
63
66
|
/**
|
|
64
67
|
* @description 方向ブラーのパラメータを計算
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* @param
|
|
68
|
-
* @param
|
|
68
|
+
* Calculate directional blur parameters
|
|
69
|
+
*
|
|
70
|
+
* @param {boolean} is_horizontal - 水平方向かどうか
|
|
71
|
+
* @param {number} blur - ブラー量
|
|
72
|
+
* @param {number} texture_width - テクスチャ幅
|
|
73
|
+
* @param {number} texture_height - テクスチャ高さ
|
|
69
74
|
* @return {object}
|
|
70
75
|
*/
|
|
71
|
-
export const calculateDirectionalBlurParams = (
|
|
76
|
+
export const calculateDirectionalBlurParams = (is_horizontal, blur, texture_width, texture_height) => {
|
|
72
77
|
const halfBlur = Math.ceil(blur * 0.5);
|
|
73
78
|
const fraction = 1 - (halfBlur - blur * 0.5);
|
|
74
79
|
const samples = 1 + blur;
|
|
75
80
|
// テクセルオフセットを計算
|
|
76
|
-
const offsetX =
|
|
77
|
-
const offsetY =
|
|
81
|
+
const offsetX = is_horizontal ? 1 / texture_width : 0;
|
|
82
|
+
const offsetY = is_horizontal ? 0 : 1 / texture_height;
|
|
78
83
|
return {
|
|
79
84
|
offsetX,
|
|
80
85
|
offsetY,
|
|
@@ -4,9 +4,9 @@ import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
|
4
4
|
* @description カラーマトリックスフィルターを適用
|
|
5
5
|
* Apply color matrix filter
|
|
6
6
|
*
|
|
7
|
-
* @param {IAttachmentObject}
|
|
7
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
8
8
|
* @param {Float32Array} matrix - 4x5カラーマトリックス (20 floats)
|
|
9
9
|
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
10
10
|
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
11
11
|
*/
|
|
12
|
-
export declare const execute: (
|
|
12
|
+
export declare const execute: (source_attachment: IAttachmentObject, matrix: Float32Array, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -14,20 +14,20 @@ const $entries3 = [
|
|
|
14
14
|
* @description カラーマトリックスフィルターを適用
|
|
15
15
|
* Apply color matrix filter
|
|
16
16
|
*
|
|
17
|
-
* @param {IAttachmentObject}
|
|
17
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
18
18
|
* @param {Float32Array} matrix - 4x5カラーマトリックス (20 floats)
|
|
19
19
|
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
20
20
|
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
21
21
|
*/
|
|
22
|
-
export const execute = (
|
|
22
|
+
export const execute = (source_attachment, matrix, config) => {
|
|
23
23
|
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
24
24
|
// 出力アタッチメントを作成
|
|
25
|
-
const destAttachment = frameBufferManager.createTemporaryAttachment(
|
|
25
|
+
const destAttachment = frameBufferManager.createTemporaryAttachment(source_attachment.width, source_attachment.height);
|
|
26
26
|
const pipeline = pipelineManager.getPipeline("color_matrix_filter");
|
|
27
27
|
const bindGroupLayout = pipelineManager.getBindGroupLayout("color_matrix_filter");
|
|
28
28
|
if (!pipeline || !bindGroupLayout) {
|
|
29
29
|
console.error("[WebGPU ColorMatrixFilter] Pipeline not found");
|
|
30
|
-
return
|
|
30
|
+
return source_attachment;
|
|
31
31
|
}
|
|
32
32
|
// サンプラーを作成
|
|
33
33
|
const sampler = textureManager.createSampler("color_matrix_sampler", true);
|
|
@@ -73,7 +73,7 @@ export const execute = (sourceAttachment, matrix, config) => {
|
|
|
73
73
|
// バインドグループを作成
|
|
74
74
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
75
75
|
$entries3[1].resource = sampler;
|
|
76
|
-
$entries3[2].resource =
|
|
76
|
+
$entries3[2].resource = source_attachment.texture.view;
|
|
77
77
|
const bindGroup = device.createBindGroup({
|
|
78
78
|
"layout": bindGroupLayout,
|
|
79
79
|
"entries": $entries3
|
|
@@ -2,5 +2,19 @@ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
|
2
2
|
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
3
|
/**
|
|
4
4
|
* @description コンボリューションフィルターを適用
|
|
5
|
+
* Apply convolution filter
|
|
6
|
+
*
|
|
7
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
8
|
+
* @param {number} matrix_x - マトリックスのX方向サイズ
|
|
9
|
+
* @param {number} matrix_y - マトリックスのY方向サイズ
|
|
10
|
+
* @param {Float32Array} matrix - コンボリューションマトリックス
|
|
11
|
+
* @param {number} divisor - 除算値
|
|
12
|
+
* @param {number} bias - バイアス値
|
|
13
|
+
* @param {boolean} preserve_alpha - アルファ値を保持するか
|
|
14
|
+
* @param {boolean} clamp - クランプするか
|
|
15
|
+
* @param {number} color - 代替色 (32bit整数)
|
|
16
|
+
* @param {number} alpha - アルファ値
|
|
17
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
18
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
5
19
|
*/
|
|
6
|
-
export declare const execute: (
|
|
20
|
+
export declare const execute: (source_attachment: IAttachmentObject, matrix_x: number, matrix_y: number, matrix: Float32Array, divisor: number, bias: number, preserve_alpha: boolean, clamp: boolean, color: number, alpha: number, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ShaderSource } from "../../Shader/ShaderSource";
|
|
2
|
+
import { intToStraightRGBA } from "../FilterUtil";
|
|
2
3
|
/**
|
|
3
4
|
* @description プリアロケートされたBindGroupEntry配列 (バインディング3つ)
|
|
4
5
|
*/
|
|
@@ -7,33 +8,38 @@ const $entries3 = [
|
|
|
7
8
|
{ "binding": 1, "resource": null },
|
|
8
9
|
{ "binding": 2, "resource": null }
|
|
9
10
|
];
|
|
10
|
-
/**
|
|
11
|
-
* @description 32bit整数からRGB値を抽出
|
|
12
|
-
*/
|
|
13
|
-
const intToRGBA = (color, alpha) => {
|
|
14
|
-
const r = (color >> 16 & 0xFF) / 255;
|
|
15
|
-
const g = (color >> 8 & 0xFF) / 255;
|
|
16
|
-
const b = (color & 0xFF) / 255;
|
|
17
|
-
return [r, g, b, alpha];
|
|
18
|
-
};
|
|
19
11
|
/**
|
|
20
12
|
* @description パイプラインキャッシュ(キー: matrixX,matrixY,preserveAlpha,clamp)
|
|
21
13
|
*/
|
|
22
14
|
const $pipelineCache = new Map();
|
|
23
15
|
/**
|
|
24
16
|
* @description コンボリューションフィルターを適用
|
|
17
|
+
* Apply convolution filter
|
|
18
|
+
*
|
|
19
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
20
|
+
* @param {number} matrix_x - マトリックスのX方向サイズ
|
|
21
|
+
* @param {number} matrix_y - マトリックスのY方向サイズ
|
|
22
|
+
* @param {Float32Array} matrix - コンボリューションマトリックス
|
|
23
|
+
* @param {number} divisor - 除算値
|
|
24
|
+
* @param {number} bias - バイアス値
|
|
25
|
+
* @param {boolean} preserve_alpha - アルファ値を保持するか
|
|
26
|
+
* @param {boolean} clamp - クランプするか
|
|
27
|
+
* @param {number} color - 代替色 (32bit整数)
|
|
28
|
+
* @param {number} alpha - アルファ値
|
|
29
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
30
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
25
31
|
*/
|
|
26
|
-
export const execute = (
|
|
32
|
+
export const execute = (source_attachment, matrix_x, matrix_y, matrix, divisor, bias, preserve_alpha, clamp, color, alpha, config) => {
|
|
27
33
|
const { device, commandEncoder, frameBufferManager, textureManager } = config;
|
|
28
|
-
const width =
|
|
29
|
-
const height =
|
|
34
|
+
const width = source_attachment.width;
|
|
35
|
+
const height = source_attachment.height;
|
|
30
36
|
// 出力アタッチメントを作成
|
|
31
37
|
const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
|
|
32
38
|
// パイプラインをキャッシュから取得または作成
|
|
33
|
-
const cacheKey = `${
|
|
39
|
+
const cacheKey = `${matrix_x},${matrix_y},${preserve_alpha},${clamp}`;
|
|
34
40
|
let cached = $pipelineCache.get(cacheKey);
|
|
35
41
|
if (!cached) {
|
|
36
|
-
const shaderCode = ShaderSource.getConvolutionFilterFragmentShader(
|
|
42
|
+
const shaderCode = ShaderSource.getConvolutionFilterFragmentShader(matrix_x, matrix_y, preserve_alpha, clamp);
|
|
37
43
|
const shaderModule = device.createShaderModule({ "code": shaderCode });
|
|
38
44
|
const bindGroupLayout = device.createBindGroupLayout({
|
|
39
45
|
"entries": [
|
|
@@ -94,9 +100,9 @@ export const execute = (sourceAttachment, matrixX, matrixY, matrix, divisor, bia
|
|
|
94
100
|
// サンプラーを作成
|
|
95
101
|
const sampler = textureManager.createSampler("convolution_sampler", true);
|
|
96
102
|
// ユニフォームバッファを作成
|
|
97
|
-
const matrixSize =
|
|
103
|
+
const matrixSize = matrix_x * matrix_y;
|
|
98
104
|
const matrixArraySize = Math.ceil(matrixSize / 4);
|
|
99
|
-
const [r, g, b, a] =
|
|
105
|
+
const [r, g, b, a] = intToStraightRGBA(color, alpha);
|
|
100
106
|
// マトリクスを4要素ごとにまとめる
|
|
101
107
|
const paddedMatrix = new Float32Array(matrixArraySize * 4);
|
|
102
108
|
for (let i = 0; i < matrixSize; i++) {
|
|
@@ -128,7 +134,7 @@ export const execute = (sourceAttachment, matrixX, matrixY, matrix, divisor, bia
|
|
|
128
134
|
// バインドグループを作成
|
|
129
135
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
130
136
|
$entries3[1].resource = sampler;
|
|
131
|
-
$entries3[2].resource =
|
|
137
|
+
$entries3[2].resource = source_attachment.texture.view;
|
|
132
138
|
const bindGroup = device.createBindGroup({
|
|
133
139
|
"layout": cached.bindGroupLayout,
|
|
134
140
|
"entries": $entries3
|
|
@@ -2,5 +2,24 @@ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
|
2
2
|
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
3
|
/**
|
|
4
4
|
* @description ディスプレイスメントマップフィルターを適用
|
|
5
|
+
* Apply displacement map filter
|
|
6
|
+
*
|
|
7
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
8
|
+
* @param {Float32Array} _matrix - 変換行列(未使用)
|
|
9
|
+
* @param {Uint8Array} bitmap_buffer - ビットマップバッファ
|
|
10
|
+
* @param {number} bitmap_width - ビットマップ幅
|
|
11
|
+
* @param {number} bitmap_height - ビットマップ高さ
|
|
12
|
+
* @param {number} map_point_x - マップポイントX座標
|
|
13
|
+
* @param {number} map_point_y - マップポイントY座標
|
|
14
|
+
* @param {number} component_x - X方向コンポーネント
|
|
15
|
+
* @param {number} component_y - Y方向コンポーネント
|
|
16
|
+
* @param {number} scale_x - X方向スケール
|
|
17
|
+
* @param {number} scale_y - Y方向スケール
|
|
18
|
+
* @param {number} mode - ディスプレイスメントモード
|
|
19
|
+
* @param {number} color - 代替色 (32bit整数)
|
|
20
|
+
* @param {number} alpha - アルファ値
|
|
21
|
+
* @param {number} _device_pixel_ratio - デバイスピクセル比(未使用)
|
|
22
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
23
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
5
24
|
*/
|
|
6
|
-
export declare const execute: (
|
|
25
|
+
export declare const execute: (source_attachment: IAttachmentObject, _matrix: Float32Array, bitmap_buffer: Uint8Array, bitmap_width: number, bitmap_height: number, map_point_x: number, map_point_y: number, component_x: number, component_y: number, scale_x: number, scale_y: number, mode: number, color: number, alpha: number, _device_pixel_ratio: number, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ShaderSource } from "../../Shader/ShaderSource";
|
|
2
|
+
import { intToPremultipliedRGBA } from "../FilterUtil";
|
|
2
3
|
/**
|
|
3
4
|
* @description プリアロケートされたFloat32Array (サイズ12: 最大48バイト)
|
|
4
5
|
*/
|
|
@@ -12,43 +13,53 @@ const $entries4 = [
|
|
|
12
13
|
{ "binding": 2, "resource": null },
|
|
13
14
|
{ "binding": 3, "resource": null }
|
|
14
15
|
];
|
|
15
|
-
/**
|
|
16
|
-
* @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ)
|
|
17
|
-
*/
|
|
18
|
-
const intToRGBA = (color, alpha) => {
|
|
19
|
-
const r = (color >> 16 & 0xFF) / 255 * alpha;
|
|
20
|
-
const g = (color >> 8 & 0xFF) / 255 * alpha;
|
|
21
|
-
const b = (color & 0xFF) / 255 * alpha;
|
|
22
|
-
return [r, g, b, alpha];
|
|
23
|
-
};
|
|
24
16
|
/**
|
|
25
17
|
* @description パイプラインキャッシュ(キー: componentX,componentY,mode)
|
|
26
18
|
*/
|
|
27
19
|
const $pipelineCache = new Map();
|
|
28
20
|
/**
|
|
29
21
|
* @description ディスプレイスメントマップフィルターを適用
|
|
22
|
+
* Apply displacement map filter
|
|
23
|
+
*
|
|
24
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
25
|
+
* @param {Float32Array} _matrix - 変換行列(未使用)
|
|
26
|
+
* @param {Uint8Array} bitmap_buffer - ビットマップバッファ
|
|
27
|
+
* @param {number} bitmap_width - ビットマップ幅
|
|
28
|
+
* @param {number} bitmap_height - ビットマップ高さ
|
|
29
|
+
* @param {number} map_point_x - マップポイントX座標
|
|
30
|
+
* @param {number} map_point_y - マップポイントY座標
|
|
31
|
+
* @param {number} component_x - X方向コンポーネント
|
|
32
|
+
* @param {number} component_y - Y方向コンポーネント
|
|
33
|
+
* @param {number} scale_x - X方向スケール
|
|
34
|
+
* @param {number} scale_y - Y方向スケール
|
|
35
|
+
* @param {number} mode - ディスプレイスメントモード
|
|
36
|
+
* @param {number} color - 代替色 (32bit整数)
|
|
37
|
+
* @param {number} alpha - アルファ値
|
|
38
|
+
* @param {number} _device_pixel_ratio - デバイスピクセル比(未使用)
|
|
39
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
40
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
30
41
|
*/
|
|
31
|
-
export const execute = (
|
|
42
|
+
export const execute = (source_attachment, _matrix, bitmap_buffer, bitmap_width, bitmap_height, map_point_x, map_point_y, component_x, component_y, scale_x, scale_y, mode, color, alpha, _device_pixel_ratio, config) => {
|
|
32
43
|
const { device, commandEncoder, frameBufferManager, textureManager } = config;
|
|
33
|
-
const width =
|
|
34
|
-
const height =
|
|
44
|
+
const width = source_attachment.width;
|
|
45
|
+
const height = source_attachment.height;
|
|
35
46
|
// WebGL版と同じ: baseWidth/baseHeightはビットマップサイズを使用
|
|
36
|
-
const baseWidth =
|
|
37
|
-
const baseHeight =
|
|
47
|
+
const baseWidth = bitmap_width;
|
|
48
|
+
const baseHeight = bitmap_height;
|
|
38
49
|
// 出力アタッチメントを作成
|
|
39
50
|
const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
|
|
40
51
|
// マップテクスチャを作成
|
|
41
52
|
const mapTexture = device.createTexture({
|
|
42
|
-
"size": { "width":
|
|
53
|
+
"size": { "width": bitmap_width, "height": bitmap_height },
|
|
43
54
|
"format": "rgba8unorm",
|
|
44
55
|
"usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
|
|
45
56
|
});
|
|
46
|
-
device.queue.writeTexture({ "texture": mapTexture },
|
|
57
|
+
device.queue.writeTexture({ "texture": mapTexture }, bitmap_buffer.buffer, { "bytesPerRow": bitmap_width * 4, "offset": bitmap_buffer.byteOffset }, { "width": bitmap_width, "height": bitmap_height });
|
|
47
58
|
// パイプラインをキャッシュから取得または作成
|
|
48
|
-
const cacheKey = `${
|
|
59
|
+
const cacheKey = `${component_x},${component_y},${mode}`;
|
|
49
60
|
let cached = $pipelineCache.get(cacheKey);
|
|
50
61
|
if (!cached) {
|
|
51
|
-
const fragmentShaderCode = ShaderSource.getDisplacementMapFilterFragmentShader(
|
|
62
|
+
const fragmentShaderCode = ShaderSource.getDisplacementMapFilterFragmentShader(component_x, component_y, mode);
|
|
52
63
|
const vertexShaderModule = device.createShaderModule({
|
|
53
64
|
"code": ShaderSource.getBlurFilterVertexShader()
|
|
54
65
|
});
|
|
@@ -122,20 +133,20 @@ export const execute = (sourceAttachment, _matrix, bitmapBuffer, bitmapWidth, bi
|
|
|
122
133
|
const needsSubstituteColor = mode === 1;
|
|
123
134
|
const uniformSize = needsSubstituteColor ? 48 : 32;
|
|
124
135
|
// uvToStScale
|
|
125
|
-
$uniform12[0] = baseWidth /
|
|
126
|
-
$uniform12[1] = baseHeight /
|
|
136
|
+
$uniform12[0] = baseWidth / bitmap_width;
|
|
137
|
+
$uniform12[1] = baseHeight / bitmap_height;
|
|
127
138
|
// uvToStOffset
|
|
128
|
-
$uniform12[2] =
|
|
129
|
-
$uniform12[3] = (baseHeight -
|
|
139
|
+
$uniform12[2] = map_point_x / bitmap_width;
|
|
140
|
+
$uniform12[3] = (baseHeight - bitmap_height - map_point_y) / bitmap_height;
|
|
130
141
|
// scale
|
|
131
|
-
$uniform12[4] =
|
|
132
|
-
$uniform12[5] =
|
|
142
|
+
$uniform12[4] = scale_x / baseWidth;
|
|
143
|
+
$uniform12[5] = scale_y / baseHeight;
|
|
133
144
|
// padding
|
|
134
145
|
$uniform12[6] = 0;
|
|
135
146
|
$uniform12[7] = 0;
|
|
136
147
|
// substituteColor (mode === 1 の場合)
|
|
137
148
|
if (needsSubstituteColor) {
|
|
138
|
-
const [r, g, b, a] =
|
|
149
|
+
const [r, g, b, a] = intToPremultipliedRGBA(color, alpha);
|
|
139
150
|
$uniform12[8] = r;
|
|
140
151
|
$uniform12[9] = g;
|
|
141
152
|
$uniform12[10] = b;
|
|
@@ -153,7 +164,7 @@ export const execute = (sourceAttachment, _matrix, bitmapBuffer, bitmapWidth, bi
|
|
|
153
164
|
// バインドグループを作成
|
|
154
165
|
$entries4[0].resource.buffer = uniformBuffer;
|
|
155
166
|
$entries4[1].resource = sampler;
|
|
156
|
-
$entries4[2].resource =
|
|
167
|
+
$entries4[2].resource = source_attachment.texture.view;
|
|
157
168
|
$entries4[3].resource = mapTexture.createView();
|
|
158
169
|
const bindGroup = device.createBindGroup({
|
|
159
170
|
"layout": cached.bindGroupLayout,
|
|
@@ -4,21 +4,21 @@ import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
|
4
4
|
* @description ドロップシャドウフィルターを適用
|
|
5
5
|
* Apply drop shadow filter
|
|
6
6
|
*
|
|
7
|
-
* @param {IAttachmentObject}
|
|
7
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ
|
|
8
8
|
* @param {Float32Array} matrix - 変換行列
|
|
9
9
|
* @param {number} distance - シャドウの距離
|
|
10
10
|
* @param {number} angle - シャドウの角度(度)
|
|
11
11
|
* @param {number} color - シャドウ色 (32bit整数)
|
|
12
12
|
* @param {number} alpha - アルファ
|
|
13
|
-
* @param {number}
|
|
14
|
-
* @param {number}
|
|
13
|
+
* @param {number} blur_x - X方向ブラー量
|
|
14
|
+
* @param {number} blur_y - Y方向ブラー量
|
|
15
15
|
* @param {number} strength - シャドウ強度
|
|
16
16
|
* @param {number} quality - クオリティ
|
|
17
17
|
* @param {boolean} inner - インナーシャドウ
|
|
18
18
|
* @param {boolean} knockout - ノックアウトモード
|
|
19
|
-
* @param {boolean}
|
|
20
|
-
* @param {number}
|
|
21
|
-
* @param {
|
|
19
|
+
* @param {boolean} hide_object - 元オブジェクトを隠す
|
|
20
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
21
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
22
22
|
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
23
23
|
*/
|
|
24
|
-
export declare const execute: (
|
|
24
|
+
export declare const execute: (source_attachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, color: number, alpha: number, blur_x: number, blur_y: number, strength: number, quality: number, inner: boolean, knockout: boolean, hide_object: boolean, device_pixel_ratio: number, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { $offset } from "../FilterOffset";
|
|
2
|
+
import { DEG_TO_RAD, intToPremultipliedRGBA } from "../FilterUtil";
|
|
2
3
|
import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
|
|
3
|
-
/**
|
|
4
|
-
* @description 度からラジアンへの変換係数
|
|
5
|
-
*/
|
|
6
|
-
const DEG_TO_RAD = Math.PI / 180;
|
|
7
4
|
/**
|
|
8
5
|
* @description プリアロケートされたFloat32Array (サイズ16)
|
|
9
6
|
*/
|
|
@@ -17,45 +14,36 @@ const $entries4 = [
|
|
|
17
14
|
{ "binding": 2, "resource": null },
|
|
18
15
|
{ "binding": 3, "resource": null }
|
|
19
16
|
];
|
|
20
|
-
/**
|
|
21
|
-
* @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ対応)
|
|
22
|
-
*/
|
|
23
|
-
const intToRGBA = (color, alpha) => {
|
|
24
|
-
const r = (color >> 16 & 0xFF) / 255 * alpha;
|
|
25
|
-
const g = (color >> 8 & 0xFF) / 255 * alpha;
|
|
26
|
-
const b = (color & 0xFF) / 255 * alpha;
|
|
27
|
-
return [r, g, b, alpha];
|
|
28
|
-
};
|
|
29
17
|
/**
|
|
30
18
|
* @description ドロップシャドウフィルターを適用
|
|
31
19
|
* Apply drop shadow filter
|
|
32
20
|
*
|
|
33
|
-
* @param {IAttachmentObject}
|
|
21
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ
|
|
34
22
|
* @param {Float32Array} matrix - 変換行列
|
|
35
23
|
* @param {number} distance - シャドウの距離
|
|
36
24
|
* @param {number} angle - シャドウの角度(度)
|
|
37
25
|
* @param {number} color - シャドウ色 (32bit整数)
|
|
38
26
|
* @param {number} alpha - アルファ
|
|
39
|
-
* @param {number}
|
|
40
|
-
* @param {number}
|
|
27
|
+
* @param {number} blur_x - X方向ブラー量
|
|
28
|
+
* @param {number} blur_y - Y方向ブラー量
|
|
41
29
|
* @param {number} strength - シャドウ強度
|
|
42
30
|
* @param {number} quality - クオリティ
|
|
43
31
|
* @param {boolean} inner - インナーシャドウ
|
|
44
32
|
* @param {boolean} knockout - ノックアウトモード
|
|
45
|
-
* @param {boolean}
|
|
46
|
-
* @param {number}
|
|
47
|
-
* @param {
|
|
33
|
+
* @param {boolean} hide_object - 元オブジェクトを隠す
|
|
34
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
35
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
48
36
|
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
49
37
|
*/
|
|
50
|
-
export const execute = (
|
|
38
|
+
export const execute = (source_attachment, matrix, distance, angle, color, alpha, blur_x, blur_y, strength, quality, inner, knockout, hide_object, device_pixel_ratio, config) => {
|
|
51
39
|
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
52
40
|
// 元のオフセットを保存
|
|
53
41
|
const baseOffsetX = $offset.x;
|
|
54
42
|
const baseOffsetY = $offset.y;
|
|
55
|
-
const baseWidth =
|
|
56
|
-
const baseHeight =
|
|
43
|
+
const baseWidth = source_attachment.width;
|
|
44
|
+
const baseHeight = source_attachment.height;
|
|
57
45
|
// ブラーフィルターを適用
|
|
58
|
-
const blurAttachment = filterApplyBlurFilterUseCase(
|
|
46
|
+
const blurAttachment = filterApplyBlurFilterUseCase(source_attachment, matrix, blur_x, blur_y, quality, device_pixel_ratio, config);
|
|
59
47
|
const blurWidth = blurAttachment.width;
|
|
60
48
|
const blurHeight = blurAttachment.height;
|
|
61
49
|
const blurOffsetX = $offset.x;
|
|
@@ -67,8 +55,8 @@ export const execute = (sourceAttachment, matrix, distance, angle, color, alpha,
|
|
|
67
55
|
const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
|
|
68
56
|
// シャドウのオフセットを計算
|
|
69
57
|
const radian = angle * DEG_TO_RAD;
|
|
70
|
-
const shadowX = Math.cos(radian) * distance * (xScale /
|
|
71
|
-
const shadowY = Math.sin(radian) * distance * (yScale /
|
|
58
|
+
const shadowX = Math.cos(radian) * distance * (xScale / device_pixel_ratio);
|
|
59
|
+
const shadowY = Math.sin(radian) * distance * (yScale / device_pixel_ratio);
|
|
72
60
|
// 出力キャンバスのサイズを計算
|
|
73
61
|
const w = inner ? baseWidth : blurWidth + Math.max(0, Math.abs(shadowX) - offsetDiffX);
|
|
74
62
|
const h = inner ? baseHeight : blurHeight + Math.max(0, Math.abs(shadowY) - offsetDiffY);
|
|
@@ -86,11 +74,11 @@ export const execute = (sourceAttachment, matrix, distance, angle, color, alpha,
|
|
|
86
74
|
// タイプとノックアウト状態を決定
|
|
87
75
|
const isInner = inner;
|
|
88
76
|
let isKnockout = knockout;
|
|
89
|
-
let isHideObject =
|
|
77
|
+
let isHideObject = hide_object;
|
|
90
78
|
if (inner) {
|
|
91
|
-
isKnockout = knockout ||
|
|
79
|
+
isKnockout = knockout || hide_object;
|
|
92
80
|
}
|
|
93
|
-
else if (!knockout &&
|
|
81
|
+
else if (!knockout && hide_object) {
|
|
94
82
|
// フルモード(シャドウのみ表示)
|
|
95
83
|
isKnockout = true;
|
|
96
84
|
isHideObject = true;
|
|
@@ -104,7 +92,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, color, alpha,
|
|
|
104
92
|
if (!pipeline || !bindGroupLayout) {
|
|
105
93
|
console.error("[WebGPU DropShadowFilter] Pipeline not found");
|
|
106
94
|
frameBufferManager.releaseTemporaryAttachment(blurAttachment);
|
|
107
|
-
return
|
|
95
|
+
return source_attachment;
|
|
108
96
|
}
|
|
109
97
|
// サンプラーを作成
|
|
110
98
|
const sampler = textureManager.createSampler("drop_shadow_sampler", true);
|
|
@@ -119,7 +107,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, color, alpha,
|
|
|
119
107
|
// knockout: f32 (4 bytes)
|
|
120
108
|
// hideObject: f32 (4 bytes)
|
|
121
109
|
// Total: 64 bytes
|
|
122
|
-
const [r, g, b, a] =
|
|
110
|
+
const [r, g, b, a] = intToPremultipliedRGBA(color, alpha);
|
|
123
111
|
// WebGL版と同じUV変換方式:
|
|
124
112
|
// uv = texCoord * scale - offset
|
|
125
113
|
// WebGPU: texCoord.y=0がトップ、テクスチャY=0がトップ(Y-flip補正済み)
|
|
@@ -161,7 +149,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, color, alpha,
|
|
|
161
149
|
$entries4[0].resource.buffer = uniformBuffer;
|
|
162
150
|
$entries4[1].resource = sampler;
|
|
163
151
|
$entries4[2].resource = blurAttachment.texture.view;
|
|
164
|
-
$entries4[3].resource =
|
|
152
|
+
$entries4[3].resource = source_attachment.texture.view;
|
|
165
153
|
const bindGroup = device.createBindGroup({
|
|
166
154
|
"layout": bindGroupLayout,
|
|
167
155
|
"entries": $entries4
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 度数法からラジアンへの変換係数
|
|
3
|
+
* Conversion factor from degrees to radians
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEG_TO_RAD: number;
|
|
6
|
+
/**
|
|
7
|
+
* @description 32bit整数カラーからプリマルチプライドアルファRGBA値を抽出
|
|
8
|
+
* Extract premultiplied alpha RGBA values from 32bit integer color
|
|
9
|
+
*
|
|
10
|
+
* @param {number} color - 32bit整数カラー値
|
|
11
|
+
* @param {number} alpha - アルファ値 (0-1)
|
|
12
|
+
* @return {[number, number, number, number]} - [r, g, b, a] (プリマルチプライドアルファ)
|
|
13
|
+
*/
|
|
14
|
+
export declare const intToPremultipliedRGBA: (color: number, alpha: number) => [number, number, number, number];
|
|
15
|
+
/**
|
|
16
|
+
* @description 32bit整数カラーからストレートRGBA値を抽出
|
|
17
|
+
* Extract straight (non-premultiplied) RGBA values from 32bit integer color
|
|
18
|
+
*
|
|
19
|
+
* @param {number} color - 32bit整数カラー値
|
|
20
|
+
* @param {number} alpha - アルファ値 (0-1)
|
|
21
|
+
* @return {[number, number, number, number]} - [r, g, b, a] (ストレート)
|
|
22
|
+
*/
|
|
23
|
+
export declare const intToStraightRGBA: (color: number, alpha: number) => [number, number, number, number];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description 度数法からラジアンへの変換係数
|
|
3
|
+
* Conversion factor from degrees to radians
|
|
4
|
+
*/
|
|
5
|
+
export const DEG_TO_RAD = Math.PI / 180;
|
|
6
|
+
/**
|
|
7
|
+
* @description 32bit整数カラーからプリマルチプライドアルファRGBA値を抽出
|
|
8
|
+
* Extract premultiplied alpha RGBA values from 32bit integer color
|
|
9
|
+
*
|
|
10
|
+
* @param {number} color - 32bit整数カラー値
|
|
11
|
+
* @param {number} alpha - アルファ値 (0-1)
|
|
12
|
+
* @return {[number, number, number, number]} - [r, g, b, a] (プリマルチプライドアルファ)
|
|
13
|
+
*/
|
|
14
|
+
export const intToPremultipliedRGBA = (color, alpha) => {
|
|
15
|
+
const r = (color >> 16 & 0xFF) / 255 * alpha;
|
|
16
|
+
const g = (color >> 8 & 0xFF) / 255 * alpha;
|
|
17
|
+
const b = (color & 0xFF) / 255 * alpha;
|
|
18
|
+
return [r, g, b, alpha];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* @description 32bit整数カラーからストレートRGBA値を抽出
|
|
22
|
+
* Extract straight (non-premultiplied) RGBA values from 32bit integer color
|
|
23
|
+
*
|
|
24
|
+
* @param {number} color - 32bit整数カラー値
|
|
25
|
+
* @param {number} alpha - アルファ値 (0-1)
|
|
26
|
+
* @return {[number, number, number, number]} - [r, g, b, a] (ストレート)
|
|
27
|
+
*/
|
|
28
|
+
export const intToStraightRGBA = (color, alpha) => {
|
|
29
|
+
const r = (color >> 16 & 0xFF) / 255;
|
|
30
|
+
const g = (color >> 8 & 0xFF) / 255;
|
|
31
|
+
const b = (color & 0xFF) / 255;
|
|
32
|
+
return [r, g, b, alpha];
|
|
33
|
+
};
|