@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
|
@@ -11,27 +11,78 @@ import { execute as filterApplyGradientBevelFilterUseCase } from "../../Filter/G
|
|
|
11
11
|
import { execute as filterApplyGradientGlowFilterUseCase } from "../../Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase";
|
|
12
12
|
import { execute as filterApplyDisplacementMapFilterUseCase } from "../../Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase";
|
|
13
13
|
import { execute as blendApplyComplexBlendUseCase } from "../../Blend/usecase/BlendApplyComplexBlendUseCase";
|
|
14
|
+
import { $isMaskTestEnabled, $getMaskStencilReference } from "../../Mask";
|
|
15
|
+
/**
|
|
16
|
+
* @description ユニフォームデータの事前確保配列(4要素)
|
|
17
|
+
* Pre-allocated uniform data array (4 elements)
|
|
18
|
+
*/
|
|
14
19
|
const $uniform4 = new Float32Array(4);
|
|
20
|
+
/**
|
|
21
|
+
* @description ユニフォームデータの事前確保配列A(6要素)
|
|
22
|
+
* Pre-allocated uniform data array A (6 elements)
|
|
23
|
+
*/
|
|
15
24
|
const $uniform6a = new Float32Array(6);
|
|
25
|
+
/**
|
|
26
|
+
* @description ユニフォームデータの事前確保配列B(6要素)
|
|
27
|
+
* Pre-allocated uniform data array B (6 elements)
|
|
28
|
+
*/
|
|
16
29
|
const $uniform6b = new Float32Array(6);
|
|
30
|
+
/**
|
|
31
|
+
* @description ユニフォームデータの事前確保配列(8要素)
|
|
32
|
+
* Pre-allocated uniform data array (8 elements)
|
|
33
|
+
*/
|
|
17
34
|
const $uniform8 = new Float32Array(8);
|
|
35
|
+
/**
|
|
36
|
+
* @description ユニフォームデータの事前確保配列(12要素)
|
|
37
|
+
* Pre-allocated uniform data array (12 elements)
|
|
38
|
+
*/
|
|
18
39
|
const $uniform12 = new Float32Array(12);
|
|
40
|
+
/**
|
|
41
|
+
* @description ユニフォームデータの事前確保配列(20要素)
|
|
42
|
+
* Pre-allocated uniform data array (20 elements)
|
|
43
|
+
*/
|
|
19
44
|
const $uniform20 = new Float32Array(20);
|
|
20
45
|
// プリアロケート BindGroup Entry 配列
|
|
46
|
+
/**
|
|
47
|
+
* @description バインドグループエントリの事前確保配列
|
|
48
|
+
* Pre-allocated bind group entry array
|
|
49
|
+
*/
|
|
21
50
|
const $entries3 = [
|
|
22
51
|
{ "binding": 0, "resource": { "buffer": null } },
|
|
23
52
|
{ "binding": 1, "resource": null },
|
|
24
53
|
{ "binding": 2, "resource": null }
|
|
25
54
|
];
|
|
26
|
-
|
|
55
|
+
/**
|
|
56
|
+
* @description シンプルなブレンドモードのセット
|
|
57
|
+
* Set of simple blend modes
|
|
58
|
+
*/
|
|
59
|
+
const $SIMPLE_BLEND_MODES = new Set([
|
|
27
60
|
"normal", "layer", "add", "screen", "alpha", "erase", "copy"
|
|
28
61
|
]);
|
|
29
|
-
|
|
30
|
-
|
|
62
|
+
/**
|
|
63
|
+
* @description Y軸反転用ユニフォームデータ
|
|
64
|
+
* Uniform data for Y-axis flip
|
|
65
|
+
*/
|
|
66
|
+
const $Y_FLIP_UNIFORM = new Float32Array([1, -1, 0, 1]);
|
|
67
|
+
/**
|
|
68
|
+
* @description カラートランスフォームが恒等変換かどうかを判定する
|
|
69
|
+
* Checks whether the color transform is an identity transform
|
|
70
|
+
* @param {Float32Array} ct カラートランスフォーム配列 / Color transform array
|
|
71
|
+
* @return {boolean} 恒等変換の場合true / True if identity transform
|
|
72
|
+
*/
|
|
73
|
+
const $isIdentityColorTransform = (ct) => {
|
|
31
74
|
return ct[0] === 1 && ct[1] === 1 && ct[2] === 1 && ct[3] === 1
|
|
32
75
|
&& ct[4] === 0 && ct[5] === 0 && ct[6] === 0 && ct[7] === 0;
|
|
33
76
|
};
|
|
34
|
-
|
|
77
|
+
/**
|
|
78
|
+
* @description フィルター結果にカラートランスフォームを適用する
|
|
79
|
+
* Applies color transform to the filter result
|
|
80
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
81
|
+
* @param {IAttachmentObject} attachment ソースアタッチメント / Source attachment
|
|
82
|
+
* @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
|
|
83
|
+
* @return {IAttachmentObject} カラートランスフォーム適用後のアタッチメント / Attachment with color transform applied
|
|
84
|
+
*/
|
|
85
|
+
const $applyColorTransform = (config, attachment, color_transform) => {
|
|
35
86
|
const ctAttachment = config.frameBufferManager.createTemporaryAttachment(attachment.width, attachment.height);
|
|
36
87
|
const pipeline = config.pipelineManager.getPipeline("color_transform");
|
|
37
88
|
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
@@ -40,13 +91,13 @@ const applyColorTransform = (config, attachment, colorTransform) => {
|
|
|
40
91
|
}
|
|
41
92
|
// uniform: mul(vec4) + add(vec4) = 32 bytes
|
|
42
93
|
// add値は0-255スケールの生値をそのまま渡す(WebGLのフィルターCTパスと同じ)
|
|
43
|
-
$uniform8[0] =
|
|
44
|
-
$uniform8[1] =
|
|
45
|
-
$uniform8[2] =
|
|
46
|
-
$uniform8[3] =
|
|
47
|
-
$uniform8[4] =
|
|
48
|
-
$uniform8[5] =
|
|
49
|
-
$uniform8[6] =
|
|
94
|
+
$uniform8[0] = color_transform[0];
|
|
95
|
+
$uniform8[1] = color_transform[1];
|
|
96
|
+
$uniform8[2] = color_transform[2];
|
|
97
|
+
$uniform8[3] = color_transform[3];
|
|
98
|
+
$uniform8[4] = color_transform[4];
|
|
99
|
+
$uniform8[5] = color_transform[5];
|
|
100
|
+
$uniform8[6] = color_transform[6];
|
|
50
101
|
$uniform8[7] = 0;
|
|
51
102
|
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
|
|
52
103
|
const sampler = config.textureManager.createSampler("color_transform_sampler", false);
|
|
@@ -65,7 +116,15 @@ const applyColorTransform = (config, attachment, colorTransform) => {
|
|
|
65
116
|
passEncoder.end();
|
|
66
117
|
return ctAttachment;
|
|
67
118
|
};
|
|
68
|
-
|
|
119
|
+
/**
|
|
120
|
+
* @description アトラスノードからテクスチャを取得する
|
|
121
|
+
* Extracts texture from an atlas node
|
|
122
|
+
* @param {Node} node テクスチャパッカーノード / Texture packer node
|
|
123
|
+
* @param {GPUCommandEncoder} command_encoder コマンドエンコーダ / Command encoder
|
|
124
|
+
* @param {FrameBufferManager} frame_buffer_manager フレームバッファマネージャ / Frame buffer manager
|
|
125
|
+
* @return {IAttachmentObject} 取得したアタッチメント / Extracted attachment
|
|
126
|
+
*/
|
|
127
|
+
const $getTextureFromNode = (node, command_encoder, frame_buffer_manager) => {
|
|
69
128
|
// 一時アタッチメントを作成(ノードのサイズを使用)
|
|
70
129
|
const attachment = frame_buffer_manager.createTemporaryAttachment(node.w, node.h);
|
|
71
130
|
// アトラステクスチャから該当部分をコピー(複数アトラス対応)
|
|
@@ -85,27 +144,44 @@ const getTextureFromNode = (node, command_encoder, frame_buffer_manager) => {
|
|
|
85
144
|
});
|
|
86
145
|
}
|
|
87
146
|
else {
|
|
88
|
-
console.error("[WebGPU Filter] getTextureFromNode: FAILED - missing atlas or textures");
|
|
147
|
+
console.error("[WebGPU Filter] $getTextureFromNode: FAILED - missing atlas or textures");
|
|
89
148
|
}
|
|
90
149
|
return attachment;
|
|
91
150
|
};
|
|
92
|
-
|
|
93
|
-
|
|
151
|
+
/**
|
|
152
|
+
* @description ブレンドモードがシンプルかどうかを判定する
|
|
153
|
+
* Checks whether the blend mode is a simple blend mode
|
|
154
|
+
* @param {IBlendMode} blend_mode ブレンドモード / Blend mode
|
|
155
|
+
* @return {boolean} シンプルブレンドモードの場合true / True if simple blend mode
|
|
156
|
+
*/
|
|
157
|
+
const $isSimpleBlendMode = (blend_mode) => {
|
|
158
|
+
return $SIMPLE_BLEND_MODES.has(blend_mode);
|
|
94
159
|
};
|
|
95
|
-
|
|
160
|
+
/**
|
|
161
|
+
* @description メインアタッチメントの矩形領域をコピーする
|
|
162
|
+
* Copies a rectangular region from the main attachment
|
|
163
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
164
|
+
* @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
|
|
165
|
+
* @param {number} x X座標 / X coordinate
|
|
166
|
+
* @param {number} y Y座標 / Y coordinate
|
|
167
|
+
* @param {number} width 幅 / Width
|
|
168
|
+
* @param {number} height 高さ / Height
|
|
169
|
+
* @return {IAttachmentObject} コピーされたアタッチメント / Copied attachment
|
|
170
|
+
*/
|
|
171
|
+
const $copyMainAttachmentRegion = (config, main_attachment, x, y, width, height) => {
|
|
96
172
|
// 一時アタッチメントを作成
|
|
97
173
|
const dstAttachment = config.frameBufferManager.createTemporaryAttachment(width, height);
|
|
98
174
|
// レンダーパスでコピー(フォーマット変換: bgra8unorm -> rgba8unorm)
|
|
99
175
|
const pipeline = config.pipelineManager.getPipeline("complex_blend_copy");
|
|
100
176
|
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
101
|
-
if (!pipeline || !bindGroupLayout || !
|
|
177
|
+
if (!pipeline || !bindGroupLayout || !main_attachment.texture || !dstAttachment.texture) {
|
|
102
178
|
return dstAttachment;
|
|
103
179
|
}
|
|
104
180
|
// ユニフォームバッファ: scale (vec2) + offset (vec2)
|
|
105
|
-
const scaleX = width /
|
|
106
|
-
const scaleY = height /
|
|
107
|
-
const offsetX = x /
|
|
108
|
-
const offsetY = y /
|
|
181
|
+
const scaleX = width / main_attachment.width;
|
|
182
|
+
const scaleY = height / main_attachment.height;
|
|
183
|
+
const offsetX = x / main_attachment.width;
|
|
184
|
+
const offsetY = y / main_attachment.height;
|
|
109
185
|
$uniform4[0] = scaleX;
|
|
110
186
|
$uniform4[1] = scaleY;
|
|
111
187
|
$uniform4[2] = offsetX;
|
|
@@ -114,7 +190,7 @@ const copyMainAttachmentRegion = (config, mainAttachment, x, y, width, height) =
|
|
|
114
190
|
const sampler = config.textureManager.createSampler("filter_copy_sampler", false);
|
|
115
191
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
116
192
|
$entries3[1].resource = sampler;
|
|
117
|
-
$entries3[2].resource =
|
|
193
|
+
$entries3[2].resource = main_attachment.texture.view;
|
|
118
194
|
const bindGroup = config.device.createBindGroup({
|
|
119
195
|
"layout": bindGroupLayout,
|
|
120
196
|
"entries": $entries3
|
|
@@ -127,38 +203,48 @@ const copyMainAttachmentRegion = (config, mainAttachment, x, y, width, height) =
|
|
|
127
203
|
passEncoder.end();
|
|
128
204
|
return dstAttachment;
|
|
129
205
|
};
|
|
130
|
-
|
|
206
|
+
/**
|
|
207
|
+
* @description ブレンド結果をメインアタッチメントに描画する
|
|
208
|
+
* Draws blend result to the main attachment
|
|
209
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
210
|
+
* @param {IAttachmentObject} src_attachment ソースアタッチメント / Source attachment
|
|
211
|
+
* @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
|
|
212
|
+
* @param {number} x X座標 / X coordinate
|
|
213
|
+
* @param {number} y Y座標 / Y coordinate
|
|
214
|
+
* @return {void}
|
|
215
|
+
*/
|
|
216
|
+
const $drawBlendResultToMain = (config, src_attachment, main_attachment, x, y) => {
|
|
131
217
|
// フィルター+複雑なブレンド用のパイプライン(Y軸反転あり)を使用
|
|
132
218
|
// MSAA有効時はMSAA版パイプラインを使用してmsaaTextureに描画→texture.viewにresolve
|
|
133
|
-
const useMsaa =
|
|
219
|
+
const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
|
|
134
220
|
const pipelineName = useMsaa ? "filter_complex_blend_output_msaa" : "filter_complex_blend_output";
|
|
135
221
|
const pipeline = config.pipelineManager.getPipeline(pipelineName);
|
|
136
222
|
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("positioned_texture");
|
|
137
|
-
if (!pipeline || !bindGroupLayout || !
|
|
223
|
+
if (!pipeline || !bindGroupLayout || !src_attachment.texture || !main_attachment.texture) {
|
|
138
224
|
return;
|
|
139
225
|
}
|
|
140
226
|
// ユニフォームデータ: offset, size, viewport, padding
|
|
141
227
|
$uniform8[0] = x;
|
|
142
228
|
$uniform8[1] = y;
|
|
143
|
-
$uniform8[2] =
|
|
144
|
-
$uniform8[3] =
|
|
145
|
-
$uniform8[4] =
|
|
146
|
-
$uniform8[5] =
|
|
229
|
+
$uniform8[2] = src_attachment.width;
|
|
230
|
+
$uniform8[3] = src_attachment.height;
|
|
231
|
+
$uniform8[4] = main_attachment.width;
|
|
232
|
+
$uniform8[5] = main_attachment.height;
|
|
147
233
|
$uniform8[6] = 0;
|
|
148
234
|
$uniform8[7] = 0;
|
|
149
235
|
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
|
|
150
236
|
const sampler = config.textureManager.createSampler("filter_blend_output_sampler", false);
|
|
151
237
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
152
238
|
$entries3[1].resource = sampler;
|
|
153
|
-
$entries3[2].resource =
|
|
239
|
+
$entries3[2].resource = src_attachment.texture.view;
|
|
154
240
|
const bindGroup = config.device.createBindGroup({
|
|
155
241
|
"layout": bindGroupLayout,
|
|
156
242
|
"entries": $entries3
|
|
157
243
|
});
|
|
158
244
|
// メインアタッチメントへの描画(loadで既存内容を保持)
|
|
159
245
|
// MSAA有効時はmsaaTextureに描画してtexture.viewにresolve
|
|
160
|
-
const colorView = useMsaa ?
|
|
161
|
-
const resolveTarget = useMsaa ?
|
|
246
|
+
const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
|
|
247
|
+
const resolveTarget = useMsaa ? main_attachment.texture.view : null;
|
|
162
248
|
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
|
|
163
249
|
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
164
250
|
passEncoder.setPipeline(pipeline);
|
|
@@ -166,7 +252,20 @@ const drawBlendResultToMain = (config, srcAttachment, mainAttachment, x, y) => {
|
|
|
166
252
|
passEncoder.draw(6, 1, 0, 0);
|
|
167
253
|
passEncoder.end();
|
|
168
254
|
};
|
|
169
|
-
|
|
255
|
+
/**
|
|
256
|
+
* @description フィルター適用結果をメインキャンバスに描画する
|
|
257
|
+
* Draws filter result to the main canvas
|
|
258
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
259
|
+
* @param {IAttachmentObject} filter_attachment フィルターアタッチメント / Filter attachment
|
|
260
|
+
* @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
|
|
261
|
+
* @param {IBlendMode} blend_mode ブレンドモード / Blend mode
|
|
262
|
+
* @param {number} x X座標 / X coordinate
|
|
263
|
+
* @param {number} y Y座標 / Y coordinate
|
|
264
|
+
* @param {GPUTextureView} _main_texture_view メインテクスチャビュー(未使用) / Main texture view (unused)
|
|
265
|
+
* @param {BufferManager} _buffer_manager バッファマネージャ(未使用) / Buffer manager (unused)
|
|
266
|
+
* @return {void}
|
|
267
|
+
*/
|
|
268
|
+
const $drawFilterToMain = (config, filter_attachment, color_transform, blend_mode, x, y, _main_texture_view, _buffer_manager) => {
|
|
170
269
|
// メインアタッチメントに描画
|
|
171
270
|
// コンテナレイヤー内ではconfig.mainAttachmentがコンテナのテンポラリアタッチメントを指す
|
|
172
271
|
const mainAttachment = config.mainAttachment || config.frameBufferManager.getAttachment("main");
|
|
@@ -207,31 +306,41 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
|
|
|
207
306
|
drawHeight = mainHeight - drawY;
|
|
208
307
|
}
|
|
209
308
|
// シンプルなブレンドモードの場合
|
|
210
|
-
if (isSimpleBlendMode(blend_mode)) {
|
|
309
|
+
if ($isSimpleBlendMode(blend_mode)) {
|
|
211
310
|
// MSAA有効時はMSAA版パイプラインを使用してmsaaTextureに描画→texture.viewにresolve
|
|
212
311
|
const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
|
|
312
|
+
// マスクが有効かチェック
|
|
313
|
+
const isMasked = $isMaskTestEnabled();
|
|
314
|
+
const useStencil = isMasked
|
|
315
|
+
&& (mainAttachment.msaaStencil?.view || mainAttachment.stencil?.view);
|
|
213
316
|
// ブレンドモードに応じたパイプラインを選択
|
|
214
317
|
let pipelineName;
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
318
|
+
if (useStencil) {
|
|
319
|
+
// マスク有効時はステンシルテスト付きパイプラインを使用
|
|
320
|
+
pipelineName = useMsaa ? "filter_output_masked_msaa" : "filter_output_masked";
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
switch (blend_mode) {
|
|
324
|
+
case "add":
|
|
325
|
+
pipelineName = useMsaa ? "filter_output_add_msaa" : "filter_output_add";
|
|
326
|
+
break;
|
|
327
|
+
case "screen":
|
|
328
|
+
pipelineName = useMsaa ? "filter_output_screen_msaa" : "filter_output_screen";
|
|
329
|
+
break;
|
|
330
|
+
case "alpha":
|
|
331
|
+
pipelineName = useMsaa ? "filter_output_alpha_msaa" : "filter_output_alpha";
|
|
332
|
+
break;
|
|
333
|
+
case "erase":
|
|
334
|
+
pipelineName = useMsaa ? "filter_output_erase_msaa" : "filter_output_erase";
|
|
335
|
+
break;
|
|
336
|
+
case "copy":
|
|
337
|
+
pipelineName = useMsaa ? "texture_copy_bgra_msaa" : "texture_copy_bgra";
|
|
338
|
+
break;
|
|
339
|
+
default:
|
|
340
|
+
// normal, layer
|
|
341
|
+
pipelineName = useMsaa ? "filter_output_msaa" : "filter_output";
|
|
342
|
+
break;
|
|
343
|
+
}
|
|
235
344
|
}
|
|
236
345
|
let pipeline = config.pipelineManager.getPipeline(pipelineName);
|
|
237
346
|
let bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
@@ -265,7 +374,16 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
|
|
|
265
374
|
// MSAA有効時はmsaaTextureに描画してtexture.viewにresolve
|
|
266
375
|
const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
|
|
267
376
|
const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
|
|
268
|
-
|
|
377
|
+
let renderPassDescriptor;
|
|
378
|
+
if (useStencil) {
|
|
379
|
+
// マスク有効時はステンシル付きレンダーパスを使用
|
|
380
|
+
const stencilView = useMsaa && mainAttachment.msaaStencil?.view
|
|
381
|
+
? mainAttachment.msaaStencil.view : mainAttachment.stencil.view;
|
|
382
|
+
renderPassDescriptor = config.frameBufferManager.createStencilRenderPassDescriptor(colorView, stencilView, "load", "load", resolveTarget);
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
|
|
386
|
+
}
|
|
269
387
|
// Viewportはfloat値でサブピクセル精度を維持(WebGLのsetTransform相当)
|
|
270
388
|
// ScissorはGPUIntegerCoordinate必須のため整数化し、viewport領域を包含する
|
|
271
389
|
const vpX = Math.max(0, drawX);
|
|
@@ -283,6 +401,10 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
|
|
|
283
401
|
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
284
402
|
passEncoder.setPipeline(pipeline);
|
|
285
403
|
passEncoder.setBindGroup(0, bindGroup);
|
|
404
|
+
// マスク有効時はステンシル参照値を設定
|
|
405
|
+
if (useStencil) {
|
|
406
|
+
passEncoder.setStencilReference($getMaskStencilReference());
|
|
407
|
+
}
|
|
286
408
|
passEncoder.setViewport(vpX, vpY, vpW, vpH, 0, 1);
|
|
287
409
|
passEncoder.setScissorRect(scissorX, scissorY, scissorW, scissorH);
|
|
288
410
|
passEncoder.draw(6, 1, 0, 0);
|
|
@@ -291,7 +413,7 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
|
|
|
291
413
|
else {
|
|
292
414
|
// 複雑なブレンドモード(multiply, overlay, darken, lighten, hardlight等)
|
|
293
415
|
// 1. メインアタッチメントから描画先の矩形をコピー
|
|
294
|
-
const dstAttachment = copyMainAttachmentRegion(config, mainAttachment, drawX, drawY, drawWidth, drawHeight);
|
|
416
|
+
const dstAttachment = $copyMainAttachmentRegion(config, mainAttachment, drawX, drawY, drawWidth, drawHeight);
|
|
295
417
|
// 2. カラートランスフォームを準備(WebGL版と同じ:add値は生値)
|
|
296
418
|
$uniform8[0] = color_transform[0]; // mulR
|
|
297
419
|
$uniform8[1] = color_transform[1]; // mulG
|
|
@@ -312,18 +434,35 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
|
|
|
312
434
|
"frameTextures": config.frameTextures
|
|
313
435
|
});
|
|
314
436
|
// 4. 結果をメインアタッチメントに描画
|
|
315
|
-
drawBlendResultToMain(config, blendedAttachment, mainAttachment, drawX, drawY);
|
|
437
|
+
$drawBlendResultToMain(config, blendedAttachment, mainAttachment, drawX, drawY);
|
|
316
438
|
// 5. 一時テクスチャを解放
|
|
317
439
|
config.frameBufferManager.releaseTemporaryAttachment(dstAttachment);
|
|
318
440
|
config.frameBufferManager.releaseTemporaryAttachment(blendedAttachment);
|
|
319
441
|
}
|
|
320
442
|
};
|
|
443
|
+
/**
|
|
444
|
+
* @description フィルターを適用してメインキャンバスに描画する
|
|
445
|
+
* Applies filters and draws the result to the main canvas
|
|
446
|
+
* @param {Node} node テクスチャパッカーノード / Texture packer node
|
|
447
|
+
* @param {number} width 幅 / Width
|
|
448
|
+
* @param {number} height 高さ / Height
|
|
449
|
+
* @param {boolean} is_bitmap ビットマップフラグ / Whether the source is a bitmap
|
|
450
|
+
* @param {Float32Array} matrix 変換行列 / Transformation matrix
|
|
451
|
+
* @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
|
|
452
|
+
* @param {IBlendMode} blend_mode ブレンドモード / Blend mode
|
|
453
|
+
* @param {Float32Array} bounds バウンディングボックス / Bounding box
|
|
454
|
+
* @param {Float32Array} params フィルターパラメータ配列 / Filter parameters array
|
|
455
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
456
|
+
* @param {GPUTextureView} main_texture_view メインテクスチャビュー / Main texture view
|
|
457
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
458
|
+
* @return {void}
|
|
459
|
+
*/
|
|
321
460
|
export const execute = (node, width, height, is_bitmap, matrix, color_transform, blend_mode, bounds, params, config, main_texture_view, buffer_manager) => {
|
|
322
461
|
// オフセットを初期化
|
|
323
462
|
$offset.x = 0;
|
|
324
463
|
$offset.y = 0;
|
|
325
464
|
// ノードからテクスチャを取得
|
|
326
|
-
let filterAttachment = getTextureFromNode(node, config.commandEncoder, config.frameBufferManager);
|
|
465
|
+
let filterAttachment = $getTextureFromNode(node, config.commandEncoder, config.frameBufferManager);
|
|
327
466
|
// アトラスのY反転を補正
|
|
328
467
|
// WebGPUではアトラスに描画する際にY軸が反転して格納される:
|
|
329
468
|
// - Shape: FillVertexがndc.yを反転なしで使用するため、WebGPUのNDC→ピクセル変換でY反転
|
|
@@ -336,7 +475,7 @@ export const execute = (node, width, height, is_bitmap, matrix, color_transform,
|
|
|
336
475
|
if (flipPipeline && flipBindGroupLayout && flippedAttachment.texture) {
|
|
337
476
|
const sampler = config.textureManager.createSampler("filter_flip_sampler", false);
|
|
338
477
|
// scale=(1, -1), offset=(0, 1) で UV.y = texCoord.y * (-1) + 1 = 1 - texCoord.y
|
|
339
|
-
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer(Y_FLIP_UNIFORM);
|
|
478
|
+
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($Y_FLIP_UNIFORM);
|
|
340
479
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
341
480
|
$entries3[1].resource = sampler;
|
|
342
481
|
$entries3[2].resource = filterAttachment.texture.view;
|
|
@@ -650,8 +789,8 @@ export const execute = (node, width, height, is_bitmap, matrix, color_transform,
|
|
|
650
789
|
}
|
|
651
790
|
// ColorTransformが恒等変換でない場合、フィルター結果に適用
|
|
652
791
|
// WebGL版と同じ: フィルターチェーン適用後、メイン描画前にColorTransformを適用
|
|
653
|
-
if (
|
|
654
|
-
const ctAttachment = applyColorTransform(config, filterAttachment, color_transform);
|
|
792
|
+
if (!$isIdentityColorTransform(color_transform)) {
|
|
793
|
+
const ctAttachment = $applyColorTransform(config, filterAttachment, color_transform);
|
|
655
794
|
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
656
795
|
filterAttachment = ctAttachment;
|
|
657
796
|
}
|
|
@@ -662,7 +801,7 @@ export const execute = (node, width, height, is_bitmap, matrix, color_transform,
|
|
|
662
801
|
// WebGL版と同じ: スケール変換のオフセットを考慮($offsetはフィルターチェーン内部用で最終位置には不要)
|
|
663
802
|
const drawX = -offsetX + xMin + matrix[4];
|
|
664
803
|
const drawY = -offsetY + yMin + matrix[5];
|
|
665
|
-
drawFilterToMain(config, filterAttachment, color_transform, blend_mode, drawX, drawY, main_texture_view, buffer_manager);
|
|
804
|
+
$drawFilterToMain(config, filterAttachment, color_transform, blend_mode, drawX, drawY, main_texture_view, buffer_manager);
|
|
666
805
|
// フィルター用アタッチメントを解放
|
|
667
806
|
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
668
807
|
};
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
import type { IPath } from "../../interface/IPath";
|
|
2
2
|
import type { BufferManager } from "../../BufferManager";
|
|
3
3
|
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
4
|
+
/**
|
|
5
|
+
* @description ビットマップフィル描画を実行する
|
|
6
|
+
* Executes bitmap fill rendering
|
|
7
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
8
|
+
* @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
9
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
10
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
11
|
+
* @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
|
|
12
|
+
* @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
|
|
13
|
+
* @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
|
|
14
|
+
* @param {Uint8Array} pixels ピクセルデータ / Pixel data
|
|
15
|
+
* @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
|
|
16
|
+
* @param {number} width テクスチャ幅 / Texture width
|
|
17
|
+
* @param {number} height テクスチャ高さ / Texture height
|
|
18
|
+
* @param {boolean} repeat リピート有無 / Whether to repeat
|
|
19
|
+
* @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
|
|
20
|
+
* @param {number} viewport_width ビューポート幅 / Viewport width
|
|
21
|
+
* @param {number} viewport_height ビューポート高さ / Viewport height
|
|
22
|
+
* @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
|
|
23
|
+
* @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
|
|
24
|
+
* @param {number} _clip_level クリップレベル(未使用) / Clip level (unused)
|
|
25
|
+
* @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
|
|
26
|
+
*/
|
|
4
27
|
export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, path_vertices: IPath[], context_matrix: Float32Array, fill_style: Float32Array, pixels: Uint8Array, bitmap_matrix: Float32Array, width: number, height: number, repeat: boolean, smooth: boolean, viewport_width: number, viewport_height: number, use_atlas_target: boolean, use_stencil_pipeline?: boolean, _clip_level?: number) => GPUTexture | null;
|
|
@@ -2,16 +2,63 @@ import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillG
|
|
|
2
2
|
import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
|
|
3
3
|
import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
|
|
4
4
|
import { $isMaskDrawing, $getMaskStencilReference } from "../../Mask";
|
|
5
|
+
/**
|
|
6
|
+
* @description ビットマップサンプラーのキャッシュ
|
|
7
|
+
* Cache for bitmap samplers
|
|
8
|
+
*/
|
|
5
9
|
const $bitmapSamplerCache = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* @description ユニフォームデータの事前確保配列(32要素)
|
|
12
|
+
* Pre-allocated uniform data array (32 elements)
|
|
13
|
+
*/
|
|
6
14
|
const $uniformData32 = new Float32Array(32);
|
|
15
|
+
/**
|
|
16
|
+
* @description ステンシルデータの事前確保配列(16要素)
|
|
17
|
+
* Pre-allocated stencil data array (16 elements)
|
|
18
|
+
*/
|
|
7
19
|
const $stencilData16 = new Float32Array(16);
|
|
20
|
+
/**
|
|
21
|
+
* @description ステンシル用動的バインドグループのキャッシュ
|
|
22
|
+
* Cached dynamic bind group for stencil operations
|
|
23
|
+
*/
|
|
8
24
|
let $stencilDynamicBindGroup = null;
|
|
25
|
+
/**
|
|
26
|
+
* @description ステンシル用動的バッファのキャッシュ
|
|
27
|
+
* Cached dynamic buffer for stencil operations
|
|
28
|
+
*/
|
|
9
29
|
let $stencilDynamicBuffer = null;
|
|
30
|
+
/**
|
|
31
|
+
* @description バインドグループエントリの事前確保配列
|
|
32
|
+
* Pre-allocated bind group entry array
|
|
33
|
+
*/
|
|
10
34
|
const $entries3 = [
|
|
11
35
|
{ "binding": 0, "resource": { "buffer": null } },
|
|
12
36
|
{ "binding": 1, "resource": null },
|
|
13
37
|
{ "binding": 2, "resource": null }
|
|
14
38
|
];
|
|
39
|
+
/**
|
|
40
|
+
* @description ビットマップフィル描画を実行する
|
|
41
|
+
* Executes bitmap fill rendering
|
|
42
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
43
|
+
* @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
44
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
45
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
46
|
+
* @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
|
|
47
|
+
* @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
|
|
48
|
+
* @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
|
|
49
|
+
* @param {Uint8Array} pixels ピクセルデータ / Pixel data
|
|
50
|
+
* @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
|
|
51
|
+
* @param {number} width テクスチャ幅 / Texture width
|
|
52
|
+
* @param {number} height テクスチャ高さ / Texture height
|
|
53
|
+
* @param {boolean} repeat リピート有無 / Whether to repeat
|
|
54
|
+
* @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
|
|
55
|
+
* @param {number} viewport_width ビューポート幅 / Viewport width
|
|
56
|
+
* @param {number} viewport_height ビューポート高さ / Viewport height
|
|
57
|
+
* @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
|
|
58
|
+
* @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
|
|
59
|
+
* @param {number} _clip_level クリップレベル(未使用) / Clip level (unused)
|
|
60
|
+
* @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
|
|
61
|
+
*/
|
|
15
62
|
export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, path_vertices, context_matrix, fill_style, pixels, bitmap_matrix, width, height, repeat, smooth, viewport_width, viewport_height, use_atlas_target, use_stencil_pipeline = false, _clip_level = 1) => {
|
|
16
63
|
// MeshFillGenerateUseCaseで頂点データを生成(4 floats/vertex: position + bezier)
|
|
17
64
|
const mesh = meshFillGenerateUseCase(path_vertices);
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
import type { IPath } from "../../interface/IPath";
|
|
2
2
|
import type { BufferManager } from "../../BufferManager";
|
|
3
3
|
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
4
|
+
/**
|
|
5
|
+
* @description ビットマップストローク描画を実行する
|
|
6
|
+
* Executes bitmap stroke rendering
|
|
7
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
8
|
+
* @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
9
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
10
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
11
|
+
* @param {IPath[]} vertices パス頂点配列 / Path vertices array
|
|
12
|
+
* @param {number} thickness ストローク太さ / Stroke thickness
|
|
13
|
+
* @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
|
|
14
|
+
* @param {Float32Array} stroke_style ストロークスタイル(RGBA) / Stroke style (RGBA)
|
|
15
|
+
* @param {Uint8Array} pixels ピクセルデータ / Pixel data
|
|
16
|
+
* @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
|
|
17
|
+
* @param {number} width テクスチャ幅 / Texture width
|
|
18
|
+
* @param {number} height テクスチャ高さ / Texture height
|
|
19
|
+
* @param {boolean} repeat リピート有無 / Whether to repeat
|
|
20
|
+
* @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
|
|
21
|
+
* @param {number} viewport_width ビューポート幅 / Viewport width
|
|
22
|
+
* @param {number} viewport_height ビューポート高さ / Viewport height
|
|
23
|
+
* @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
|
|
24
|
+
* @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
|
|
25
|
+
* @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
|
|
26
|
+
*/
|
|
4
27
|
export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, vertices: IPath[], thickness: number, context_matrix: Float32Array, stroke_style: Float32Array, pixels: Uint8Array, bitmap_matrix: Float32Array, width: number, height: number, repeat: boolean, smooth: boolean, viewport_width: number, viewport_height: number, use_atlas_target: boolean, use_stencil_pipeline: boolean) => GPUTexture | null;
|
|
@@ -1,13 +1,48 @@
|
|
|
1
1
|
import { execute as meshBitmapStrokeGenerateUseCase } from "../../Mesh/usecase/MeshBitmapStrokeGenerateUseCase";
|
|
2
2
|
import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
|
|
3
3
|
import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
|
|
4
|
+
/**
|
|
5
|
+
* @description ビットマップサンプラーのキャッシュ
|
|
6
|
+
* Cache for bitmap samplers
|
|
7
|
+
*/
|
|
4
8
|
const $bitmapSamplerCache = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* @description ユニフォームデータの事前確保配列(32要素)
|
|
11
|
+
* Pre-allocated uniform data array (32 elements)
|
|
12
|
+
*/
|
|
5
13
|
const $uniformData32 = new Float32Array(32);
|
|
14
|
+
/**
|
|
15
|
+
* @description バインドグループエントリの事前確保配列
|
|
16
|
+
* Pre-allocated bind group entry array
|
|
17
|
+
*/
|
|
6
18
|
const $entries3 = [
|
|
7
19
|
{ "binding": 0, "resource": { "buffer": null } },
|
|
8
20
|
{ "binding": 1, "resource": null },
|
|
9
21
|
{ "binding": 2, "resource": null }
|
|
10
22
|
];
|
|
23
|
+
/**
|
|
24
|
+
* @description ビットマップストローク描画を実行する
|
|
25
|
+
* Executes bitmap stroke rendering
|
|
26
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
27
|
+
* @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
28
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
29
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
30
|
+
* @param {IPath[]} vertices パス頂点配列 / Path vertices array
|
|
31
|
+
* @param {number} thickness ストローク太さ / Stroke thickness
|
|
32
|
+
* @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
|
|
33
|
+
* @param {Float32Array} stroke_style ストロークスタイル(RGBA) / Stroke style (RGBA)
|
|
34
|
+
* @param {Uint8Array} pixels ピクセルデータ / Pixel data
|
|
35
|
+
* @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
|
|
36
|
+
* @param {number} width テクスチャ幅 / Texture width
|
|
37
|
+
* @param {number} height テクスチャ高さ / Texture height
|
|
38
|
+
* @param {boolean} repeat リピート有無 / Whether to repeat
|
|
39
|
+
* @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
|
|
40
|
+
* @param {number} viewport_width ビューポート幅 / Viewport width
|
|
41
|
+
* @param {number} viewport_height ビューポート高さ / Viewport height
|
|
42
|
+
* @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
|
|
43
|
+
* @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
|
|
44
|
+
* @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
|
|
45
|
+
*/
|
|
11
46
|
export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, vertices, thickness, context_matrix, stroke_style, pixels, bitmap_matrix, width, height, repeat, smooth, viewport_width, viewport_height, use_atlas_target, use_stencil_pipeline) => {
|
|
12
47
|
// ビットマップストローク用メッシュを生成(4 floats/vertex: position + bezier)
|
|
13
48
|
const mesh = meshBitmapStrokeGenerateUseCase(vertices, thickness);
|
|
@@ -2,4 +2,19 @@ import type { IPath } from "../../interface/IPath";
|
|
|
2
2
|
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
3
3
|
import type { BufferManager } from "../../BufferManager";
|
|
4
4
|
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
5
|
+
/**
|
|
6
|
+
* @description クリップ(マスク)描画を実行する
|
|
7
|
+
* Executes clip (mask) rendering
|
|
8
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
9
|
+
* @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
10
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
11
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
12
|
+
* @param {IAttachmentObject} current_attachment 現在のアタッチメント / Current attachment
|
|
13
|
+
* @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
|
|
14
|
+
* @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
|
|
15
|
+
* @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
|
|
16
|
+
* @param {number} global_alpha グローバルアルファ値 / Global alpha value
|
|
17
|
+
* @param {boolean} is_main_attachment メインアタッチメントフラグ / Whether this is the main attachment
|
|
18
|
+
* @return {void}
|
|
19
|
+
*/
|
|
5
20
|
export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, current_attachment: IAttachmentObject, path_vertices: IPath[], context_matrix: Float32Array, fill_style: Float32Array, global_alpha: number, is_main_attachment?: boolean) => void;
|