@next2d/webgpu 3.0.5 → 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
package/src/FillTexturePool.d.ts
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description キャッシュからビューを取得、なければ生成してキャッシュに保存
|
|
3
|
+
* Get view from cache, or create and cache a new one
|
|
4
|
+
* @param {GPUTexture} texture
|
|
5
|
+
* @return {GPUTextureView}
|
|
6
|
+
*/
|
|
1
7
|
export declare const $getOrCreateView: (texture: GPUTexture) => GPUTextureView;
|
|
8
|
+
/**
|
|
9
|
+
* @description プールから塗りテクスチャを取得、なければ新規作成
|
|
10
|
+
* Acquire a fill texture from the pool, or create a new one
|
|
11
|
+
* @param {GPUDevice} device
|
|
12
|
+
* @param {number} width
|
|
13
|
+
* @param {number} height
|
|
14
|
+
* @return {GPUTexture}
|
|
15
|
+
*/
|
|
2
16
|
export declare const $acquireFillTexture: (device: GPUDevice, width: number, height: number) => GPUTexture;
|
|
17
|
+
/**
|
|
18
|
+
* @description 塗りテクスチャをプールに返却
|
|
19
|
+
* Release a fill texture back to the pool
|
|
20
|
+
* @param {GPUTexture} texture
|
|
21
|
+
* @return {void}
|
|
22
|
+
*/
|
|
3
23
|
export declare const $releaseFillTexture: (texture: GPUTexture) => void;
|
|
24
|
+
/**
|
|
25
|
+
* @description プールからレンダーテクスチャを取得、なければ新規作成
|
|
26
|
+
* Acquire a render texture from the pool, or create a new one
|
|
27
|
+
* @param {GPUDevice} device
|
|
28
|
+
* @param {number} width
|
|
29
|
+
* @param {number} height
|
|
30
|
+
* @return {GPUTexture}
|
|
31
|
+
*/
|
|
4
32
|
export declare const $acquireRenderTexture: (device: GPUDevice, width: number, height: number) => GPUTexture;
|
|
33
|
+
/**
|
|
34
|
+
* @description レンダーテクスチャをプールに返却
|
|
35
|
+
* Release a render texture back to the pool
|
|
36
|
+
* @param {GPUTexture} texture
|
|
37
|
+
* @return {void}
|
|
38
|
+
*/
|
|
5
39
|
export declare const $releaseRenderTexture: (texture: GPUTexture) => void;
|
|
40
|
+
/**
|
|
41
|
+
* @description 全テクスチャプールを破棄してクリア
|
|
42
|
+
* Destroy and clear all texture pools
|
|
43
|
+
* @return {void}
|
|
44
|
+
*/
|
|
6
45
|
export declare const $clearFillTexturePool: () => void;
|
package/src/FillTexturePool.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @description GPUTexture → GPUTextureView キャッシュ(createView()呼び出し削減)
|
|
3
|
+
* GPUTexture to GPUTextureView cache to reduce createView() calls
|
|
4
|
+
* @type {WeakMap<GPUTexture, GPUTextureView>}
|
|
5
|
+
*/
|
|
2
6
|
const $viewCache = new WeakMap();
|
|
7
|
+
/**
|
|
8
|
+
* @description キャッシュからビューを取得、なければ生成してキャッシュに保存
|
|
9
|
+
* Get view from cache, or create and cache a new one
|
|
10
|
+
* @param {GPUTexture} texture
|
|
11
|
+
* @return {GPUTextureView}
|
|
12
|
+
*/
|
|
3
13
|
export const $getOrCreateView = (texture) => {
|
|
4
14
|
let view = $viewCache.get(texture);
|
|
5
15
|
if (!view) {
|
|
@@ -8,12 +18,40 @@ export const $getOrCreateView = (texture) => {
|
|
|
8
18
|
}
|
|
9
19
|
return view;
|
|
10
20
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
21
|
+
/**
|
|
22
|
+
* @description 塗りテクスチャ用のGPUTextureUsageフラグ
|
|
23
|
+
* GPUTextureUsage flags for fill textures
|
|
24
|
+
* TEXTURE_BINDING(0x04) | COPY_DST(0x02) = 0x06
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
27
|
+
const $FILL_TEXTURE_USAGE = 0x06;
|
|
28
|
+
/**
|
|
29
|
+
* @description レンダーテクスチャ用のGPUTextureUsageフラグ
|
|
30
|
+
* GPUTextureUsage flags for render textures
|
|
31
|
+
* TEXTURE_BINDING(0x04) | COPY_DST(0x02) | RENDER_ATTACHMENT(0x10) = 0x16
|
|
32
|
+
* @type {number}
|
|
33
|
+
*/
|
|
34
|
+
const $RENDER_TEXTURE_USAGE = 0x16;
|
|
35
|
+
/**
|
|
36
|
+
* @description 塗りテクスチャのオブジェクトプール
|
|
37
|
+
* Object pool for fill textures
|
|
38
|
+
* @type {Map<string, GPUTexture[]>}
|
|
39
|
+
*/
|
|
15
40
|
const $pool = new Map();
|
|
41
|
+
/**
|
|
42
|
+
* @description レンダーテクスチャのオブジェクトプール
|
|
43
|
+
* Object pool for render textures
|
|
44
|
+
* @type {Map<string, GPUTexture[]>}
|
|
45
|
+
*/
|
|
16
46
|
const $renderPool = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* @description プールから塗りテクスチャを取得、なければ新規作成
|
|
49
|
+
* Acquire a fill texture from the pool, or create a new one
|
|
50
|
+
* @param {GPUDevice} device
|
|
51
|
+
* @param {number} width
|
|
52
|
+
* @param {number} height
|
|
53
|
+
* @return {GPUTexture}
|
|
54
|
+
*/
|
|
17
55
|
export const $acquireFillTexture = (device, width, height) => {
|
|
18
56
|
const key = `${width}_${height}`;
|
|
19
57
|
const list = $pool.get(key);
|
|
@@ -23,9 +61,15 @@ export const $acquireFillTexture = (device, width, height) => {
|
|
|
23
61
|
return device.createTexture({
|
|
24
62
|
"size": { width, height },
|
|
25
63
|
"format": "rgba8unorm",
|
|
26
|
-
"usage": FILL_TEXTURE_USAGE
|
|
64
|
+
"usage": $FILL_TEXTURE_USAGE
|
|
27
65
|
});
|
|
28
66
|
};
|
|
67
|
+
/**
|
|
68
|
+
* @description 塗りテクスチャをプールに返却
|
|
69
|
+
* Release a fill texture back to the pool
|
|
70
|
+
* @param {GPUTexture} texture
|
|
71
|
+
* @return {void}
|
|
72
|
+
*/
|
|
29
73
|
export const $releaseFillTexture = (texture) => {
|
|
30
74
|
const key = `${texture.width}_${texture.height}`;
|
|
31
75
|
let list = $pool.get(key);
|
|
@@ -35,6 +79,14 @@ export const $releaseFillTexture = (texture) => {
|
|
|
35
79
|
}
|
|
36
80
|
list.push(texture);
|
|
37
81
|
};
|
|
82
|
+
/**
|
|
83
|
+
* @description プールからレンダーテクスチャを取得、なければ新規作成
|
|
84
|
+
* Acquire a render texture from the pool, or create a new one
|
|
85
|
+
* @param {GPUDevice} device
|
|
86
|
+
* @param {number} width
|
|
87
|
+
* @param {number} height
|
|
88
|
+
* @return {GPUTexture}
|
|
89
|
+
*/
|
|
38
90
|
export const $acquireRenderTexture = (device, width, height) => {
|
|
39
91
|
const key = `${width}_${height}`;
|
|
40
92
|
const list = $renderPool.get(key);
|
|
@@ -44,9 +96,15 @@ export const $acquireRenderTexture = (device, width, height) => {
|
|
|
44
96
|
return device.createTexture({
|
|
45
97
|
"size": { width, height },
|
|
46
98
|
"format": "rgba8unorm",
|
|
47
|
-
"usage": RENDER_TEXTURE_USAGE
|
|
99
|
+
"usage": $RENDER_TEXTURE_USAGE
|
|
48
100
|
});
|
|
49
101
|
};
|
|
102
|
+
/**
|
|
103
|
+
* @description レンダーテクスチャをプールに返却
|
|
104
|
+
* Release a render texture back to the pool
|
|
105
|
+
* @param {GPUTexture} texture
|
|
106
|
+
* @return {void}
|
|
107
|
+
*/
|
|
50
108
|
export const $releaseRenderTexture = (texture) => {
|
|
51
109
|
const key = `${texture.width}_${texture.height}`;
|
|
52
110
|
let list = $renderPool.get(key);
|
|
@@ -56,6 +114,11 @@ export const $releaseRenderTexture = (texture) => {
|
|
|
56
114
|
}
|
|
57
115
|
list.push(texture);
|
|
58
116
|
};
|
|
117
|
+
/**
|
|
118
|
+
* @description 全テクスチャプールを破棄してクリア
|
|
119
|
+
* Destroy and clear all texture pools
|
|
120
|
+
* @return {void}
|
|
121
|
+
*/
|
|
59
122
|
export const $clearFillTexturePool = () => {
|
|
60
123
|
for (const [, list] of $pool) {
|
|
61
124
|
for (const texture of list) {
|
|
@@ -2,9 +2,28 @@ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
|
2
2
|
import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
3
3
|
/**
|
|
4
4
|
* @description ベベルフィルターを適用
|
|
5
|
-
*
|
|
5
|
+
* Apply bevel filter
|
|
6
6
|
*
|
|
7
|
+
* WebGL版と同様に、erase前処理で差分テクスチャを作成してからブラーを適用
|
|
7
8
|
* UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
|
|
8
9
|
* 合成時のcopyTextureToTextureと一時テクスチャを使用しない最適化版。
|
|
10
|
+
*
|
|
11
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ
|
|
12
|
+
* @param {Float32Array} matrix - 変換行列
|
|
13
|
+
* @param {number} distance - ベベルの距離
|
|
14
|
+
* @param {number} angle - ベベルの角度(度)
|
|
15
|
+
* @param {number} highlight_color - ハイライト色 (32bit整数)
|
|
16
|
+
* @param {number} highlight_alpha - ハイライトアルファ
|
|
17
|
+
* @param {number} shadow_color - シャドウ色 (32bit整数)
|
|
18
|
+
* @param {number} shadow_alpha - シャドウアルファ
|
|
19
|
+
* @param {number} blur_x - X方向ブラー量
|
|
20
|
+
* @param {number} blur_y - 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} device_pixel_ratio - デバイスピクセル比
|
|
26
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
27
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
9
28
|
*/
|
|
10
|
-
export declare const execute: (
|
|
29
|
+
export declare const execute: (source_attachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, highlight_color: number, highlight_alpha: number, shadow_color: number, shadow_alpha: number, blur_x: number, blur_y: number, strength: number, quality: number, type: number, knockout: 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
|
|
9
6
|
*/
|
|
@@ -26,41 +23,51 @@ const $entries4 = [
|
|
|
26
23
|
{ "binding": 2, "resource": null },
|
|
27
24
|
{ "binding": 3, "resource": null }
|
|
28
25
|
];
|
|
29
|
-
/**
|
|
30
|
-
* @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ対応)
|
|
31
|
-
*/
|
|
32
|
-
const intToRGBA = (color, alpha) => {
|
|
33
|
-
const r = (color >> 16 & 0xFF) / 255 * alpha;
|
|
34
|
-
const g = (color >> 8 & 0xFF) / 255 * alpha;
|
|
35
|
-
const b = (color & 0xFF) / 255 * alpha;
|
|
36
|
-
return [r, g, b, alpha];
|
|
37
|
-
};
|
|
38
26
|
/**
|
|
39
27
|
* @description ベベルフィルターを適用
|
|
40
|
-
*
|
|
28
|
+
* Apply bevel filter
|
|
41
29
|
*
|
|
30
|
+
* WebGL版と同様に、erase前処理で差分テクスチャを作成してからブラーを適用
|
|
42
31
|
* UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
|
|
43
32
|
* 合成時のcopyTextureToTextureと一時テクスチャを使用しない最適化版。
|
|
33
|
+
*
|
|
34
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ
|
|
35
|
+
* @param {Float32Array} matrix - 変換行列
|
|
36
|
+
* @param {number} distance - ベベルの距離
|
|
37
|
+
* @param {number} angle - ベベルの角度(度)
|
|
38
|
+
* @param {number} highlight_color - ハイライト色 (32bit整数)
|
|
39
|
+
* @param {number} highlight_alpha - ハイライトアルファ
|
|
40
|
+
* @param {number} shadow_color - シャドウ色 (32bit整数)
|
|
41
|
+
* @param {number} shadow_alpha - シャドウアルファ
|
|
42
|
+
* @param {number} blur_x - X方向ブラー量
|
|
43
|
+
* @param {number} blur_y - Y方向ブラー量
|
|
44
|
+
* @param {number} strength - ベベル強度
|
|
45
|
+
* @param {number} quality - クオリティ
|
|
46
|
+
* @param {number} type - タイプ (0: full, 1: inner, 2: outer)
|
|
47
|
+
* @param {boolean} knockout - ノックアウトモード
|
|
48
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
49
|
+
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
50
|
+
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
44
51
|
*/
|
|
45
|
-
export const execute = (
|
|
52
|
+
export const execute = (source_attachment, matrix, distance, angle, highlight_color, highlight_alpha, shadow_color, shadow_alpha, blur_x, blur_y, strength, quality, type, knockout, device_pixel_ratio, config) => {
|
|
46
53
|
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
47
54
|
// 元のオフセットを保存
|
|
48
55
|
const baseOffsetX = $offset.x;
|
|
49
56
|
const baseOffsetY = $offset.y;
|
|
50
|
-
const baseWidth =
|
|
51
|
-
const baseHeight =
|
|
57
|
+
const baseWidth = source_attachment.width;
|
|
58
|
+
const baseHeight = source_attachment.height;
|
|
52
59
|
// スケールを計算
|
|
53
60
|
const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
|
|
54
61
|
const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
|
|
55
62
|
// オフセットを計算(WebGL版と同じ)
|
|
56
63
|
const radian = angle * DEG_TO_RAD;
|
|
57
|
-
const x = Math.cos(radian) * distance * (xScale /
|
|
58
|
-
const y = Math.sin(radian) * distance * (yScale /
|
|
64
|
+
const x = Math.cos(radian) * distance * (xScale / device_pixel_ratio);
|
|
65
|
+
const y = Math.sin(radian) * distance * (yScale / device_pixel_ratio);
|
|
59
66
|
// === Erase前処理:差分テクスチャを作成 ===
|
|
60
67
|
const eraseAttachment = frameBufferManager.createTemporaryAttachment(baseWidth, baseHeight);
|
|
61
68
|
// Step 1: ソーステクスチャを元の位置にコピー(erase前処理のcopyTextureToTextureは残す)
|
|
62
69
|
commandEncoder.copyTextureToTexture({
|
|
63
|
-
"texture":
|
|
70
|
+
"texture": source_attachment.texture.resource,
|
|
64
71
|
"origin": { "x": 0, "y": 0, "z": 0 }
|
|
65
72
|
}, {
|
|
66
73
|
"texture": eraseAttachment.texture.resource,
|
|
@@ -95,7 +102,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, highlightColo
|
|
|
95
102
|
}
|
|
96
103
|
$entries3[0].resource.buffer = eraseUniformBuffer;
|
|
97
104
|
$entries3[1].resource = eraseSampler;
|
|
98
|
-
$entries3[2].resource =
|
|
105
|
+
$entries3[2].resource = source_attachment.texture.view;
|
|
99
106
|
const eraseBindGroup = device.createBindGroup({
|
|
100
107
|
"layout": eraseBindGroupLayout,
|
|
101
108
|
"entries": $entries3
|
|
@@ -108,7 +115,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, highlightColo
|
|
|
108
115
|
erasePassEncoder.end();
|
|
109
116
|
}
|
|
110
117
|
// === 差分テクスチャにブラーを適用 ===
|
|
111
|
-
const blurAttachment = filterApplyBlurFilterUseCase(eraseAttachment, matrix,
|
|
118
|
+
const blurAttachment = filterApplyBlurFilterUseCase(eraseAttachment, matrix, blur_x, blur_y, quality, device_pixel_ratio, config);
|
|
112
119
|
// eraseアタッチメントを解放
|
|
113
120
|
frameBufferManager.releaseTemporaryAttachment(eraseAttachment);
|
|
114
121
|
const blurWidth = blurAttachment.width;
|
|
@@ -147,7 +154,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, highlightColo
|
|
|
147
154
|
if (!pipeline || !bindGroupLayout) {
|
|
148
155
|
console.error("[WebGPU BevelFilter] Pipeline not found");
|
|
149
156
|
frameBufferManager.releaseTemporaryAttachment(blurAttachment);
|
|
150
|
-
return
|
|
157
|
+
return source_attachment;
|
|
151
158
|
}
|
|
152
159
|
// サンプラーを作成
|
|
153
160
|
const sampler = textureManager.createSampler("bevel_sampler", true);
|
|
@@ -158,8 +165,8 @@ export const execute = (sourceAttachment, matrix, distance, angle, highlightColo
|
|
|
158
165
|
// baseScale, baseOffset (16 bytes)
|
|
159
166
|
// blurScale, blurOffset (16 bytes)
|
|
160
167
|
// Total: 80 bytes → 16 floats + 4 floats = 20 floats (80 bytes)
|
|
161
|
-
const [hr, hg, hb, ha] =
|
|
162
|
-
const [sr, sg, sb, sa] =
|
|
168
|
+
const [hr, hg, hb, ha] = intToPremultipliedRGBA(highlight_color, highlight_alpha);
|
|
169
|
+
const [sr, sg, sb, sa] = intToPremultipliedRGBA(shadow_color, shadow_alpha);
|
|
163
170
|
$uniform20[0] = hr;
|
|
164
171
|
$uniform20[1] = hg;
|
|
165
172
|
$uniform20[2] = hb;
|
|
@@ -193,7 +200,7 @@ export const execute = (sourceAttachment, matrix, distance, angle, highlightColo
|
|
|
193
200
|
$entries4[0].resource.buffer = uniformBuffer;
|
|
194
201
|
$entries4[1].resource = sampler;
|
|
195
202
|
$entries4[2].resource = blurAttachment.texture.view;
|
|
196
|
-
$entries4[3].resource =
|
|
203
|
+
$entries4[3].resource = source_attachment.texture.view;
|
|
197
204
|
const bindGroup = device.createBindGroup({
|
|
198
205
|
"layout": bindGroupLayout,
|
|
199
206
|
"entries": $entries4
|
|
@@ -4,13 +4,13 @@ import type { IFilterConfig } from "../../interface/IFilterConfig";
|
|
|
4
4
|
* @description ブラーフィルターを適用
|
|
5
5
|
* Apply blur filter
|
|
6
6
|
*
|
|
7
|
-
* @param {IAttachmentObject}
|
|
7
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
8
8
|
* @param {Float32Array} matrix - 変換行列
|
|
9
|
-
* @param {number}
|
|
10
|
-
* @param {number}
|
|
9
|
+
* @param {number} blur_x - X方向のブラー量
|
|
10
|
+
* @param {number} blur_y - Y方向のブラー量
|
|
11
11
|
* @param {number} quality - クオリティ (1-15)
|
|
12
|
-
* @param {number}
|
|
12
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
13
13
|
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
14
14
|
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
15
15
|
*/
|
|
16
|
-
export declare const execute: (
|
|
16
|
+
export declare const execute: (source_attachment: IAttachmentObject, matrix: Float32Array, blur_x: number, blur_y: number, quality: number, device_pixel_ratio: number, config: IFilterConfig) => IAttachmentObject;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { $offset } from "../FilterOffset";
|
|
2
2
|
import { calculateBlurParams, calculateDirectionalBlurParams } from "../BlurFilterUseCase";
|
|
3
|
-
import { shouldUseComputeShader } from "./service/BlurFilterComputeShaderService";
|
|
4
|
-
import { execute as executeBlurCompute } from "../../Compute/service/ComputeExecuteBlurService";
|
|
5
3
|
/**
|
|
6
4
|
* @description プリアロケートされたFloat32Array (サイズ4)
|
|
7
5
|
*/
|
|
@@ -18,26 +16,26 @@ const $entries3 = [
|
|
|
18
16
|
* @description ブラーフィルターを適用
|
|
19
17
|
* Apply blur filter
|
|
20
18
|
*
|
|
21
|
-
* @param {IAttachmentObject}
|
|
19
|
+
* @param {IAttachmentObject} source_attachment - 入力テクスチャ(アタッチメント)
|
|
22
20
|
* @param {Float32Array} matrix - 変換行列
|
|
23
|
-
* @param {number}
|
|
24
|
-
* @param {number}
|
|
21
|
+
* @param {number} blur_x - X方向のブラー量
|
|
22
|
+
* @param {number} blur_y - Y方向のブラー量
|
|
25
23
|
* @param {number} quality - クオリティ (1-15)
|
|
26
|
-
* @param {number}
|
|
24
|
+
* @param {number} device_pixel_ratio - デバイスピクセル比
|
|
27
25
|
* @param {IFilterConfig} config - WebGPUリソース設定
|
|
28
26
|
* @return {IAttachmentObject} - フィルター適用後のアタッチメント
|
|
29
27
|
*/
|
|
30
|
-
export const execute = (
|
|
28
|
+
export const execute = (source_attachment, matrix, blur_x, blur_y, quality, device_pixel_ratio, config) => {
|
|
31
29
|
const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
|
|
32
30
|
// ブラーパラメータを計算
|
|
33
|
-
const blurParams = calculateBlurParams(matrix,
|
|
31
|
+
const blurParams = calculateBlurParams(matrix, blur_x, blur_y, quality, device_pixel_ratio);
|
|
34
32
|
const { baseBlurX, baseBlurY, offsetX, offsetY, bufferScaleX, bufferScaleY } = blurParams;
|
|
35
33
|
// オフセットを更新
|
|
36
34
|
$offset.x += offsetX;
|
|
37
35
|
$offset.y += offsetY;
|
|
38
36
|
// ブラー用バッファサイズを計算
|
|
39
|
-
const width =
|
|
40
|
-
const height =
|
|
37
|
+
const width = source_attachment.width + offsetX * 2;
|
|
38
|
+
const height = source_attachment.height + offsetY * 2;
|
|
41
39
|
const bufferWidth = Math.ceil(width * bufferScaleX);
|
|
42
40
|
const bufferHeight = Math.ceil(height * bufferScaleY);
|
|
43
41
|
// ピンポンバッファ用の一時アタッチメントを作成
|
|
@@ -46,38 +44,25 @@ export const execute = (sourceAttachment, matrix, blurX, blurY, quality, deviceP
|
|
|
46
44
|
// サンプラーを作成(線形補間)
|
|
47
45
|
const sampler = textureManager.createSampler("blur_sampler", true);
|
|
48
46
|
// ソーステクスチャをattachment0にコピー(スケーリング付き)
|
|
49
|
-
copyTextureToAttachment(device, commandEncoder, frameBufferManager, pipelineManager,
|
|
47
|
+
copyTextureToAttachment(device, commandEncoder, frameBufferManager, pipelineManager, source_attachment, attachment0, sampler, bufferScaleX, bufferScaleY, offsetX * bufferScaleX, offsetY * bufferScaleY, config.bufferManager);
|
|
50
48
|
// バッファスケールを考慮したブラー値
|
|
51
49
|
const bufferBlurX = baseBlurX * bufferScaleX;
|
|
52
50
|
const bufferBlurY = baseBlurY * bufferScaleY;
|
|
53
|
-
// Compute Shaderを使用すべきか判定
|
|
54
|
-
const useCompute = config.computePipelineManager
|
|
55
|
-
&& shouldUseComputeShader(baseBlurX, baseBlurY, bufferWidth, bufferHeight);
|
|
56
51
|
// ブラーパスを実行
|
|
57
52
|
const attachments = [attachment0, attachment1];
|
|
58
53
|
let attachmentIndex = 0;
|
|
59
54
|
for (let q = 0; q < quality; ++q) {
|
|
60
55
|
// 水平ブラー
|
|
61
|
-
if (
|
|
56
|
+
if (blur_x > 0) {
|
|
62
57
|
const srcIndex = attachmentIndex;
|
|
63
58
|
attachmentIndex = (attachmentIndex + 1) % 2;
|
|
64
|
-
|
|
65
|
-
executeBlurCompute(device, commandEncoder, config.computePipelineManager, attachments[srcIndex], attachments[attachmentIndex], true, bufferBlurX, config.bufferManager);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
applyDirectionalBlur(device, commandEncoder, frameBufferManager, pipelineManager, attachments[srcIndex], attachments[attachmentIndex], sampler, true, bufferBlurX, config.bufferManager);
|
|
69
|
-
}
|
|
59
|
+
applyDirectionalBlur(device, commandEncoder, frameBufferManager, pipelineManager, attachments[srcIndex], attachments[attachmentIndex], sampler, true, bufferBlurX, config.bufferManager);
|
|
70
60
|
}
|
|
71
61
|
// 垂直ブラー
|
|
72
|
-
if (
|
|
62
|
+
if (blur_y > 0) {
|
|
73
63
|
const srcIndex = attachmentIndex;
|
|
74
64
|
attachmentIndex = (attachmentIndex + 1) % 2;
|
|
75
|
-
|
|
76
|
-
executeBlurCompute(device, commandEncoder, config.computePipelineManager, attachments[srcIndex], attachments[attachmentIndex], false, bufferBlurY, config.bufferManager);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
applyDirectionalBlur(device, commandEncoder, frameBufferManager, pipelineManager, attachments[srcIndex], attachments[attachmentIndex], sampler, false, bufferBlurY, config.bufferManager);
|
|
80
|
-
}
|
|
65
|
+
applyDirectionalBlur(device, commandEncoder, frameBufferManager, pipelineManager, attachments[srcIndex], attachments[attachmentIndex], sampler, false, bufferBlurY, config.bufferManager);
|
|
81
66
|
}
|
|
82
67
|
}
|
|
83
68
|
// 結果のアタッチメント
|
|
@@ -85,7 +70,7 @@ export const execute = (sourceAttachment, matrix, blurX, blurY, quality, deviceP
|
|
|
85
70
|
// バッファスケールが1でない場合は元のサイズにアップスケール
|
|
86
71
|
if (bufferScaleX !== 1 || bufferScaleY !== 1) {
|
|
87
72
|
const finalAttachment = frameBufferManager.createTemporaryAttachment(width, height);
|
|
88
|
-
upscaleTexture(device, commandEncoder, frameBufferManager, pipelineManager, resultAttachment, finalAttachment, sampler,
|
|
73
|
+
upscaleTexture(device, commandEncoder, frameBufferManager, pipelineManager, resultAttachment, finalAttachment, sampler, config.bufferManager);
|
|
89
74
|
// ピンポンバッファを解放
|
|
90
75
|
frameBufferManager.releaseTemporaryAttachment(attachment0);
|
|
91
76
|
frameBufferManager.releaseTemporaryAttachment(attachment1);
|
|
@@ -100,25 +85,33 @@ export const execute = (sourceAttachment, matrix, blurX, blurY, quality, deviceP
|
|
|
100
85
|
};
|
|
101
86
|
/**
|
|
102
87
|
* @description テクスチャをアタッチメントにコピー(オフセット位置に配置、スケーリング対応)
|
|
88
|
+
* Copy texture to attachment with offset placement and scaling support
|
|
103
89
|
*
|
|
104
|
-
* @param
|
|
105
|
-
* @param
|
|
106
|
-
* @param
|
|
107
|
-
* @param
|
|
108
|
-
* @param
|
|
109
|
-
* @param
|
|
90
|
+
* @param {GPUDevice} device - GPUデバイス
|
|
91
|
+
* @param {GPUCommandEncoder} command_encoder - コマンドエンコーダー
|
|
92
|
+
* @param {IFilterConfig["frameBufferManager"]} frame_buffer_manager - フレームバッファマネージャー
|
|
93
|
+
* @param {IFilterConfig["pipelineManager"]} pipeline_manager - パイプラインマネージャー
|
|
94
|
+
* @param {IAttachmentObject} source - ソーステクスチャ
|
|
95
|
+
* @param {IAttachmentObject} dest - デストテクスチャ(ソースより大きい)
|
|
96
|
+
* @param {GPUSampler} sampler - サンプラー
|
|
97
|
+
* @param {number} buffer_scale_x - X方向のバッファスケール
|
|
98
|
+
* @param {number} buffer_scale_y - Y方向のバッファスケール
|
|
99
|
+
* @param {number} pixel_offset_x - デスト内でのX方向オフセット(ピクセル単位、スケーリング済み)
|
|
100
|
+
* @param {number} pixel_offset_y - デスト内でのY方向オフセット(ピクセル単位、スケーリング済み)
|
|
101
|
+
* @param {IFilterConfig["bufferManager"]} [buffer_manager] - バッファマネージャー
|
|
102
|
+
* @return {void}
|
|
110
103
|
*/
|
|
111
|
-
const copyTextureToAttachment = (device,
|
|
104
|
+
const copyTextureToAttachment = (device, command_encoder, frame_buffer_manager, pipeline_manager, source, dest, sampler, buffer_scale_x, buffer_scale_y, pixel_offset_x, pixel_offset_y, buffer_manager) => {
|
|
112
105
|
// texture_copy_rgba8を使用し、ビューポートでオフセットを制御
|
|
113
|
-
const pipeline =
|
|
114
|
-
const bindGroupLayout =
|
|
106
|
+
const pipeline = pipeline_manager.getPipeline("texture_copy_rgba8");
|
|
107
|
+
const bindGroupLayout = pipeline_manager.getBindGroupLayout("texture_copy");
|
|
115
108
|
if (!pipeline || !bindGroupLayout) {
|
|
116
109
|
console.error("[WebGPU BlurFilter] texture_copy_rgba8 pipeline not found");
|
|
117
110
|
return;
|
|
118
111
|
}
|
|
119
112
|
// デスト内でのソース描画サイズ(スケーリング後)
|
|
120
|
-
const scaledSourceWidth = source.width *
|
|
121
|
-
const scaledSourceHeight = source.height *
|
|
113
|
+
const scaledSourceWidth = source.width * buffer_scale_x;
|
|
114
|
+
const scaledSourceHeight = source.height * buffer_scale_y;
|
|
122
115
|
// シェーダー: uv = texCoord * scale + offset
|
|
123
116
|
// ソース全体をサンプリングするので scale = 1, offset = 0
|
|
124
117
|
const scaleX = 1;
|
|
@@ -130,13 +123,13 @@ const copyTextureToAttachment = (device, commandEncoder, frameBufferManager, pip
|
|
|
130
123
|
$uniform4[1] = scaleY;
|
|
131
124
|
$uniform4[2] = offsetX;
|
|
132
125
|
$uniform4[3] = offsetY;
|
|
133
|
-
const uniformBuffer =
|
|
134
|
-
?
|
|
126
|
+
const uniformBuffer = buffer_manager
|
|
127
|
+
? buffer_manager.acquireAndWriteUniformBuffer($uniform4)
|
|
135
128
|
: device.createBuffer({
|
|
136
129
|
"size": $uniform4.byteLength,
|
|
137
130
|
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
138
131
|
});
|
|
139
|
-
if (!
|
|
132
|
+
if (!buffer_manager) {
|
|
140
133
|
device.queue.writeBuffer(uniformBuffer, 0, $uniform4);
|
|
141
134
|
}
|
|
142
135
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
@@ -146,27 +139,40 @@ const copyTextureToAttachment = (device, commandEncoder, frameBufferManager, pip
|
|
|
146
139
|
"layout": bindGroupLayout,
|
|
147
140
|
"entries": $entries3
|
|
148
141
|
});
|
|
149
|
-
const renderPassDescriptor =
|
|
150
|
-
const passEncoder =
|
|
142
|
+
const renderPassDescriptor = frame_buffer_manager.createRenderPassDescriptor(dest.texture.view, 0, 0, 0, 0, "clear");
|
|
143
|
+
const passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
|
|
151
144
|
passEncoder.setPipeline(pipeline);
|
|
152
145
|
passEncoder.setBindGroup(0, bindGroup);
|
|
153
146
|
// ビューポートを設定してオフセット位置に描画
|
|
154
|
-
passEncoder.setViewport(
|
|
155
|
-
passEncoder.setScissorRect(Math.floor(
|
|
147
|
+
passEncoder.setViewport(pixel_offset_x, pixel_offset_y, scaledSourceWidth, scaledSourceHeight, 0, 1);
|
|
148
|
+
passEncoder.setScissorRect(Math.floor(pixel_offset_x), Math.floor(pixel_offset_y), Math.ceil(scaledSourceWidth), Math.ceil(scaledSourceHeight));
|
|
156
149
|
passEncoder.draw(6, 1, 0, 0);
|
|
157
150
|
passEncoder.end();
|
|
158
151
|
// Note: uniformBuffer is not destroyed here - it will be garbage collected after GPU submission
|
|
159
152
|
};
|
|
160
153
|
/**
|
|
161
154
|
* @description 方向ブラーを適用
|
|
155
|
+
* Apply directional blur pass
|
|
156
|
+
*
|
|
157
|
+
* @param {GPUDevice} device - GPUデバイス
|
|
158
|
+
* @param {GPUCommandEncoder} command_encoder - コマンドエンコーダー
|
|
159
|
+
* @param {IFilterConfig["frameBufferManager"]} frame_buffer_manager - フレームバッファマネージャー
|
|
160
|
+
* @param {IFilterConfig["pipelineManager"]} pipeline_manager - パイプラインマネージャー
|
|
161
|
+
* @param {IAttachmentObject} source - ソーステクスチャ
|
|
162
|
+
* @param {IAttachmentObject} dest - デストテクスチャ
|
|
163
|
+
* @param {GPUSampler} sampler - サンプラー
|
|
164
|
+
* @param {boolean} is_horizontal - 水平方向かどうか
|
|
165
|
+
* @param {number} blur - ブラー量
|
|
166
|
+
* @param {IFilterConfig["bufferManager"]} [buffer_manager] - バッファマネージャー
|
|
167
|
+
* @return {void}
|
|
162
168
|
*/
|
|
163
|
-
const applyDirectionalBlur = (device,
|
|
164
|
-
const params = calculateDirectionalBlurParams(
|
|
169
|
+
const applyDirectionalBlur = (device, command_encoder, frame_buffer_manager, pipeline_manager, source, dest, sampler, is_horizontal, blur, buffer_manager) => {
|
|
170
|
+
const params = calculateDirectionalBlurParams(is_horizontal, blur, source.width, source.height);
|
|
165
171
|
const { offsetX, offsetY, fraction, samples, halfBlur } = params;
|
|
166
172
|
// halfBlurに対応するパイプラインを取得(1〜16の範囲でクランプ)
|
|
167
173
|
const clampedHalfBlur = Math.max(1, Math.min(16, halfBlur));
|
|
168
|
-
const pipeline =
|
|
169
|
-
const bindGroupLayout =
|
|
174
|
+
const pipeline = pipeline_manager.getPipeline(`blur_filter_${clampedHalfBlur}`);
|
|
175
|
+
const bindGroupLayout = pipeline_manager.getBindGroupLayout("blur_filter");
|
|
170
176
|
if (!pipeline || !bindGroupLayout) {
|
|
171
177
|
console.error(`[WebGPU BlurFilter] blur_filter_${clampedHalfBlur} pipeline not found`);
|
|
172
178
|
return;
|
|
@@ -176,13 +182,13 @@ const applyDirectionalBlur = (device, commandEncoder, frameBufferManager, pipeli
|
|
|
176
182
|
$uniform4[1] = offsetY;
|
|
177
183
|
$uniform4[2] = fraction;
|
|
178
184
|
$uniform4[3] = samples;
|
|
179
|
-
const uniformBuffer =
|
|
180
|
-
?
|
|
185
|
+
const uniformBuffer = buffer_manager
|
|
186
|
+
? buffer_manager.acquireAndWriteUniformBuffer($uniform4)
|
|
181
187
|
: device.createBuffer({
|
|
182
188
|
"size": $uniform4.byteLength,
|
|
183
189
|
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
184
190
|
});
|
|
185
|
-
if (!
|
|
191
|
+
if (!buffer_manager) {
|
|
186
192
|
device.queue.writeBuffer(uniformBuffer, 0, $uniform4);
|
|
187
193
|
}
|
|
188
194
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
@@ -192,8 +198,8 @@ const applyDirectionalBlur = (device, commandEncoder, frameBufferManager, pipeli
|
|
|
192
198
|
"layout": bindGroupLayout,
|
|
193
199
|
"entries": $entries3
|
|
194
200
|
});
|
|
195
|
-
const renderPassDescriptor =
|
|
196
|
-
const passEncoder =
|
|
201
|
+
const renderPassDescriptor = frame_buffer_manager.createRenderPassDescriptor(dest.texture.view, 0, 0, 0, 0, "clear");
|
|
202
|
+
const passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
|
|
197
203
|
passEncoder.setPipeline(pipeline);
|
|
198
204
|
passEncoder.setBindGroup(0, bindGroup);
|
|
199
205
|
passEncoder.draw(6, 1, 0, 0);
|
|
@@ -202,11 +208,22 @@ const applyDirectionalBlur = (device, commandEncoder, frameBufferManager, pipeli
|
|
|
202
208
|
};
|
|
203
209
|
/**
|
|
204
210
|
* @description テクスチャをアップスケール(ソース全体をデスト全体にマッピング)
|
|
211
|
+
* Upscale texture by mapping entire source to entire destination
|
|
212
|
+
*
|
|
213
|
+
* @param {GPUDevice} device - GPUデバイス
|
|
214
|
+
* @param {GPUCommandEncoder} command_encoder - コマンドエンコーダー
|
|
215
|
+
* @param {IFilterConfig["frameBufferManager"]} frame_buffer_manager - フレームバッファマネージャー
|
|
216
|
+
* @param {IFilterConfig["pipelineManager"]} pipeline_manager - パイプラインマネージャー
|
|
217
|
+
* @param {IAttachmentObject} source - ソーステクスチャ
|
|
218
|
+
* @param {IAttachmentObject} dest - デストテクスチャ
|
|
219
|
+
* @param {GPUSampler} sampler - サンプラー
|
|
220
|
+
* @param {IFilterConfig["bufferManager"]} [buffer_manager] - バッファマネージャー
|
|
221
|
+
* @return {void}
|
|
205
222
|
*/
|
|
206
|
-
const upscaleTexture = (device,
|
|
223
|
+
const upscaleTexture = (device, command_encoder, frame_buffer_manager, pipeline_manager, source, dest, sampler, buffer_manager) => {
|
|
207
224
|
// temp_アタッチメントはrgba8unormフォーマットなので、texture_copy_rgba8パイプラインを使用
|
|
208
|
-
const pipeline =
|
|
209
|
-
const bindGroupLayout =
|
|
225
|
+
const pipeline = pipeline_manager.getPipeline("texture_copy_rgba8");
|
|
226
|
+
const bindGroupLayout = pipeline_manager.getBindGroupLayout("texture_copy");
|
|
210
227
|
if (!pipeline || !bindGroupLayout) {
|
|
211
228
|
console.error("[WebGPU BlurFilter] texture_copy_rgba8 pipeline not found");
|
|
212
229
|
return;
|
|
@@ -218,13 +235,13 @@ const upscaleTexture = (device, commandEncoder, frameBufferManager, pipelineMana
|
|
|
218
235
|
$uniform4[1] = 1;
|
|
219
236
|
$uniform4[2] = 0;
|
|
220
237
|
$uniform4[3] = 0;
|
|
221
|
-
const uniformBuffer =
|
|
222
|
-
?
|
|
238
|
+
const uniformBuffer = buffer_manager
|
|
239
|
+
? buffer_manager.acquireAndWriteUniformBuffer($uniform4)
|
|
223
240
|
: device.createBuffer({
|
|
224
241
|
"size": $uniform4.byteLength,
|
|
225
242
|
"usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
226
243
|
});
|
|
227
|
-
if (!
|
|
244
|
+
if (!buffer_manager) {
|
|
228
245
|
device.queue.writeBuffer(uniformBuffer, 0, $uniform4);
|
|
229
246
|
}
|
|
230
247
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
@@ -234,8 +251,8 @@ const upscaleTexture = (device, commandEncoder, frameBufferManager, pipelineMana
|
|
|
234
251
|
"layout": bindGroupLayout,
|
|
235
252
|
"entries": $entries3
|
|
236
253
|
});
|
|
237
|
-
const renderPassDescriptor =
|
|
238
|
-
const passEncoder =
|
|
254
|
+
const renderPassDescriptor = frame_buffer_manager.createRenderPassDescriptor(dest.texture.view, 0, 0, 0, 0, "clear");
|
|
255
|
+
const passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
|
|
239
256
|
passEncoder.setPipeline(pipeline);
|
|
240
257
|
passEncoder.setBindGroup(0, bindGroup);
|
|
241
258
|
passEncoder.draw(6, 1, 0, 0);
|